在FIR滤波器的情况下,有可能设计线性相位滤波器,当应用于数据(使用过滤器
或conv
),简单地延迟输出固定数量的样本。然而,对于IIR滤波器,相位畸变通常是高度非线性的。的filtfilt
函数使用信号中在当前点之前和之后的点的信息,本质上是“展望未来”,以消除相位失真。
来看看filtfilt
回想一下,如果一个真实序列的z变换
是
,则为时间反转序列的z变换
是
.考虑以下处理方案:
当 ,这是 ,输出减少为 .已知序列的所有样本 的双重过滤版本 零相位失真是可能的。
例如,采样频率为100hz的1秒持续信号,由3hz和40hz的两个正弦分量组成
fs = 100;t = 0:1 / fs: 1;x =罪(2 *π* t * 3) + .25 *罪(2 *π* t * 40);
现在创建一个六阶巴特沃斯低通滤波器来过滤掉高频正弦信号。过滤器x
使用这两种过滤器
和filtfilt
比较:
[b] =黄油(6,20 / (fs / 2));y = filtfilt (b, a, x);yy =过滤器(b, a, x);情节(t t, x,, y, t, yy)传说(“原始”,“filtfilt”,“过滤”)
两种滤波版本都消除了原始信号中明显的40赫兹正弦信号。情节也显示了如何过滤器
和filtfilt
是不同的。的filtfilt
直线与原始的3hz正弦信号相位,而过滤器
线是延迟。的过滤器
行显示早期瞬态。filtfilt
通过仔细选择初始条件,并在输入序列上预先设置一个短的、反射的输入序列片段,来减少滤波器的启动瞬态。
为了获得最好的结果,确保你正在过滤的序列长度至少是过滤器顺序的三倍,并且在两条边上逐渐趋近于零。