Motivation

Free software programs like PowerSDR/Thetis/PiHPSDR/LinHPSDR use the library called "WDSP" for signal processing. It is the library that does all the sdr functionality in these programs. Hats off to Dr.Warren Pratt NR0V for designing such a wonderful library.

WDSP includes two kinds of noise reduction. One is the LMS algorithm based Weiner filtering designated "NR". Another is the "Ephraim-Malah" spectral noise removal algorithm.

Some new algorithms have appeared in recent times - like RNNoise and SpecBleach. These are not designed for environments with non-stationary noise. I think HF radio may not fully qualify. But nothing stops anyone from trying it out.

So, I modified WDSP and added RNNoise as "NR3" and SpecBleach as "NR4".

RNNoise

This is a wonderful library based on Recurrent Neural Networks by Jean-Mark Valin of Mozilla. It works great for high SNR, which is the case in most office/home situations. It completely eliminates noise for a high SNR situation. It doesn't work great when the signal is weak.

In some sense, what the radio listener wants is to hear the voice when the signal is weak. So, in that respect, it fails, in my opinion. However, don't get me wrong. It is a wonderful and "magical" library and works great in a number of situation.

SpecBleach

This is a noise reduction library put together Luciano Dato based on a number of papers in the field. Luciano has a plugin for Ardour and other software too for a non-real time use. There are a number of knobs to play with. In my listening tests, it performs slightly better than NR2 with proper configuration.

Conclusion.

Now that it is all integrated into wdsp and pihpsdr - follow the links to see the modifications. I also have some modifications to rnnoise to make it work with any frame size. I hope to use it regularly and keep tweaking it. I will report my findings and update this blog post.