多尺度小波分解與重構,matlab,對係數進行處理後,構造C,重構訊號1
自己要解決的問題是,用小波分解對時間序列進行多尺度分解,再分別對各系數進行預測,最後重構得到最後的預測結果。
因為對係數進行了新的處理,所以不能直接用waverec函式重構原始訊號,而需要先構造C,再用waverec函式重構原始訊號。
所以這裡主要解決的問題是如何用新的係數構造C,進而用waverec函式重構原始訊號。
如果有哪個地方理解錯誤,還望指正
%%首先是不對係數進行另外處理的直接重構原始訊號
%小波分解與重構
gasload=importdata('load_new.xls');loaddata=gasload.data.Sheet2;
a=loaddata(:,4);
a=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));