小波包分解與構建目錄
1小波包分解、重構原理1.1小波變換
小波變換只對訊號的低頻部份做進一步分解,而對高頻部份也即訊號的細節部份不再繼續分解,所以小波變換才能挺好地表征一大類以低頻信息為主要成份的訊號,不能挺好地分解和表示包含大量細節信息(細小邊沿或紋理)的訊號,如非平穩機械震動訊號、遙感圖像、地震訊號和生物醫學訊號等。
1.2小波包變換
小波包變換既可以對低頻部份訊號進行分解,也可以對高頻部份進行分解力的正交分解法的基本過程,并且這些分解既無冗余,也無疏漏,所以對包含大量中、高頻信息的訊號才能進行更好的時頻局部化剖析。
2小波包使用到的函數及示例代碼
以上即是小波包樹,其中節點的命名規則是從(1,0)開始,叫1號力的正交分解法的基本過程,(1,1)是2號………依這種推,(3,0)是7號,(3,7)是14號。每位節點都有對應的小波包系數,這個系數決定了頻度的大小,也就是說頻度信息早已有了,而且頻域信息在那兒呢?那就是order。這個order就是這種節點的次序,也就是頻度的次序。
2.1小波包分解2.1.1T=wpdec(X,N,‘wname’)
T=wpdec(X,N,‘wname’)小波分解函數
T為小波包分解樹,X為待分解訊號,N分解層數,'wname’小波基選擇
% Load signal. 載入原始信號
load noisdopp;
x = noisdopp;
figure(1); subplot(211);
plot(x); title('Original signal');
% Decompose x at depth 3 with db1 wavelet packets
% using Shannon entropy.
wpt = wpdec(x,3,'db1');
plot(wpt) % 打印小波包分解樹
2.1.2X=(T,N)
X=(T,N)小波包分解系數函數
X為返回的小波包系數,T為小波包分解樹,N為小波樹節點
% Read packet (2,1) coefficients. 讀取小波包(2,1)節點系數
cfs = wpcoef(wpt,[2 1]);
figure(1); subplot(212);
plot(cfs); title('Packet (2,1) coefficients');
須要注意的是:小波包節點系數的寬度等于250,為原始訊號寬度1000/N=250。其中N為2^2,為第N層小波包樹的節點個數
2.2小波包構建2.2.1X=(T,N)
X=(T,N)小波包構建系數函數
X為構建后的小波包節點系數,T為小波包分解樹,N為小波分解節點數
% Reconstruct packet (2,1). 重構小波包節點系數(2,1)
rcfs = wprcoef(wpt,[2 1]);
figure(1); subplot(212);
plot(rcfs); title('Reconstructed packet (2,1)');
須要注意的是:小波構建系數的訊號寬度與原始訊號寬度一致
2.2.2[T,X]=(T,N)
[T,X]=(T,N)用于合并小波包樹的節點
返回T:為更改后的小波包樹T
返回X:合并后的節點系數
T:輸入的小波包數T
N:為合并的節點
% Recompose packet (1,1) 重寫小波包節點(1,1)
wpt = wpjoin(wpt,[1 1]);
% Plot wavelet packet tree wpt.
plot(wpt)
% 創建小波包樹
load noisdopp; x = noisdopp;
t = wpdec(x,3,'db3');
t = wpjoin(t,[4;5]); % 合并第4、5個小波樹節點
plot(t);
2.2.3T=write(T,‘cfs’,NODE,COEFS)
T=write(T,‘cfs’,NODE,COEFS)將
返回T:更改后的小波包樹
T:輸入的小波包樹
NODE:小波包節點序號
COEFS:小波包系數
% 將值寫入第4、5、6個小波包樹節點中
sNod = read(t,'sizes',[4,5,7]);
cfs4 = zeros(sNod(1,:));
cfs5 = zeros(sNod(2,:));
cfs7 = zeros(sNod(3,:));
t = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7);
% Plot tree t and click the node (0,0) (see the plot function).
% 打印原始節點(0,0),即小波包重構信號的節點
plot(t)
2.2.4X=wprec(T)
對于一位小波包分解構建
X=wprec(T)重組小波包
X:為小波包分解樹
T:構建后的訊號
wpt = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7);% 將值寫入第4、5、6個小波包樹節點中
xrec = wprec(wpt); % 重構后的信號
2.2.5原始訊號小波包分解后的構建方式可由小波包分解后,借助(T,N)函數,對最后一層的小波包進行系數構建,得到與原始數據寬度一樣的構建小波包系數,之后將小波包系數相乘,可以得到原始訊號可以使用write(T,‘cfs’,NODE,COEFS)函數,將小波包系數加入小波包分解樹,之后借助wprec(T)函數進行原始訊號構建,即可得到原始訊號2.3小波包去噪2.3.1[THR,SORH,,CRIT]=(IN1,IN2,X)
[THR,SORH,,CRIT]=(IN1,IN2,X)
THR是閥值,SORH是閥值函數,近似系數,CRIT熵的選擇(僅用于小波包)
:選擇0或1可對近似系數進行閥值處理
IN1:‘den’表示去噪,‘cmp’表示壓縮.
IN2:'wv’用于小波,'wp’用于小波包
X:表示待去噪的訊號
下邊是小波去噪代碼:
[thr,sorh,keepapp] = ddencmp('den','wv',x);
[A,D] = dwt(x,'db1');
noiselev = median(abs(D))/0.6745;
thresh = sqrt(2*log(length(x)))*noiselev;
2.3.2[XC,CXC,LXC,PERF0,]=(‘gbl’,X,‘wname’,N,THR,SORH,)
[XC,CXC,LXC,PERF0,]=(‘gbl’or‘lvd’,X,‘wname’,N,THR,SORH,)
返回值XC:
返回值CXC:XC的小波包分解結構
返回值LXC:XC的小波包分解結構
返回值PERF0:恢復L^2的范數比率,是用百分制表明降噪所保留的能量成份
返回值:壓縮L^2的范數比率,是用百分制表明壓縮所保留的能量成份
‘gbl’:表示每層都采用同一個閥值進行處理
‘lvd’:對每層采用不同的閥值進行處理
X:輸入的訊號
‘wname’:小波基
N:小波分解的層數
THR:閥值向量的寬度
SORH:閥值函數,'s’軟閥值,'h’硬閥值
:0對低頻近似系數不進行閥值量化處理;1對低頻近似系數進行閥值量化處理
[thr,sorh,keepapp] = ddencmp('den','wv',x);
xd = wdencmp('gbl',x,'db3',2,thr,sorh,keepapp);
subplot(211)
plot(x); title('Original Signal');
subplot(212)
plot(xd); title('Denoised Signal');
參考文獻
1.自帶的help
2.