title: SNR for audio .wav files and objective measures for evaluating filtering techniques
body: <p>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. </p>
  
  <p>So in total I have the following:</p>
  
  <ol>
  <li>Original audio files (without noise)</li>
  <li>Noise (that need to be added to the original signals)</li>
  <li>Mixed (Noisy files)</li>
  <li>Filtered (noise reduced)</li>
  </ol>
  
  <p>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.</p>
  
  <p>So kindly does anybody know:</p>
  
  <ol>
  <li>Is SNR a good objective measure to evaluate the performance of the algorithm and measure the enhancement?</li>
  <li>Are there any other suitable objective measures that can be used in
  this case?</li>
  <li>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)</li>
  </ol>
  
  <p>Here is a simple MATLAB code I wrote to compute SNR:</p>
  
  <pre><code>[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'])
  </code></pre>