陷阱滤波器和matlab中的谐波噪声

时间:2012-11-13 02:30:05

标签: matlab filtering signal-processing noise

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

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

我的问题是如何识别谐波噪声发生的频率,一旦我完成了这个,我该如何在该频率下实现陷波滤波器?

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

2 个答案:

答案 0 :(得分:2)

一般程序是分析频谱,确定相关频率,然后围绕该频率设计滤波器。对于大多数实际应用来说,它们都有点毛茸茸:频率四处移动并且没有简单的方法来区分噪声和信号,因此您必须使用巧妙的技术和一些猜测。但是,如果你知道你有一个单调的腐败,那么,是的,FFT和陷波滤波器可能会成功。

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

fftfir1函数已有详细记录:搜索Mathworks网站以获取代码示例以帮助您启动和运行。

答案 1 :(得分:1)

要添加/修改xenoclast的答案,在频域中过滤可能适用于您,也可能不适用。在频域中进行过滤有许多棘手的问题,其中一些内容在此处介绍:http://blog.bjornroche.com/2012/08/why-eq-is-done-in-time-domain.html

另外一个问题是,如果您尝试一次处理整个文件,那么"宽度"过滤器的Q或Q将取决于文件的长度。这可能对你有用,或者可能没有。如果您有许多不同长度的文件,请不要以这种方式获得类似的结果。

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

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

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

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

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

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