I am doing experiments on a filtering technique for noise reduction. My samples in the data set are audio files (.wav), I therefore have: original recording audio files and I mix them with noise, so I get mixed (noisy signals), I pass these noisy signals through the filtering algorithm, the outputs are filtered or noise reduced audio signals.
So in total I have the following:
- Original audio files (without noise)
- Noise (that need to be added to the original signals)
- Mixed (Noisy files)
- Filtered (noise reduced)
I need to get how much dB the filter can reduce. I think of SNR as a measure that could give such indication about the performance of the filtering algorithm and a comparison before filtering and after filtering.
So kindly does anybody know:
- Is SNR a good objective measure to evaluate the performance of the algorithm and measure the enhancement?
- Are there any other suitable objective measures that can be used in this case?
- What will be the situation if field recording already contains noise and I don't need to add noise? (the noise in my case is wind)
Here is a simple MATLAB code I wrote to compute SNR:
[signal]=audioread('Original.wav');
[noise]=audioread('Noise.wav');
[noise_reduced_signal]=audioread('Filtered.wav');
[noisysignal]=audioread('Noisy.wav');
snr_before = mean( signal.^ 2 ) / mean( noise .^ 2 );
snr_before_db = 10 * log10( snr_before ) % in dB
%===================================================================%
% After noise reduction, the residual noise can be calculated as the difference
% of the wanted signal and the actual signal. Calculation of SNR is then straightforward:
%===================================================================%
snr_after = mean( signal .^ 2 ) / mean( noise_reduced_signal .^ 2 );
snr_after_db = 10 * log10( snr_after ) % in dB
Diff = snr_after_db - snr_before_db;
disp(['Diff = ' num2str(Diff) ' dB'])