初始化高通滤波器

信息处理 低通滤波器 巴特沃思
2022-02-08 14:34:25

我想从 ADC 中移除 DC,因此我设计了一个两极点、1 Hz 高通巴特沃斯滤波器,用于以 10kHz 采样的信号。滤波器系数为:

a =  [ 0.99955581 -1.99911162  0.99955581] (a0, a1, a2)
b =  [ 0.          1.99911142 -0.99911182] (don't use, b1, b2)

一旦过滤器开始工作(1 秒后),它就可以很好地工作,但在第一秒内它的反应很糟糕。我尝试用 0 和未来 1 秒的平均值初始化前两个 y。用白噪声测试滤波器,这里是一个初始瞬态的例子。白噪声的初始方差为 1,瞬态漂移到 370 才稳定下来! 在此处输入图像描述

问题:如果有的话,我能做些什么来平息这一切?

顺便说一句,我的单极滤波器不这样做!采样频率与截止频率之比较大的两极滤波器是否存在稳定性问题?

2个回答

请参阅相关问题:在没有“动量”的情况下初始化数字滤波器的输出是一项不平凡的任务吗?

简单的方法是在过滤之前从每个输入样本中减去第一个输入样本。这将消除一开始的阶跃,避免波形阶跃响应。这大致就是其他原始海报所说的他们所做的。或者因为您有噪声,您可以将前几个输入样本的平均值作为对 DC 偏置的更好估计,并在滤波之前从每个输入样本中减去该值。

如果您想保存减法的工作,那么在开始时更改过滤器的状态变量是可行的方法,我对链接问题的回答显示了如何做到这一点(使用x作为估计的直流偏置和y=0因为您有一个零直流响应的高通滤波器,但这可以验证)。不确定是否可以在不重写过滤器代码的情况下轻松触摸原型环境中的状态变量。

好的,我找到了解决方案。请记住,问题是关于初始化数字高通滤波器。记住它是递归的,所以有反馈。

解决方案:将前两个输出初始化为输入信号。

对于我发布的问题,我设置y_0 = y_1 = 0.0了过滤器,然后在解决之前做了很大的漂移。在阅读了您的回复并尝试了不同的事情后,我想,“也许问题是通过将前两个输出设置为零或前 N 个输入的平均值与我想要的相反y。将初始值归零是低-传递信号而不是高通信号。 ”然后我通过设置y_0 = x_0和初始化滤波器y1 = x1没有初始瞬态。

感谢您的反馈意见; 它让我思考。用 <code>y_0=x_0</code> 和 <code>y_1 = x_1</code> 初始化高通