Matlab低通滤波器输出初始值/结束值

LWZ*_*LWZ 3 matlab filter lowpass-filter

我有一个带有不需要的振荡载波的信号,如蓝色曲线所示.我做了一个低通滤波器(5阶butterworth)并应用了filtfilt函数,低滤波输出是红色曲线.

[b,a] = butter(5,.7);
y = filtfilt(b,a,y);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 从x值500到末端的红色曲线正是我想要的,但是初始振荡仍然存在.看起来滤波器函数试图匹配滤波器输入和输出的初始/结束值,因此振荡保持不变.有没有办法不匹配初始值,所以我可以得到一个没有任何振荡的平滑输出?

更新:我认为我的问题不明确.我想要像黑色曲线(手绘)之类的东西:完全消除振荡,并且不匹配初始值.我怎样才能做到这一点?在此输入图像描述

Fab*_*amp 5

简短的回答是你所要求的是不可能的.

所有过滤器都需要一些时间来"预热" - 这被称为过滤器的"上升时间".之所以会发生这种情况,是因为n顺序滤波器执行最后一个n样本的加权平均值,并且当信号首次启动时,样本的积压不可用.

你实现的过滤器实际上有一个非常好的上升时间 - 只需要大约10个样本就可以开始正确地跟踪输入.

发生的振荡被称为"过冲" - 在设计滤波器时,需要在上升时间和过冲之间进行权衡,不能有快速上升时间和过冲.关于阻尼的维基百科文章可能是一个很好的资源.