马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我在对信号进行小波分解时没有问题,但是在小波重构时就不能重构,说我的矩阵大小不对,不知道为什么,下面是程序,前面一大段都是噪声信号,没有问题,就是最后面的重构出现了问题。请高手帮忙解答一下
%利用matlab里的随机信号函数产生原始信号,并且显示该信号
%从均值为0,方差为3的正态分布随机噪声
clc;clear;
echo on
fid=fopen('temp.hex','w');
random=3*randn(511,1);
for i=1:511
if random(i)>=7
noise(i)=3;
noise1(i)=96;
fprintf(fid,'%X',noise1(i));
elseif random(i)>=4.6&random(i)<7
noise(i)=2;
noise1(i)=64;
fprintf(fid,'%X',noise1(i));
elseif random(i)>=2.3&random(i)<4.6
noise(i)=1;
noise1(i)=32;
fprintf(fid,'%X',noise1(i));
elseif random(i)>=0&random(i)<2.3
noise(i)=0;
noise1(i)=0;
fprintf(fid,'%X',noise1(i));
elseif random(i)>=-2.3&random(i)<0
noise(i)=0;
noise1(i)=0;
fprintf(fid,'%X',noise1(i));
elseif random(i)<=-2.3&random(i)>-4.6
noise(i)=-1;
noise1(i)=224;
fprintf(fid,'%X',noise1(i));
elseif random(i)<=-4.6&random(i)>-7
noise(i)=-2;
noise1(i)=192;
fprintf(fid,'%X',noise1(i));
elseif random(i)<=-7
noise(i)=-3;
noise1(i)=160;
fprintf(fid,'%X',noise1(i));
end;
end;
fclose(fid);
figure(1);
subplot(411);plot(noise);title('原始图像');
%对信号利用DB2小波进行分析
%利用matlab中的小波分解函数对前面产生的原始信号进行分解
%利用DB2小波对原始信号进行二尺度分解
%使用小波分解函数dwt
[ca1,cd1]=dwt(noise,'db2');
subplot(423);plot(ca1);title('近似系数ca1');
subplot(424);plot(cd1);title('细节系数cd1');
%对尺度上的近似系数再次进行小波分析
[ca2,cd2]=dwt(ca1,'db2');
subplot(425);plot(ca2);title('近似系数ca2');
subplot(426);plot(cd2);title('细节系数cd2');
%再一次对尺度上的近似系数进行小波分析
[ca3,cd3]=dwt(ca2,'db3');
subplot(427);plot(ca3);title('近似系数ca3');
subplot(428);plot(cd3);title('细节系数cd3');
问题出在下面!!!!!!!!!!!!!!!
%由分解信号重构原始信号
%利用matlab中的小波重构函数对分解的小波信号进行重构
[Lo_R,Hi_R]=wfilters('db2','r');%小波滤波器,系数1是选择滤波器,系数2是滤波器类型,r是重构滤波器
%whos;
snoise=idwt(ca3,cd3,Lo_R,Hi_R);
[snoise]=shiftdim(cd2);
whos;
ssnoise=idwt(snoise,cd2,Lo_R,Hi_R);
sssnoise=idwt(ssnoise,cd1,Lo_R,Hi_R);
err=norm(noise-ssnoise);%计算重构信号于原始信号的误差
figure(2);
subplot(421);plot(ca3);title('近似系数ca3');
subplot(422);plot(cd3);title('细节系数cd3');
subplot(423);plot(ca2);title('近似系数ca2');
subplot(424);plot(cd2);title('细节系数cd2');
subplot(425);plot(ca1);title('近似系数ca1');
subplot(426);plot(cd1);title('细节系数cd1');
subplot(3,2,[5 6]);plot(noise);title('原始信号noise');
xlabel(['Error norm= ',numstr(err)]); |