为什么巴特沃斯滤波器总是从零标记(幅度)开始我的信号?
信息处理
matlab
过滤器
低通滤波器
2022-01-28 00:36:47
1个回答
滤波器确实有延迟(滞后),因为它们不会立即对您的信号起作用。此外,时间 0 之前的所有样本都是零,因此通常您将从“零标记”开始,正如您所说(想象一下您的滤波器方程全为零)。
有一些方法可以使过滤器具有零延迟。它是通过所谓的零相位滤波来完成的,也称为前向后向滤波。你这样做的方式是通过两次过滤你的信号 - 向前和向后方向。显然,这仅适用于离线应用程序。在 MATLAB 中,您可以使用filtfilt函数非常轻松地完成此操作。
请在下面找到与您的案例相对应的代码。
fs = 100;
T = 2;
t = 0:1/fs:T;
f = 2;
s = 1.5*cos(2*pi*f*t) + 0.7*sin(2*pi*33*t);
[B,A]=butter(6, 5/fs,'low');
S=filter(B, A, s);
Sff=filtfilt(B, A, s);
plot(t, s)
hold on
plot(t, S)
plot(t, Sff)
grid on
legend({'Original signal', 'Signal filtered using filter', 'Signal filtered using filtfilt'})
这产生了我怀疑你想要的东西:
其它你可能感兴趣的问题


