1. 程式人生 > >多尺度小波分解與重構,matlab,對係數進行處理後,構造C,重構訊號1

多尺度小波分解與重構,matlab,對係數進行處理後,構造C,重構訊號1

自己要解決的問題是,用小波分解對時間序列進行多尺度分解,再分別對各系數進行預測,最後重構得到最後的預測結果。

因為對係數進行了新的處理,所以不能直接用waverec函式重構原始訊號,而需要先構造C,再用waverec函式重構原始訊號。

所以這裡主要解決的問題是如何用新的係數構造C,進而用waverec函式重構原始訊號。

如果有哪個地方理解錯誤,還望指正


%%首先是不對係數進行另外處理的直接重構原始訊號

%小波分解與重構

gasload=importdata('load_new.xls');
loaddata=gasload.data.Sheet2; 

a=loaddata(:,4);

a=a';

ls=length(a);
%多尺度一維分解

[C,L]=wavedec(a,3,'db1');

%提取係數

cA3=appcoef(C,L,'db1',3);
cD3=detcoef(C,L,3);
cD2=detcoef(C,L,2);

cD1=detcoef(C,L,1);

%重構係數
A3=wrcoef('a',C,L,'db1',3);
D1=wrcoef('d',C,L,'db1',1);
D2=wrcoef('d',C,L,'db1',2);
D3=wrcoef('d',C,L,'db1',3);

%重構原始訊號
A0=waverec(C,L,'db1');
%重構最大誤差

Err=max(abs(a-A0));

------------------------------------------以上是直接重構原始訊號--------------------------

------------------------------------------以下是對係數進行處理後,構造C,再用waverec函式重構原始訊號--------------------------

%%%省略對係數的處理過程

%%%。。。。。。。

%%%用新的係數構造C

這裡之所以構造C,是因為waverec函式的引數C裡存放的是原始的係數,而不是經過處理的新的係數;所以需要得到由新的係數構造的C。

現在需要了解C的構造方式,以便以正確的結構用新的引數構造C。在matlab裡用help函式檢視wavedec函式,可以看到關於C的結構介紹。從而反向來構造C。

help wavedec



已在matlab裡通過size函式計算得到,

size (a)  為1*1000; size(C)為 1*1000;  size(L)為1*5;L=[125,125,250,500,1000];

size(cA3)為1*125;size(cD3)為1*125;size(cD2)為1*250;size(cD1)為1*500;


則依據help的結果,C的組成結構為【cA3,cD3,cD2,cD1】;

L1為近似係數cA3的長度(125),L2為細節係數cD3的長度(125);L3為cD2的長度(250),L4為cD1的長度(500),L5為a的長度(1000)。


則用處理過的係數重構C就變得很簡單;

C=[cA3,cD3,cD2,cD1]

再用waverec函式重構原始訊號


A0=waverec(C,L,'db1');
%重構最大誤差

Err=max(abs(a-A0));