kppww 发表于 2016-5-12 14:15

修整FIR尺度滤波器的幅相加长迭代重组方法

  《用幅相重组Symlets尺度滤波器获得更好重建精度》(2016-04-29)表明,直接利用不加长的FFT简单地把幅度谱标准化,这很好地改善了Symlets系列的尺度滤波器,但是,对于Daubechies系列,这是无益的(除非特殊的被处理信号长度值)。所以,后一系列FIR的相位谱数据中,有不宜忽略的影响离散变换精度的成分。

  本短文假定,当滤波器序列的幅度谱已知而且足够精确时,如果相位谱也足够地相配的话,那么在理想的FIR长度区间之外,序列值应该小得可以忽略不计,故可能用迭代的方法,对FIR做“加长幅相重组”式的适度修整。

  设x是用Matlab小波工具箱的函数symaux和dbaux得到的长度为Lm0的FIR序列,Lr0是FFT时的加长(Matlab默认末端补零,padded with trailing zeros)整数倍的因子,I0是允许的最大迭代次数。

  把x做Lm0乘以Lr0点-FFT,变换到频域,留用其相位谱序列,而把其幅度谱以同阶Daubechies尺度滤波器的频域表达式得到的理想型幅谱序列强行替换掉,然后,把合成谱序列用IFFT变换到时域,记其结果为序列y。

  取y的最开始Lm0个时间点上数据的实部,作为新的尺度滤波器序列x,如果还必要的话,则再返回上一步,即做幅度谱和相位谱重组的迭代处理。
  迭代终止条件为:新x的范数明显荒谬(即,方法失败),或残余误差小于10倍机器精度值),或达到了限定的迭代次数。

  所谓残余误差指,序列y减去新x序列后,其余下部分的范数。迭代过程中,记录下,最小残余误差及其相应的新尺度滤波器序列。在迭代和输出前,将滤波器序列的范数重新归一化。

  图片1.右半部的AprcOptimFIR.m,是用上述方法修整sym1至sym35以及db3至db42的所有FIR序列的完整程序。其中的子函数AprcIterFFT的代码, 实现上述迭代处理。

  程序退出时,画出四条误差曲线。它们依次分别为:修整前的FIR序列的偶数平移系的规范正交性误差(从自相关序列测),修整后输出的FIR序列的偶数平移系的规范正交性误差,迭代输出的残余误差,新旧尺度滤波器之间的差序列的范数。

  图片1.的左半部的曲线图表明(允许的最大迭代次数为68,FFT的加长因子为4),修整后的尺度滤波器的质量,有了极显著的提高。规范正交性的误差,减小的程度,平均约到6个数量级。修整时的残余误差很小。保护好了原序列的基本。迭代和增加FFT的点数,对于Symlets系列的改善,是不必要的。


  图片1. 修整FIR尺度滤波器的幅相加长迭代重组的程序和测验结果




转自:http://blog.sina.com.cn/s/blog_729a92140102wbfb.html

页: [1]
查看完整版本: 修整FIR尺度滤波器的幅相加长迭代重组方法