零相移滤波器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

零相移滤波器原理

-----对matlab中filtfilt函数的初步研究

孙骁自74 2007012250

在信号与系统这门课程的学习过程中,我知道了设计数字滤波器有两种方法,分别为有限冲激响应法(FIR)和无限冲激响应法(IIR)。对于FIR滤波器,实现线性相位滤波是可行的,而对于IIR滤波器,则有着高度的相位失真。前几天,我在看有关于信号与系统matlab的实现方面的书籍时,偶然发现了一个叫做filtfilt的函数,它竟然可以实现对信号的零相移滤波,于是我不得不对它产生了兴趣。下图是对信号x=sin(6πt)+0.25sin(80πt)的两种滤波方式结果的比较,其中蓝色曲线为原函数,绿色曲线为利用filtfilt函数滤波结果,红色曲线为用filter 函数滤波结果。可以看到,相对于普通滤波而言,filtfilt函数滤波后实现了相对原信号的零相移。可以想见,假若我们能在实际中利用这种滤波原理进行零相移滤波,那将是十分诱人的。那么,这种滤波函数的原理是什么呢?它的实际可实施性又如何呢?另外,在图中我们可以看到,filtfilt滤波后的波形相对于其他滤波后的波形幅度上有所减小,这又是什么原因呢?带着这些问题,我对这个函数进行了初步的研究。

在matlab的帮助中,我们可以看到以下一段话:

这段话的意思是说,通过前向滤波之后,序列被反转并再次通过滤波器,最后输出的序列是对第二次通过滤波器的波形的再反转。这是一段有点绕的话,它实现的过程如下所示:

那为什么经过这样的一个过程之后可以实现零相移呢?现进行如下的推导: 假设系统函数为H(z),输入序列的z 变化为X(z),那么这个过程可以表示如下:

);()();()()();()();()()(3)1(4231)1(21ω

ωωωωωωωωωωωj N j j j j j j N j j j j j e Y e e Y e H e Y e

Y e Y e e

Y e H e X e

Y ------==== 从以上的推导可以看出,最终输入和输出可以表示为: 2

)()()(ωωωj j j e H e X e Y =

即实现了零相移滤波,注意到x 序列是和系统函数模的平方相乘,因此滤波器阶数加倍,并且因为平方相乘,所以与别的滤波方法相比,幅值会有所降低。 以上是根据matlab 所说的方法进行的推导,还可以想到,如果把这个操作的先后顺序改变,结果会怎么样呢?经过验证,如果先对序列进行反转,再对它滤波,之后再次反转,再滤波,这样操作之后的结果是完全一样的。过程如下:

221)1(211)1(1)()()();()()();()();()()();()(ω

ωωωωωωωωωωωωωωj j j j j j j N j j j j j j N j j e H e X e Y e H e Y e

Y e Y e e

Y e H e X e

Y e X e e

X =====------

经过以上的推导可以看出,对于零相移滤波器来说,它的系统函数就是2

)(ωj e H 。那么我们是否可以根据这个系统函数直接设计出这样的滤波器,而不必经过两次反转两次滤波的过程呢?我想这没什么不可以的。对应于

2)(ω

j e H 的离散系统的冲击响应的函数为);()()('n h n h n h -*=即零相移滤波器的冲击响应就是原滤波器冲击响应和反转后的冲击响应的卷积。我想,如果直接将这样两个系统级联,就可以得到零相移滤波的功能了,应该会简单一些。

以上是我对matlab 中零相移滤波函数filtfilt 的原理和主要特点进行的小小研究。那么,这么好的一个滤波器物理上究竟怎么实现呢?呵呵,答案当然是,不能实现的了。从上面的推导中,可以很容易看出这不是个因果系统,它的作用原理关键之处就在于在时间上进行反转,而现实中的我们既不能未卜先知,也不能回到过去,所以,filtfilt 只能是个美好的梦想了。不过,现实中不能实现不代表虚拟世界中不行,matlab 中就有这个函数嘛。所以,我们大可以去开动脑筋,设计各种美妙的滤波器,至少,它们还可以在软件中发挥重大作用。

相关文档
最新文档