【问题标题】:Notch filters and harmonic noise in matlabmatlab中的陷波滤波器和谐波噪声
【发布时间】:2012-11-01 12:44:43
【问题描述】:

所以基本上,我的问题是我有一个 .wav 格式的语音信号,它被某个频率的谐波噪声源破坏了。我的目标是确定这种噪声发生的频率,并使用陷波滤波器去除所述噪声。到目前为止,我已经使用以下方法将语音信号读入 matlab:

[data, Fs] = wavread('signal.wav');

我的问题是如何确定谐波噪声发生的频率,一旦我做到了,我该如何在该频率上实施陷波滤波器?

注意:由于我当前使用的 MATLAB 版本 (2010),我无法访问 iirnotch() 命令或 fdesign.notch()。

【问题讨论】:

    标签: matlab filtering signal-processing noise


    【解决方案1】:

    一般程序是分析频谱,确定有问题的频率,然后围绕该频率设计一个滤波器。对于大多数实际应用来说,这有点模糊:频率会四处移动,并且没有简单的方法可以将噪声与信号区分开来,因此您必须使用巧妙的技术和一些猜测。但是,如果您知道自己有单调损坏,那么,是的,FFT 和陷波滤波器可能会解决问题。

    您可以使用fft 分析信号,并使用fir1 等工具设计一个滤波器,我相信这是信号处理工具箱的一部分。如果您没有信号处理工具箱,您可以“手动”完成,如转换到频域,删除您不想要的频率(通过将频率向量的相关元素归零)和转换回时域。有一个关于 here 的教程。

    fftfir1 函数有据可查:搜索 Mathworks 网站以获取代码示例以帮助您启动和运行。

    【讨论】:

      【解决方案2】:

      要添加/修改 xenoclast 的答案,频域中的过滤可能适合您,也可能不适合您。频域滤波有很多棘手的问题,这里介绍了其中的一些:http://blog.bjornroche.com/2012/08/why-eq-is-done-in-time-domain.html

      另一个问题是,如果您尝试一次处理整个文件,过滤器的“宽度”或 Q 将取决于文件的长度。这可能对您有用,也可能不会。如果您有许多不同长度的文件,不要期望通过这种方式得到类似的结果。

      要设计您自己的 IIR 陷波滤波器,您可以使用 RBJ audio filter cookbook。如果您需要帮助,我在这里写了一个教程:

      http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

      我的教程使用了钟形/峰值滤波器,但很容易遵循它,然后用 RBJ 的陷波滤波器替换它。

      最后一点:假设这实际上是您的 .wav 文件中的音频信号,您也可以用耳朵查找并修复问题频率:

      • 在音频编辑程序中打开文件,让您实时调整过滤器设置(我不确定 Audacity 是否允许您这样做,但可能)。
      • 使用设置为高增益的“增强”或“参数”滤波器并扫描频率设置,直到您听到最突出的噪音。
      • 用相同频率的陷波滤波器替换升压滤波器。您可能需要调整宽度以权衡噪声消除与信号保留。
      • 根据需要重复(由于许多谐波)。
      • 保存生成的文件。

      当然,一些音频编辑应用程序具有内置的谐波降噪功能,尤其适用于 50/60 Hz 噪声。

      【讨论】:

        猜你喜欢
        • 2014-04-26
        • 2016-09-20
        • 2016-09-27
        • 2015-09-02
        • 2020-07-30
        • 2017-04-18
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        相关资源
        最近更新 更多