- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
有关多孔算法的思考(doc)
多孔算法的实践与思考?
小波的问题在那里?其中之一,平移不变性。先将源信号平移n位,再做小波变换,和先将源信号做小波变换,再平移n位,结果不同。这对于实时处理和一些场合是极为不便的。(gibbs效应于此也有关)。?
怎么办?多孔算法(atrous)可以解决此瓶颈。多孔算法,又称非抽取小波变换,即undecimated wavelet transform or nonsampled wavelet transform,简写(NSWT)。多孔算法是由M.Shen于1992年提出的一种利用Mallat算法结构计算小波变换的快速算法,因在低通滤波器h0(k)和高通滤波器h1(k)中插入适当数目的零点而得名。它适用于a=2j的二分树结构,与Mallat算法的实现结构相似。实现多孔算法,需要什么呢?回答MALLAT算法是基础。但单单MALLAT算法够吗?答案否定的。我们必须找到两种算法的不同点。
首先,为什么MALLAT不具有移不变特点而TROUS算法具有移不变特点。根源就在抽取插值上。看这个系统Y(N)=X(2N),它是不是移不变系统,显然不是。非抽取算法,是移不变的。而这个移不变所付出的代价,就是高频分量加低频分量长度再不是源信号的长度,而是源信号长度的2倍。?
其次,滤波器还是可以用,WFILTERS()。而且重构和分解滤波器的关系,还是逆序后再右移一位(圆周卷积+周期延托)。但所有的滤波器系数要乘以SQRT(2)/2。为什么,答案在PR条件上。(第八章M通道滤波器组中有PR条件)MALLET算法PR条件有两个,一个是抗混叠,另一个是完全重构。而多孔算法由于非插值抽取,只有完全重构,且等式的右边常数是“1”,而不是MALLET-PR条件的“2”。所以MALLET的PR条件要乘以“1/2”才和TROUS一致,而这个因子“1/2”正好被分配到两个滤波器上,所以是SQRT(2)/2。?
再次,在每一层的下一层,滤波器中间要插值0。为什么?从谱上看,这是小波最经典的物理意义。数字信号一个周期的频谱范围为[-PI?PI],MALLAT算法的低通滤波[-PI/2?PI/2],高通滤波[-PI?-PI/2]U[PI/2?PI],则滤波后低频分量频谱范围[-PI/2?PI/2]。这时注意“开始抽取,频谱展宽”,又回到源信号频谱[-PI?PI],然后再低通、高通滤波,周而复始。(小波包的问题顺便也说一下,实际上将高频抽取,频谱展宽后,发生了频谱颠倒现象,论坛里对此有精彩讨论,对此不再赘述。)而多孔呢?情况变了。低频分量始终是[-PI/2?PI/2],若低通滤波器仍是[-PI/2?PI/2],高通滤波器[-PI?-PI/2]?U?[PI/2?PI],岂不是有些可笑吗?于是“滤波器插值”极其精妙的登场。低通和高通滤波器频谱变窄,低通[-PI/4?PI/4],高通[-PI/2?-PI/4]U[PI/4?PI/2],这下物理概念对了。
采用多孔trous算法(undecimated wavelet transform)实现小波变换
clear;clc;
%%? 1.生成信号
f=50;?? %? 频率fs=800; %? 采样率T=128;? %? 信号长度n=1:T;y=sin(2*pi*f*n/fs)+2*exp(-f*n/(4*fs));? %? 信号% y=circshift(y.,3).;
%%? 2.正变换
l1=wfilters(db4,l)*sqrt(2)/2;???? %? 参考低通滤波器l1_zeros=[l1,zeros(1,T-length(l1))];? %? 低通滤波器1h1=wfilters(db4,h)*sqrt(2)/2;???? %? 参考高通滤波器h1_zeros=[h1,zeros(1,T-length(h1))];? %? 高通滤波器1
low1=ifft(fft(y).*fft(l1_zeros));???? %? 低频分量1high1=ifft(fft(y).*fft(h1_zeros));??? %? 高频分量1
l2=dyadup(l1);? %? 原滤波器插值l2_zeros=[l2,zeros(1,T-length(l2))];? %? 低通滤波器2h2=dyadup(h1);? %? 原滤波器插值h2_zeros=[h2,zeros(1,T-length(h2))];? %? 高通滤波器2
low2=ifft(fft(low1).*fft(l2_zeros));? %? 低频分量2high2=ifft(fft(low1).*fft(h2_zeros)); %? 高频分量2
%%? 3.反变换
lr2=circshift(l2_zeros(end:-1:1).,1).;? %?
文档评论(0)