我的数据采样于,对于特定的分析,我只对来自特定频率的信号感兴趣 到.
当我建立一个四阶巴特沃斯滤波器并将其应用于我的数据时,我得到一个错误,并且信号所剩无几。下面是一些 Matlab 代码:
order = 4;
[b,a] = butter(order, [0.1 300]/(32000/2), 'bandpass');
y = filtfilt(b,a,data);
我得到的错误信息是:Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.101227e-16.
我还尝试先应用低通滤波器,然后再应用高通滤波器:
FOI = [0.1 300]
SampleRate = 32000;
[b_l,a_l] = butter(order, FOI(2)/(SampleRate/2), 'low' );
[b_h,a_h] = butter(order, FOI(1)/(SampleRate/2), 'high' );
tempData = filtfilt(b_l, a_l, data);
output = filtfilt(b_h, a_h, tempData);
但我一直得到相同的结果。
我的问题:
- 为什么过滤失败?
- 为什么使用顺序 3 的过滤有效但不适用于顺序 4?
- 在进行过滤之前,我是否需要对数据进行下采样(例如到 1kHz)?
编辑:其他人也遇到了同样的问题,但我正在寻找一个明确的答案。
EDIT2:如果我将高通值更改为1并在低通滤波之前进行高通滤波,一切正常。但为什么?为什么会0.1导致问题的截止?