?? wave.m
字號:
%一段小波分解的程序
load leleccum;%載入信號,leleccum為4320個元素
s=leleccum(1:3920);%設置變量
ls=length(s);
%對信號進行單步小波分解,采用db1小波進行單步分解,其中dwt函數是專門用來進行單步小波分解的
[ca1,cd1]=dwt(s,'db1');
%這樣就得到了信號在尺度為1時小波分解的近似部分ca1和細節部分cd1,這兩個都是系數,而不是信號
%從分解系數構件近似部分和細節部分。為了從系數ca1、cd1構件近似部分和細節部分a1,d1輸入
a1=upcoef('a',ca1,'db1',1,ls);
d1=upcoef('d',cd1,'db1',1,ls);
%顯示結果
subplot(1,4,1);plot(a1);title('近似部分a1')
subplot(1,4,2);plot(d1);title('細節部分a1')
subplot(1,4,3);plot(s);title('原始信號')
%逆小波變換重構信號,逆變換函數執行如下,其中idwt是專門用來進行單步小波重建的
a0=idwt(ca1,cd1,'db1',ls);
subplot(1,4,4);plot(a0);title('小波重構')
%
%上面對信號做的一次分解,還需對信號進行多尺度的小波分解,為了完成信號在尺度3下的db1小波分析,輸入
[c,L]=wavedec(s,3,'db1');
%其中wavedec是專門進行多尺度分解的函數,上述命令行中將尺度水平為3下的所有分解單元(即第三級近似和第一、二、三級細節)的系數都保存在了矢量c中
%,矢量l是分別對應每個系數單元的長度;
%提取近似部分和細節部分系數。為了從c中提取第三級近似部分系數,輸入
ca3=appcoef(c,L,'db3',3);
%為了從c中提取尺度為3,2,1的細節部分系數,輸入
cd3=detcoef(c,L,3);
cd2=detcoef(c,L,2);
cd1=detcoef(c,L,1);
%重建尺度3水平下的近似部分系數。為了從c中重建尺度為3時的近似部分系數,輸入
a3=wrcoef('a',c,L,'db1',3);%其中參數‘a’表示是近似(approximation)部分
%重建尺度為1,2,3時的細節系數
d1=wrcoef('d',c,L,'db1',1);
d2=wrcoef('d',c,L,'db1',2);
d3=wrcoef('d',c,L,'db1',3);%其中參數‘d’表示是細節(deail)部分
%顯示多尺度分解結果
subplot(2,2,1);plot(a3);title('approximation a3')
subplot(2,2,2);plot(d1);title('detail d1')
subplot(2,2,3);plot(d2);title('detail d2')
subplot(2,2,4);plot(d3);title('detail d3')
%由三級分解重構原信號,
a0=waverec(c,L,'db1');
%以上是進行了小波的多尺度分解和重構
%下面進行的是小波的閾值去噪
%為了比較原信號與小波分解的近似部分a3之間的差異,先繪制下圖
subplot(2,1,1);plot(s);title('original');axis off
subplot(2,1,2);plot(a3);title('level3 approximation');axis off
%為了去除噪聲,利用ddencmp函數獲取去噪的默認參數,利用wdencmp進行去噪操作
[thr,sorh,keepapp]=ddencmp('den','wv',s);
%其中thr為獲得的默認閾值,sorh返回值為s(軟閾值)或h(硬閾值),keerapp是是否保存近似系數,‘den’表示降噪操作,‘wv’表示小波變
%換,s為原信號
clean=wdencmp('gbl',c,L,'db1',3,thr,sorh,keepapp);
%此時獲得的信號clean為去噪后的信號
%顯示原始信號和去噪信號
subplot(2,1,1);plot(s);title('原始信號')
subplot(2,1,2);plot(clean);title('去噪信號')
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -