The best algorithm for filtering noise from a PCM 16-bit wave?
I have produced the FFT from the PCM wave. What is the best way to filter out 开发者_JS百科noise?
Thanks for your time and responses, dk
A very broad and very technical question. A quick and dirty way to get rid of hiss would be to get rid of the high frequencies (low-pass filter).
If the noise is hissy and you don't need linear-phase and the machine uses C programming, a quick-and-dirty low pass filter can be this...
signed short lowpass(signed short input)
{
static signed short last_sample=0;
signed short retvalue=(input + (last_sample * 7)) >> 3;
last_sample=retvalue;
return retvalue;
}
If the noise is power grid/mains hum you can delay the audio by 735 samples at 44,100 samples per second (for 60 hertz power) and return delayed_sample-input;
Noise is mostly stationary spectral components of the signal. Hoping you have speech or music as the wanted signal. You need to subtract the noise spectra from the original spectra.
Typical noise suppression needs a VAD (voice activity detection) module. Hope your FFT is windowed and overlapped, if not please do so. One simpler method of noise suppression is using minimum statistics, as described by Rainer Martin Where the algorithm tracks spectral minima in each frequency band without any distinction between speech activity and speech pause. By minimizing a conditional mean square estimation error criterion in each time step we derive the optimal smoothing parameter for recursive smoothing of the power spectral density of the noisy speech signal. Details are in http://www.ind.rwth-aachen.de/fileadmin/publications/martin01c.pdf “Noise Power Spectral Density Estimation Based on Optimal Smoothing and Minimum Statistics”
At the same time you could use audio editor, Audacity http://audacity.sourceforge.net/about/ to test if this noise could be removed. It has a noise suppression feature under Effects menu
精彩评论