一維離散小波MATLAB命令行的實現(xiàn)方法
小波、小波包、MATLAB 2009-07-19 16:16:44 閱讀245 評論 字號:大中小 訂閱
noisbloc信號是MATLAB自帶的含高頻噪聲的信號。
1.裝載信號
在MATLAB命令行中輸入
load noisbloc
s=noisbloc(1:1024);
ls=length(s);
plot(s);
2.完成信號的單尺度一維離散小波分解
采用db4基本小波分解信號
在命令窗口中輸入
[cA1,cD1]=dwt(s,'db4');
這就產(chǎn)生了低頻系數(shù)cA1和高頻系數(shù)cD1。
可以通過whos命令查看cA1和cD1的長度:
whos
Name Size Bytes Class
cA1 1x515 4120 double array
cD1 1x515 4120 double array
ls 1x1 8 double array
noisbloc 1x1024 8192 double array
s 1x1024 8192 double array
Grand total is 3079 elements using 24632 bytes
3.從系數(shù)中重構(gòu)低頻部分和高頻部分
從第二步產(chǎn)生的系數(shù)cA1和cD1構(gòu)造第一層的低頻和高頻(A1和D1)系數(shù);
A1=upcoef('a',cA1,'db4',1,ls);
D1=upcoef('a',cD1,'db4',1,ls);
或用下面兩個函數(shù):
A1=idwt(cA1,[],'db4',ls);
D1=idwt(cD1,[],'db4',ls);
4.顯示高頻和低頻部分
為了顯示第一層分解結(jié)果,輸入
subplot(211); plot(A1); title('低頻A1');
subplot(212); plot(D1); title('低頻D1');
5.由小波逆變換恢復信號
使用idwt函數(shù)很容易實現(xiàn),在命令窗口輸入
subplot(211); plot(s); title('原始信號');
subplot(212); plot(A0); title('重構(gòu)信號');
6.多層一維分解
為了完成一個5層的分解,輸入:
[C,L]=wavedec(s,5,'db4');
7.提取系數(shù)的低頻和高頻部分
為了從上面的C中提取第3層的低頻系數(shù),輸入:
cA3=appcoef(C,L,'db4',3);
8.重構(gòu)第3層的低頻系數(shù)
為了從上面的C中重構(gòu)第3層的低頻系數(shù),輸入:
A3=wrcoef('a',C,L,'db4',3);
9.重構(gòu)第1、2、3、4、5層的高頻信號
其方法是:
cA5=appcoef(C,L,'db4',5);
A5=wrcoef('a',C,L,'db4',5);
D1=wrcoef('d',C,L,'db4',1);
D2=wrcoef('d',C,L,'db4',2);
D3=wrcoef('d',C,L,'db4',3);
D4=wrcoef('d',C,L,'db4',4);
D5=wrcoef('d',C,L,'db4',5);
下面顯示多尺度一維分解的結(jié)果:
subplot(322); plot(D1); title('低頻D1');
subplot(323); plot(D2); title('低頻D2');
subplot(323); plot(D3); title('低頻D3');
subplot(325); plot(A5); title('低頻D4');
subplot(326); plot(A5); title('低頻D5');
10.重構(gòu)原始信號并顯示
A0=waverec(C,L,'db4');
subplot(311); plot(s); title('原始信號');
subplot(312); plot(A0); title('重構(gòu)信號');
subplot(313); plot(s-A0); title('誤差信號');
用M文件一次運行可得結(jié)果
clc
clear all
load noisbloc
s=noisbloc(1:1024);
ls=length(s);
figure
plot(s);
[cA1,cD1]=dwt(s,'db4');
whos
A1=upcoef('a',cA1,'db4',1,ls);
D1=upcoef('a',cD1,'db4',1,ls);
A1=idwt(cA1,[],'db4',ls);
D1=idwt(cD1,[],'db4',ls);
figure
subplot(211); plot(A1); title('低頻A1');
subplot(212); plot(D1); title('低頻D1');
[C,L]=wavedec(s,5,'db4');
cA3=appcoef(C,L,'db4',3);
A3=wrcoef('a',C,L,'db4',3);
cA5=appcoef(C,L,'db4',5);
A5=wrcoef('a',C,L,'db4',5);
D1=wrcoef('d',C,L,'db4',1);
D2=wrcoef('d',C,L,'db4',2);
D3=wrcoef('d',C,L,'db4',3);
D4=wrcoef('d',C,L,'db4',4);
D5=wrcoef('d',C,L,'db4',5);
figure
subplot(321); plot(A5); title('低頻A5');
subplot(322); plot(D1); title('低頻D1');
subplot(323); plot(D2); title('低頻D2');
subplot(324); plot(D3); title('低頻D3');
subplot(325); plot(A5); title('低頻D4');
subplot(326); plot(A5); title('低頻D5');
A0=waverec(C,L,'db4');
figure
subplot(311); plot(s); title('原始信號');
subplot(312); plot(A0); title('重構(gòu)信號');
subplot(313); plot(s-A0); title('誤差信號');