MATLAB filtfilt
进行向前-向后过滤,即过滤,反转信号,再次过滤然后再次反转。显然这样做是为了减少相位滞后?使用这种过滤的优缺点是什么(我想这会导致过滤顺序的有效增加)。
使用filtfilt
始终代替filter
(即,仅前向过滤)会更好吗?是否有任何应用程序需要使用它,而不应该使用它?
MATLAB filtfilt
进行向前-向后过滤,即过滤,反转信号,再次过滤然后再次反转。显然这样做是为了减少相位滞后?使用这种过滤的优缺点是什么(我想这会导致过滤顺序的有效增加)。
使用filtfilt
始终代替filter
(即,仅前向过滤)会更好吗?是否有任何应用程序需要使用它,而不应该使用它?
Answers:
您最好在频域中查看它。如果是输入序列,是滤波器的脉冲响应,则第一次滤波器通过的结果为h [ n ]
用和对和进行傅立叶变换。时间反转对应于替换的在频域,让时间逆转后,我们得到ħ (Ë Ĵ ω)X [ Ñ ] ħ [ Ñ ] ω - ω
第二遍过滤器对应于另一个与H(e ^ {j \ omega})的乘法:
经过时间反转后最终给出了输出信号的频谱
因为对于实值滤波器系数,我们有。公式(1)显示,输出频谱是通过使用频率响应为的滤波器进行滤波而获得的,该滤波器是纯实数值,即其相位为零,因此存在没有相位失真。
这是理论。在实时处理中,当然会有很大的延迟,因为只有当您允许与输入块的长度相对应的延迟时,时间反转才起作用。但是,这不会改变没有相位失真的事实,只是输出数据的额外延迟。对于FIR过滤,此方法并不是特别有用,因为您还可以定义一个新的过滤器并获得与普通过滤相同的结果。将此方法与IIR滤波器一起使用会更有趣,因为它们不能具有零相位(或线性相位,即纯延迟)。
总共:
如果您有或需要IIR滤波器,并且想要零相位失真,并且处理延迟没有问题,那么此方法很有用
如果处理延迟是一个问题,则不应使用它
如果您有FIR滤波器,则可以轻松计算出一个新的FIR滤波器响应,等效于使用此方法。注意,使用FIR滤波器,始终可以实现完全线性的相位。
maximum-aposteriori-estimation
。您能否将其重命名为maximum-a-posteriori-estimation
?我误会了-
之后的事情a
。谢谢。
我发现这段视频非常非常有用(详细介绍了Matt的回答)。
这是视频中的一些关键思想:
x[n]
滤波,过滤,反转结果,再次过滤并再次反转(时间反转步骤要求所有数据都可用)。