音频.wav文件的信噪比和评估滤波技术的客观指标



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

因此,我总共有以下内容:

  1. 原始音频文件(无噪音)
  2. 噪声(需要添加到原始信号中)
  3. 混合(嘈杂的文件)
  4. 过滤(降噪)

我需要知道滤波器可以减少多少dB。我认为SNR是一种度量,可以给出滤波算法性能的指示,并在滤波前和滤波后进行比较。

有人知道吗?

  1. 信噪比是否是评估算法性能和衡量增强的良好客观指标
  2. 是否有其他合适的客观措施可用于这个案子
  3. 如果现场录音已经包含噪音,而我不需要添加噪音,情况会怎样?(我的声音是风)

下面是我为计算信噪比写的一个简单的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'])

如果您对信号中的噪声比例感兴趣,信噪比是一个很好的衡量标准。因此,如果你想从信号中去除噪声,那么这是一个不错的选择。另一个优点是无杂散动态范围,指示信号与杂散信号(噪声)的最强频率仓之间的距离。我认为不是

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

你可能想要

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

以仅获得滤波后的噪声。当然,您需要将过滤器引入的延迟考虑在内;你可以通过在初始信号中添加延迟来实现这一点。

最新更新