[QEX]     [GNU radio NC]




Noise Cancelling using GNU Radio Companion


The noise cancelling is implemented in a “one mouse click” like way as described in the March/April 2019 issue of QEX.

However because the mouse cursor location is not available in GNU radio companion blocks the “one mouse click noise canceller” is implemented by using two sliders for setting the Phase difference and amplitude Ratio.

=> The GNU radio model is in NoiseCancelling_v1_zip (including demo audio files).


What is needed for noise cancelling:

-        Two identical phase coherent receivers like the ANAN200D, the SDRplay RSPduo, Flexradio 6600/6700 or Elecraft K4

-        The stereo line output audio signal of both receivers with the AGC switched off

-        The stereo audio PC/laptop input via e.g. an external soundcard (fs=48kHz)

-        GNU Radio Companion

-        Two receiving antennas

The implementation also supports the use of an audio file as input source. Three demo files are included. Two for noise cancelling and one for showing frequency selective fading.

Note: The model will run without receivers.


For effective noise cancelling both antennas have to receive the man-made noise source (QRM).

In the QEX article two orthogonal identical active small receiving loops are used.

However the main transmit antenna can also be used in combination with e.g. an active wip antenna. The antenna with the strongest man-made noise is assumed to be the noise pickup antenna. For best performance the amplitude level of the noise source on the wip antenna should be strongest.



The plot displays for the strongest frequency components (FFT bins) in the audio band the amplitude ratio P (X axes) and the phase difference P (Y axes) between the signals of the two antennas. Each dot represents a measurement of one frequency component. P and R are the coordinates in the plot.



It is not practical to use the amplitude ratio directly. If the amplitude of antenna A is |A| and of antenna B is |B| the ratio is set by:


This allows one of the signals to be zero.



When only noise is present all dots in the plot are randomly spread over the plot (assuming both antennas have the same noise floor level as with the two orthogonal loops!):



When a single man-made noise source is present the dots will be concentrated around the corresponding phase difference P and amplitude ratio R. See next plot. With increasing amplitude of the man-made noise source the dots will be increasingly concentrated.

This also applies to signals, because a man-made noise source in fact is also a signal.



The red dot represents the phase P and ratio R setting.

When hovering the mouse cursor over the plot the amplitude ratio R and phase difference P  values are shown. This helps setting the sliders for the phase difference and amplitude ratio.

The green dots are markers for 0°, 90°, 180°, 270° and 360° phase difference.


The gainRX and gainFile set the gain for the input of the receivers and for the input of the audio file.

The Phasing selection allows for inverting the noise cancelling and so enhancing the noise source (or a signal).

The A/B indicator shows the ratio setting as the ratio in dB’s between the antenna A and antenna B amplitudes.


The plotting for the noise cancelling setting information is done in the frequency domain.

The noise cancelling function itself is done in the time domain to minimize latency.

The next three screens snow the top level:




The top level is called NoiseCancelling_v1.

Hierarchical blocks are:

FFT_overlap_v1, NC_function_v1, Bulk_Space_v1, Bulk_space_plot_v1, Compare_v1 and Var2Vec_v1.




I have used the following links for installing GNU radio companion:








Last update: May 20, 2019