IMU 的免费巴特沃斯滤波器订单

信息处理 过滤器设计 无限脉冲响应
2022-02-22 14:26:15

作为评估的学期项目的一部分,我目前正在尝试设计一个免费的过滤器以部署在无人机上。即使处理能力不是问题(我们有 GHz、大量流水线和所有好东西),我仍然选择在最终实现中使用 IIR 滤波器,因为在我看来这更容易在数学上表示。

正如我在此答案中所读到,某些滤波器阶数不会在输出中产生单调单位增益。因此,在这个阶段,我最感兴趣的是以一种迂回的方式证明滤波器的哪些阶数产生单调单位增益。在这个阶段,相位差几乎是无关紧要的,因为我有理由相信不会使用我们遇到任何时序约束的高阶滤波器。

因此,我编写了一些初始 matlab 代码来测试我的应用程序在一阶巴特沃斯对上,如下所示。值得注意的是,我们的采样频率为 1 Khz,即奈奎斯特频率为 500 Hz。因此,0.25 的归一化截止频率等于 125 Hz,尽管在此阶段这是任意的。可能的问题包括最后一行中的 2 个滤波器的总和,或者需要向高通添加一些积分器项。我们目前也有一些随无人机一起提供的库存免费过滤器(所有过滤器都是来自 Quanser 的一个大包装,他们的自动驾驶汽车研究套件),但只使用它们而不知道它们做什么似乎乏善可陈。完成后不久,我还将仔细研究 IMU 和磁力计的过滤器,因为我认为我可以做得更好。

clc;
clear;
close all;
w_n=0.25; %cutoff frequency

[zL1,pL1,kL1] = butter(1,w_n,'low');
[numL1,denL1] = zp2tf(zL1,pL1,kL1);
sysL1=tf(numL1,denL1);

[zH1,pH1,kH1] = butter(1,w_n,'high');
[numH1,denH1] = zp2tf(zH1,pH1,kH1);
sysH1=tf(numH1,denH1);

sys1=sysL1+sysH1; 

制作这个传递函数的波特图给了我一些与我所期望的完全不同的东西,如下所示。 sys1 的波特图

感谢任何帮助和指导,非常感谢!

1个回答

您只是看到了 double 类型的量化。基本上你有一个极点和一个零点,它们应该相互抵消。但是由于双精度数据类型的精度有限,它没有。因此,您可以获得 10^-15 dB 的增益,而不是 0 dB。

但在现实生活中,99.99999% 的时间 10^-15 dB = 0 dB

作为记录,我认为您可以使用 Matlab 中的 minreal 函数来取消几乎相等的极点和零点。然后,您将获得单位增益和 0 dB 和 0 度相位的平坦波特图。

我不喜欢简单地发布链接,但关于浮点如何工作的提醒应该对您有所帮助。

https://en.wikipedia.org/wiki/Floating-point_arithmetic