[转帖]多孔算法的实践与思考
小波的问题在那里?其中之一,平移不变性。说白了,先将源信号平移n位,再做小波变换,和先将源信号做小波变换,再平移n位,结果不同。这对于实时处理和一些场合是极为不便的。(gibbs效应于此也有关)。<br> 怎么办?多孔算法(a trous)可以解决此瓶颈。多孔算法,又称非抽取小波变换,即undecimated wavelet transform or nonsampled wavelet transform,简写(NSWT)。(有可能二进小波变换也是一个意思)。<br> 实现多孔算法,需要什么呢?回答MALLAT算法是基础。若你不懂MALLAT,请去学习,或看我置顶的贴子。我可以告诉大家,我写TROUS代码从看论文到完成只用了10分钟。<br> 但单单MALLAT算法够吗?答案否定的。我们必须找到两种算法的不同点。方可得心应手。这里我浅谈一二。<br> 首先,为什么MALLAT不具有移不变特点而TROUS具有移不变特点。根源就在抽取插值上。看这个系统Y(N)=X(2N),它是不是移不变系统,显然不是。现在大家明白了吧。所以非抽取算法,是移不变的。而这个移不变所付出的代价,就是高频分量加低频分量长度再不是源信号的长度,而是源信号长度的2倍。<br> 其次,滤波器还是可以用,WFILTERS()。而且重构和分解滤波器的关系,还是逆序后再右移一位(圆周卷积+周期延托)。但所有的滤波器系数要乘以SQRT(2)/2。为什么,答案在PR条件上。MALLET算法PR条件有两个,一个是抗混叠,另一个是完全重构。而多孔算法由于非插值抽取,只有完全重构,且等式的右边常数是“1”,而不是MALLET-PR条件的“2”。所以MALLET的PR条件要乘以“1/2”才和TROUS一致,而这个因子“1/2”正好被分配到两个滤波器上,所以是SQRT(2)/2。<br> 再次,在每一层的下一层,滤波器中间要插值0。为什么?从谱上看,这是小波最经典的物理意义。数字信号一个周期的频谱范围为[-PI PI],MALLAT算法的低通滤波[-PI/2 PI/2],高通滤波[-PI -PI/2] U ,则滤波后低频分量频谱范围[-PI/2 PI/2]。这时注意“开始抽取,频谱展宽”,又回到源信号频谱[-PI PI],然后再低通、高通滤波,周而复始。(小波包的问题顺便也说一下,实际上将高频抽取,频谱展宽后,发生了频谱颠倒现象,论坛里对此有精彩讨论,对此不再赘述。)而多孔呢?情况变了。低频分量始终是[-PI/2 PI/2],若低通滤波器仍是[-PI/2 PI/2],高通滤波器[-PI -PI/2] U ,岂不是有些可笑吗?于是“滤波器插值”极其精妙的登场。低通和高通滤波器频谱变窄,低通[-PI/4 PI/4],高通[-PI/2 -PI/4] U ,这下物理概念对了。那多孔有没有小波包呢,留给大家探讨。[此贴子已经被作者于2006-5-23 14:52:11编辑过]
{:{39}:}
页:
[1]