在FIR滤波器的情况下,可以在应用于数据时设计线性相位过滤器(使用筛选
要么conv
),只需通过固定数量的样本延迟输出。然而,对于IIR滤波器,相位失真通常是高度非线性的。这filtfilt.
函数使用当前点之前和之后的信号中的信息中的信息,实质上“展望未来”,以消除相失真。
看看怎么样filtfilt.
这样做,如果是真正序列的z变换
是
,然后是时间反转序列的z变换
是
。考虑以下处理方案:
什么时候 , 那是 ,输出减少到 。给定序列的所有样本 ,一个双重过滤版的版本 具有零相位失真。
例如,在100Hz时采样的1秒持续时间信号,由3 Hz和40 Hz的两个正弦分量组成,是
FS = 100;t = 0:1 / FS:1;X = SIN(2 * PI * T * 3)+。25 * SIN(2 * PI * T * 40);
现在创建一个6阶Butterworth低通滤波器以滤除高频正弦曲线。筛选X
使用两者筛选
和filtfilt.
进行比较:
[B,A] =黄油(6,20 /(FS / 2));y = filtfilt(b,a,x);yy =过滤器(b,a,x);图(t,x,t,y,t,YY)传奇('原来的'那'filtfilt'那'筛选')
两个过滤版本都消除了原始信号中的40 Hz正弦曲线。这个曲线也展示了如何筛选
和filtfilt.
不同。这filtfilt.
线与原来的3 Hz正弦曲线相位,而且筛选
线被延迟。这筛选
线在早期显示瞬态。filtfilt.
通过仔细选择初始条件来减少过滤器启动瞬变,并通过预先输入输入序列,输入序列的简短反射序列。
为获得最佳效果,请确保您过滤的序列具有至少三倍的过滤器顺序,在两个边缘上逐渐变为零。