您的位置:首页 > 编程语言 > MATLAB

多尺度小波分解与重构,matlab,对系数进行处理后,构造C,重构信号

2017-09-17 20:38 411 查看
自己要解决的问题是,用小波分解对时间序列进行多尺度分解,再分别对各系数进行预测,最后重构得到最后的预测结果。

因为对系数进行了新的处理,所以不能直接用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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: