Denoiser (Spectral Substraction)

I used to use a Waves® Plugin called X-Noise on my mixes and audio restoration projects. This processor is for nooise reduction such as hiss, air conditioning noise and other similar ones.  So, a couple of years ago, I wondered how this type of processors work. After looking the literature, the book Kluwer-Applications Of Digital Signal Processing To Audio And Acoustics presents the concept of Spectral Substraction, which actually is a classical noise reduction algorithm. I realized that this method is the one used by the plugin, since it firstly estimates the magnitude spectrum of noise and then is able to denoise the signal; this is the same basic principle of Spectral Substraction.


In short, it works as a multiband dynamic expansor, whose bands are processed independently. The threshold parameter of each band is auto-adjusted according to  the estimate of  spectral magnitude of noise. The best part is that the basic algorithm is really easy to implement and produces quite good results. A simple implementation in MATLAB is here.

Some audio examples:

The examples show how the basic provided code achieves relative good results. To improve it, there are many things to do, e.g.: taking care of the lengths of the filters IRs, phase effects, etc.