基本上,我的问题是我有一个 .wav 格式的语音信号,该信号被某些频率的谐波噪声源破坏。我的目标是确定这种噪声发生的频率,并使用陷波滤波器消除所述噪声。到目前为止,我已使用以下方法将语音信号读入 matlab:
[data, Fs] = wavread('signal.wav');
我的问题是如何识别谐波噪声发生的频率,一旦我做到了这一点,我该如何在该频率下实现陷波滤波器?
注意:由于我当前使用的 MATLAB 版本 (2010),我无法访问 iirnotch() 命令或 fdesign.notch()。
最佳答案
一般程序是分析频谱,识别有问题的频率,然后围绕该频率设计一个滤波器。对于大多数实际应用来说,这一切都有点模糊:频率四处移动,并且没有简单的方法来区分噪声和信号,因此您必须使用巧妙的技术和一些猜测。但是,如果您知道存在单调损坏,那么 FFT 和陷波滤波器可能可以解决问题。
您可以使用 fft
分析信号,并使用 fir1
等工具设计滤波器,我相信它是信号处理工具箱的一部分。如果您没有信号处理工具箱,您可以“手动”完成,就像变换到频域一样,删除您不需要的频率(通过将频率向量的相关元素归零)并变换回时域。有一个教程就是关于这个的 here .
fft
和 fir1
函数有详细记录:搜索 Mathworks 站点以获取代码示例以帮助您启动和运行。
关于matlab - matlab 中的陷波滤波器和谐波噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354799/