gpt4 book ai didi

matlab - 音频.wav文件的SNR和评估过滤技术的客观措施

转载 作者:行者123 更新时间:2023-12-03 01:48:52 29 4
gpt4 key购买 nike

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

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

  • 原始音频文件(无噪音)
  • 噪声(需要添加到原始信号中)
  • 混合(嘈杂的文件)
  • 过滤(降低噪音)

  • 我需要弄清楚滤波器可以减少多少dB。我认为SNR是一种可以对滤波算法的性能进行指示的指标,并且可以在滤波之前和之后进行比较。

    所以有人知道吗:
  • 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'])

    最佳答案

    如果您对信号中的噪声比例感兴趣,则信噪比是一个很好的品质因数。因此,如果要指出要从信号中消除噪声的观点,那么这是一个不错的选择。另一个优点是无杂散的动态范围,该范围指示信号与杂散信号的最强频点(噪声)之间的距离。
    我认为不是

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

    你可能想要
        snr_after = mean( signal .^ 2 ) / mean( (noise_reduced_signal - signal_delayed).^ 2 );

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

    关于matlab - 音频.wav文件的SNR和评估过滤技术的客观措施,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416651/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com