低通滤波器的离散算法

信息处理 matlab 过滤器 低通滤波器 卡尔曼滤波器 估计
2022-02-22 21:07:15

我正在研究船舶的位置控制器。我有一个包含容器 y 位置的测量信号,该信号由低频 (<.1 rad/s) 和高频 (>.6 rad/s) 运动组成。我目前正在使用一个状态观察器,它将组合运动分成两个独立的状态(LF 和 WF 状态)。使用离散时间卡尔曼滤波器算法计算增益。

在每个时间步,我都会收到一个新的传入测量值,并且我的状态观察者会使用测量值来校正预测的状态。

我想将这种方法的性能与在测量信号上使用低通滤波器而不是使用卡尔曼滤波器进行比较。理论似乎是卡尔曼滤波器的相位滞后要低得多,但与传入的测量值相比,我在输出 LF 信号的幅度波特图中看到了一些放大,因此滤波器放大了 LF 和WF频率...

我需要一些关于如何在这样的离散时间系统中实现 n 阶低通滤波器的建议。是否有一种算法可以在每个时间步过滤传入的测量值,或者我是否需要获取测量的整个时间轨迹并过滤该信号?我正在使用 Matlab。

任何提示都非常受欢迎,斯科特

1个回答

您可能可以使用 Matlab 的filter命令。如果你这样称呼它:

[Y,Zf] = filter(B,A,X,Zi);

变量Zf包含过滤后过滤器的状态,并Zi包含过滤器过滤前的状态。您可以大致这样进行(在伪代码中):

Acquire several samples and store them in vector Samples
[Y,Z] = filter(B,1,Samples); % assuming FIR filter stored in B
while 1
    acquire new sample and store it in Sample
    [Y,Z] = filter(B,1,Sample,Z);  % Y contains the updated filter output
end

要设计过滤器,我首先要查看fir1命令。