首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音频.wav文件的SNR和过滤技术的客观评价

音频.wav文件的SNR和过滤技术的客观评价
EN

Stack Overflow用户
提问于 2017-01-01 15:44:43
回答 1查看 2.9K关注 0票数 0

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

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

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

我需要知道过滤器能减少多少dB。我认为信噪比是一种可以给出滤波算法性能的指标,并对滤波前和滤波后的性能进行比较。

有谁知道:

  1. 信噪比是评价算法性能和测量增强效果的客观指标吗?
  2. 在这种情况下,是否有其他合适的客观措施可供使用?
  3. 如果现场录音已经包含噪音,而我不需要添加噪音,情况会怎样?(在我的例子中,噪音是风)

下面是我为计算信噪比而编写的一个简单的MATLAB代码:

代码语言:javascript
复制
[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'])
EN

回答 1

Stack Overflow用户

发布于 2017-01-05 14:02:17

如果你对信号中的噪声比例感兴趣,那么信噪比是一个很好的优点。所以,如果你想说明你要消除信号中的噪音,那么这是一个很好的选择。另一个优点是无杂散的动态范围,指示你的信号和杂散信号(噪声)最强频率的距离。我觉得不是

代码语言:javascript
复制
    snr_after = mean( signal .^ 2 ) / mean( noise_reduced_signal .^ 2 );

你可能想

代码语言:javascript
复制
    snr_after = mean( signal .^ 2 ) / mean( (noise_reduced_signal - signal_delayed).^ 2 );

才能得到过滤后的噪音。当然,您需要考虑到过滤器引入的延迟;您可以通过在初始信号中添加延迟来做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41416651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档