[Elecraft] Noise Nuller

David Gilbert ab7echo at gmail.com
Thu Jul 16 16:58:28 EDT 2026


Hi, Andy.

For some reason I didn't get your post via the Elecraft reflector. A 
friend of mine forwarded it to me, so sorry for any delay.

1.  There is a little bit of delay between what I hear from my K3 
receiver's speakers and what I hear from NoiseNuller, but it is only 
enough to create a slight echo effect.  It would not be enough to affect 
the pace of making QSOs.

2.  For the Spatial processing mode, yes ... you should train the 
application on noise only first.  It only takes a few seconds , but if 
you use a period where there is both noise and signal the reduction is 
less effective.  The number of seconds needed for training is mostly a 
function of the noise profile.  I've been able to get good results with 
as few as 2 or 3 seconds if the noise is somewhat uniform even if it is 
quite loud, but that nasty solar panel noise I used in the demonstration 
seemed to work best with 6 to 10 seconds.  When I made the  recording I 
used in the demonstration I simply started the recording and then waited 
for several seconds before transmitting the narrative, but if the noise 
covers more than just the signal you can tune off a bit to train for the 
noise and then tune back to the signal.  If you listen carefully to the 
recording you can hear where the noise drifted and I had to retune the 
transmitted frequency of the narration, but even though the noise had 
shifted the training still worked.  That's sort of the inverse of tuning 
off frequency to train the noise, but the result is similar.

3.  If the noise changes in profile too much, yes, you'd probably have 
to retrain the application.  But the noise I used for the video is about 
as variable as I can imagine anyone having to deal with. It was pretty 
nasty stuff and once the application was trained on it the reduction 
captured it.

4.  I've never tried training on a pre-recorded noise file before 
switching to Live feed.  That's an interesting idea and I think it might 
work.  Browsers have an annoying habit of saving stuff in a cache and I 
had lots of problems when developing applications.  I'd make a change to 
the app but the browser was using things from the previous version 
unless I remembered to always clear the cache each time using CTRL-F5.  
That might work to some advantage for your suggestion ... train the 
noise on the pre-recorded file and then switch to Live.  Let's both give 
it a try and see if it works.

5.  if I understand it correctly (and I might not), the DJ5EU approach 
is more traditional.  It takes the signals from the two antennas, 
equalizes their amplitudes, and shifts the phase of one of the signals 
until it is 180 degrees out of phase of the other signal so that their 
sum cancels.  That works but it requires equalizing the amplitudes and 
it is less effective the closer the initial phases are ... which is why 
he uses the rotator to get better difference in the phases.  It has the 
advantage that it is less dependent upon the nature of the noise than my 
NoiseNuller application is.  For example, the DJ5EU approach could more 
easily handle noise that changed from storm static to arc welder noise, 
whereas my application would probably need to be quickly retrained. The 
NoiseNuller application works completely differently.  It performs FFT 
processing of both signals, which results in "bins" of data for each 
slice of the frequency spectrum.  Each bin has both phase and amplitude 
information, so NoiseNuller spends a few seconds statistically analyzing 
the profile of the noise and decides which bins from each signal are 
mostly associated with the resulting noise profile.  When the 
application performs a reverse FFT to turn the digital data back into 
audio it first diminishes the amplitude of each FFT bin according to how 
strongly it was associated with the noise.  Bins that aligned only with 
the noise get ignored completely.  Bins that are associated with the 
noise only some of the time during the training period get a diminished 
amplitude but not deleted because the might later be part of a desired 
signal. Bins that weren't part of the noise get left alone.  It's pretty 
sophisticated, but I can't claim any credit for it.  I developed the 
entire application with the help of ChatGPT ... I didn't write a single 
byte of the code myself.

In my opinion, NoiseNuller does have some advantage over the DG5EU 
approach.  For one, it takes very little change in phase between the two 
antennas for NoiseNuller to work.  For example, if the difference 
between the same bins from each signal is only 5 or 10 degrees, it's 
easy to completely block one versus the other.  It's just a decision, 
not a sum/difference.

Another advantage of the FFT approach is that NoiseNuller doesn't care 
in the least how the phase difference between the two signals was 
created.  As long as there is a phase difference it can make a 
decision.  In my case, I've been able to get very good separation of 
noise even at lower frequencies simply using the two yagis that are only 
ten feet apart (an OB2-40 10 feet above an OB16-30) on my tower.  Yagis 
function by manipulating phase (which can be seen by using the Far Field 
tab in EZNEC) and that phase impact is of course a function of the 
spatial direction, both for azimuth and for elevation.

As with most things, each approach has its advantages.  My answer to 
most things has always been "it depends".   ;)

Best regards,
Dave



Pretty impressive Dave, thanks for sharing.

I am lately experimenting a lot with HF noise reduction by RX Ant Phasing Controller DXE NCC-2.
I know , a different story , because I am only using one RX input port only (FTDX101MP, K3S-P3).
That is main (TX/RX) and RX auxiliary antennas as input channels for the NCC-2. The antenna choices/positions are key!
When testing RM-Noise (external server processing)https://ournetplace.com/rm-noise/
it appears to be too much latency for e.g. 30WPM CW.
It is generally clear Groundwave ( constant) and Skywave ( uncontrolled variable) phasing is different.

Questions:
1.)  Is there a relevant latency issue in your procedure, no internet involved ?
2.) I think you need to train your system with QRM, right, as shown ?
3.) If QRM type/QRG changes, will you have to retrain?
4.) Can you produce and store a QRM database for quick reuse?
5.) What do you think about the Dj5EU Systemhttps://www.qrz.com/db/DJ5EU, he can even minimize QRN (9th sample) by directivity.


Tnx, cu, vy 73 Andy
HB9CVQ, DK2VQ, AK4IG





More information about the Elecraft mailing list