在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”,“过滤”)
两种滤波版本都消除了原始信号中明显的40hz正弦信号。情节也展示了如何做到这一点过滤器
和filtfilt
是不同的。的filtfilt
线与原始的3hz正弦波相位一致,而过滤器
线是延迟。的过滤器
线表示早期的瞬变。filtfilt
通过仔细选择初始条件,并在输入序列上预先设置一个短的、反射的输入序列片段,可以减少滤波器启动瞬态。
为了获得最好的结果,确保你要过滤的序列长度至少是过滤顺序的三倍,并且在两边的锥形都为零。