MATLAB中的低通滤波器返回NaN值

时间:2014-02-21 13:32:42

标签: matlab audio filter signal-processing

我正在做一些音频处理。我已经能够将一些音频文件加载到MATLAB中,播放它们,混合它们并合成信号。

然而,现在,我想在音频编辑程序中提取类似于均衡器或低通滤波器的基数。我知道MATLAB有很多过滤器和内置滤波器设计工具;我只是想添加一个简单的低通滤波器。我找到了这个指南: http://www.aquaphoenix.com/lecture/matlab10/page4.html

f = 44100;
n = [1:f];
note_a = 440;
note_csharp = 554.365;
note_e = 659.255;
chord_a = sin(2*pi*(note_a/f)*n)+sin(2*pi*(note_csharp/f)*n)+sin(2*pi*(note_e/f)*n);
fNorm = 200 / (f/2);
[b,a] = butter(10, fNorm, 'low');
chords_low = filtfilt(b, a, chord_a);

我没有错误,但过滤器输出中的所有值都是NaN。这是为什么?这首歌是立体声的,可能就是这样吗?

1 个答案:

答案 0 :(得分:1)

对于截止频率较低的设计类型,滤波器的顺序太高,因此会出现数值问题。要快速修复,请将Butterworth filter的顺序降低到略低于10的顺序.8阶滤波器适用于您的设计,或者提高截止频率也会产生实际值。

如果您想要一个具有设计指定的频率响应的滤波器,则需要级联低阶部分。 See a detailed old answer I made for information on how to go about thistf2sos功能是您的朋友。