我正在进行降噪滤波技术的实验。我在数据集中的样本是音频文件(.wav),因此我有:原始录制音频文件,我将它们与噪声混合,所以我混合(噪声信号),我通过滤波算法传递这些噪声信号,输出滤波或降噪音频信号。
总的来说,我有以下几点:
我需要获得滤波器可以减少多少dB。我认为SNR可以作为一种措施,可以在过滤和过滤之前对过滤算法的性能和比较给出这样的指示。
所有人都知道:
这是我编写的用于计算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'])
答案 0 :(得分:0)
如果您对信号中的噪声比例感兴趣,则信噪比是一个很好的品质因数。所以,如果你想要从信号中去除噪声,那么它是一个不错的选择。另一个品质因数是无杂散动态范围,表示信号与杂散信号(噪声)的最强频率区间之间的距离。 我想而不是
snr_after = mean( signal .^ 2 ) / mean( noise_reduced_signal .^ 2 );
你可能想要
snr_after = mean( signal .^ 2 ) / mean( (noise_reduced_signal - signal_delayed).^ 2 );
仅获取滤波后的噪音。当然,您需要考虑过滤器引入的延迟;你可以通过在初始信号上加一个延迟来做到这一点。