音频.wav文件的SNR和评估过滤技术的客观度量

时间:2017-01-01 15:44:43

标签: matlab audio signal-processing

我正在进行降噪滤波技术的实验。我在数据集中的样本是音频文件(.wav),因此我有:原始录制音频文件,我将它们与噪声混合,所以我混合(噪声信号),我通过滤波算法传递这些噪声信号,输出滤波或降噪音频信号。

总的来说,我有以下几点:

  1. 原始音频文件(无噪音)
  2. 噪音(需要添加到原始信号中)
  3. 混合(嘈杂的文件)
  4. 过滤(降噪)
  5. 我需要获得滤波器可以减少多少dB。我认为SNR可以作为一种措施,可以在过滤和过滤之前对过滤算法的性能和比较给出这样的指示。

    所有人都知道:

    1. SNR是评估算法性能和衡量增强效果的良好客观指标吗?
    2. 是否有其他合适的客观措施可供使用 这个案子?
    3. 如果现场录音已包含噪音并且我不需要添加噪音,情况会怎样? (在我的情况下,噪音是风)
    4. 这是我编写的用于计算SNR的简单MATLAB代码:

      [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'])
      

1 个答案:

答案 0 :(得分:0)

如果您对信号中的噪声比例感兴趣,则信噪比是一个很好的品质因数。所以,如果你想要从信号中去除噪声,那么它是一个不错的选择。另一个品质因数是无杂散动态范围,表示信号与杂散信号(噪声)的最强频率区间之间的距离。 我想而不是

    snr_after = mean( signal .^ 2 ) / mean( noise_reduced_signal .^ 2 );

你可能想要

    snr_after = mean( signal .^ 2 ) / mean( (noise_reduced_signal - signal_delayed).^ 2 );

仅获取滤波后的噪音。当然,您需要考虑过滤器引入的延迟;你可以通过在初始信号上加一个延迟来做到这一点。