自己要解决的问题是,用小波分解对时间序列进行多尺度分解,再分别对各系数进行预测,最后重构得到最后的预测结果。
因为对系数进行了新的处理,所以不能直接用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));