一維離散小波MATLAB命令行的實現(xiàn)方法小波、小波包、MATLAB 2009-07-19 16:16:44 閱讀245 評論5 字號:大中小 訂閱 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.由小波逆變換恢復(fù)信號 使用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('誤差信號'); |
|