巴特沃斯带通滤波后的偏移

信息处理 matlab 过滤 巴特沃思
2022-01-28 10:35:18

猜想我被这个过滤问题困住了,我认为它与我的原始数据有关,但我不太确定。所以问题如下,请参考下图,基本上,我要做的就是实现一个带通巴特沃斯滤波器来过滤原始数据轨迹(绿色)。原始数据由 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??对我的问题的任何建议将不胜感激。

伊利亚皮利亚

1个回答

您的数据有一个非零直流分量,它被带通滤波器滤除。因此,滤波器输出的 DC 近似为零,这会导致信号发生相应的垂直偏移。如果要保留信号中的直流信息,则必须使用低通滤波器而不是带通滤波器。