猜想我被这个过滤问题困住了,我认为它与我的原始数据有关,但我不太确定。所以问题如下,请参考下图,基本上,我要做的就是实现一个带通巴特沃斯滤波器来过滤原始数据轨迹(绿色)。原始数据由 2501 个点组成,采样频率为 20 kHz(100-ms)。我想使用 Matlab 函数“butter”后跟“filter”(上图)或“filtfilt”(下图)对 3 Hz 和 170 Hz 之间的轨迹进行带通滤波,最好是后者。
我的 Matlab 代码如下:
A = Average(1,:); % raw data
fs_Hz = 20000; % sampling rate (Hz)
order = 3;
fcutlow = 3; % Hz
fcuthigh = 170; % Hz
[b,a] = butter(order,[fcutlow,fcuthigh]/(fs_Hz/2), 'bandpass');
x = filtfilt(b,a,A);
plot(x);
hold on
plot(A,'color','g');
legend('filtered data','raw data');
正如您可能猜到的那样,问题是我在两个过滤函数之后观察到的偏移量。这些 2501 点迹线实际上源于一条非常长的数据迹线,我是否应该在提取这些较小的迹线之前过滤这条长迹线?偏移的原因是迹线的波动模式吗?我无法去除数据的趋势,因为我需要 y 轴信息来对这些数据进行后续分析。我应该使用完全不同类型的过滤方法吗?FIR而不是IIR??对我的问题的任何建议将不胜感激。
伊利亚皮利亚

