One-click Noise Removal

Edgar has made a proposal to simplify the noise removal tool.
This has me inspired to write a simple plug-in that reduces (white) noise without any user input or creation of a profile.
It uses the moving average filter (well known from statistics and data analysis) to remove unwanted noise.
It’s the simplest low pass filter and terrible from a frequency point of view. However, it’s the fastest and best suited filter for noise that is distributed over the whole band-width. A kind of noise gate is implemented too, that surpresses signals that are not periodic.

To use it, just select the noisy region and apply the “Reduce Noise” from the effect menu once or more times.
I’ve tested it with a frequency sweep. I added some noise with:

(multichan-expand 'sum (mult 0.02 (noise 2)) s)

Try it out. It’s only a start, there could be a more sophisticated algrithm be implemented, but there are specialists around for this stuff.
However, you can help me improve the code with your ideas. How much should the noise be reduced in one call? Do you want no gating? Should the tool omit the normalization? But that would result in unbalanced stereo tracks.
reduce-noise.ny (974 Bytes)

How were you philosophically going to get around voices? In the presence of white noise, a voice is either gargly/honky/martian, or hissy under the best circumstances, and voices are a very popular noise removal task. The next most popular task is wide-band

Are you developing a cousin to conferencing and communications systems? We regularly trash Microsoft’s insistence that their “enhanced services” be default, but if you’re on Skype from a noisy room, it does work pretty well. I think most are based on your assumptions that sound that never goes away is “noise” and should be analyzed and suppressed, so you’re in a very popular neighborhood there.

Having experienced multiple systems like that I can tell you with perfect assurance that some work a lot better than others. So the technique isn’t standard and you can go a long way to judging a good system just based on noise removal talents. Real time, too.


The approach is very simple. The asumption is that we are dealing with ordinary white noise. The filter that removes this kind of noise the best is the moving average, because its filter kernel is not weighted (since the noise can have any value at any time).
In addition, the signal is multiplied by the inverse of the periodicity, as it is found by the yin algorithm. This means that periods of high noise density are suppressed.
Yin searches for a fundamental frequency and returns this value with the corresponding reliability. The search begins in this version from 100 Hz upwards.
The first value (the fundamental) is currently not used. but it could serve as an input to a Highpass filter, where all frequencies below are cut.
I could imagine a version that makes use of multiple bands with the right weighting for speech that is examined with this algorithm and the output is afterwards made up accordingly.
I’ve scanned some papers that present sophisticated routines for speech cleanup, but I didn’t want to dig deeper into this subject since a realization within Nyquist is beyond my abilities.