我正在做一种降低噪音的滤波技术的实验。我在数据集中的样本是音频文件(.wav),因此我有:原始录音音频文件,我将它们与噪声混合,所以我得到混合(噪声信号),我通过滤波算法传递这些噪声信号,输出被过滤或噪声降低音频信号。
因此,总的来说,我有以下几点:
我需要知道过滤器能减少多少dB。我认为信噪比是一种可以给出滤波算法性能的指标,并对滤波前和滤波后的性能进行比较。
有谁知道:
下面是我为计算信噪比而编写的一个简单的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'])发布于 2017-01-05 14:02:17
如果你对信号中的噪声比例感兴趣,那么信噪比是一个很好的优点。所以,如果你想说明你要消除信号中的噪音,那么这是一个很好的选择。另一个优点是无杂散的动态范围,指示你的信号和杂散信号(噪声)最强频率的距离。我觉得不是
snr_after = mean( signal .^ 2 ) / mean( noise_reduced_signal .^ 2 );你可能想
snr_after = mean( signal .^ 2 ) / mean( (noise_reduced_signal - signal_delayed).^ 2 );才能得到过滤后的噪音。当然,您需要考虑到过滤器引入的延迟;您可以通过在初始信号中添加延迟来做到这一点。
https://stackoverflow.com/questions/41416651
复制相似问题