主要内容

反因果,零相位滤波实现

在FIR滤波器的情况下,有可能设计线性相位滤波器,当应用于数据(使用过滤器conv),简单地延迟输出固定数量的样本。然而,对于IIR滤波器,相位畸变通常是高度非线性的。的filtfilt函数使用信号中在当前点之前和之后的点的信息,本质上是“展望未来”,以消除相位失真。

来看看filtfilt回想一下,如果一个真实序列的z变换 x n X z ,则为时间反转序列的z变换 x - n X z - 1 .考虑以下处理方案:

| z | 1 ,这是 z e j ω ,输出减少为 X e j ω | H e j ω | 2 .已知序列的所有样本 x n 的双重过滤版本 x 零相位失真是可能的。

例如,采样频率为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”“过滤”

图包含一个坐标轴对象。轴线对象包含3个线型对象。这些对象代表Original, filtfilt, filter。

两种滤波版本都消除了原始信号中明显的40赫兹正弦信号。情节也显示了如何过滤器filtfilt是不同的。的filtfilt直线与原始的3hz正弦信号相位,而过滤器线是延迟。的过滤器行显示早期瞬态。filtfilt通过仔细选择初始条件,并在输入序列上预先设置一个短的、反射的输入序列片段,来减少滤波器的启动瞬态。

为了获得最好的结果,确保你正在过滤的序列长度至少是过滤器顺序的三倍,并且在两条边上逐渐趋近于零。

另请参阅

||