[軟件]MATLAB小波包的分解與重構


該文章用來直觀上先感受一下小波包的分解與重構
 
例1
有一個信號,變量名為wave,隨便找一個信號load進來就行了。
t=wpdec(wave,3,'dmey');
t2 = wpjoin(t,[3;4;5;6]);
sNod = read(t,'sizes',[3,4,5,6]);
cfs3  = zeros(sNod(1,:));
cfs4  = zeros(sNod(2,:));
cfs5  = zeros(sNod(3,:));
cfs6  = zeros(sNod(4,:));
t3 = write(t2,'cfs',3,cfs3,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',6,cfs6);
wave2=wprec(t3);
解釋:
第一行:將wave 用 meyr小波進行3層小波包分解,獲得一個小波包樹 t
第二行:將小波包樹的第二行的四個節點收起來,也就是讓第二行的節點變為樹的最底層節點。因為第一行中小波包樹的節點個數是 第一層2個,第二層4個,第三層8個。現在將t2就是將第三層的節點再聚合回第二層。
第三行:讀取第二層四個節點系數的size
第四~七行:將所有四個節點的小波包系數變為0
第八行:將四個節點的系數重組到t3小波樹中。
第九行:對t3小波樹進行重構,獲得信號wave2
 
可以預見,因為我們把小波樹的節點系數都變為0了,所以信號也就全為0了。所以wave2是一個0向量。讀者可以自行plot一下wave和wave2看看。進一步,如果我們只聚合第二層中的某幾個節點,比如 4和5,即將第三行到第八行中 節點 3 和節點 6的語句刪除或修改,那么意思就是將 4 5 節點的系數變為0,那么wave2肯定就不是0向量了。
 
 
例2
t=wpdec(wave,3,'dmey');
t2 = wpjoin(t,[3;4;5;6]);
cfs3=wpcoef(t,3);
cfs4=wpcoef(t,4);
cfs5=wpcoef(t,5);
cfs6=wpcoef(t,6);
t3 = write(t2,'cfs',3,cfs3,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',6,cfs6);
wave2=wprec(t3);
解釋:
第一行:將wave 用 meyr小波進行3層小波包分解,獲得一個小波包樹 t
第二行:將小波包樹的第二行的四個節點收起來,也就是讓第二行的節點變為樹的最底層節點。
第三~六行:獲取四個節點的小波包系數 (小波包系數就是一個一維向量)
第七行:將四個節點的系數重組到t3小波樹中
第八行:對t3小波樹進行重構,獲得信號wave2
 
可以看出,該例子就是對一個小波包展開了,又原封不動的裝回去了,所以說 wave2和wave是一樣的。
 
注意,wpjoin命令在這里是必要的,因為write函數只能將最底層的節點寫進去。也就是說,如果我們將第三層的小波包系數進行修改的話,就不用wpjoin了,具體可以看例3
 
例3
t=wpdec(wave,3,'dmey');
cfs7=wpcoef(t,7);
cfs8=wpcoef(t,8);
cfs9=wpcoef(t,9);
cfs10=wpcoef(t,10);
cfs11=wpcoef(t,11);
cfs12=wpcoef(t,12);
cfs13=wpcoef(t,13);
cfs14=wpcoef(t,14);
t3=write(t,'cfs',7,cfs7,'cfs',8,cfs8,'cfs',9,cfs9,'cfs',10,cfs10,'cfs',11,cfs11,'cfs',...
12,cfs12,'cfs',13,cfs13,'cfs',14,cfs14);
y=wprec(t3);
 
該例子也是對一個小波包展開了,又原封不動的裝回去了,只不過這次是直接對第三層節點進行的。
 
這就是小波包的分解與重構的感受,希望對想學習小波的讀者一點點啟發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM