有谁帮我看下我的这个MATLAB程序啊?

运行不成功,是一个信号,我要用小波多分辨率分析的Mallat算法给分解和重构。这是程序。急,哪位大虾帮我分析一下啊!snr=2;N=100;init=2055615986... 运行不成功,是一个信号,我要用小波多分辨率分析的Mallat算法给分解和重构。这是程序。急,哪位大虾帮我分析一下啊!
snr=2;N=100;
init=2055615986;
[sref,s]=wnoise(1,11,snr,init);
subplot(421),plot(s),title('原始信号');
subplot(422),stem(abs(fft(s))),title('原始信号频谱');
h=wfilters('db4','l');
g=wfilters('db4','h');
h=[h,zeros(1,N-length(h))];
g=[g,zeros(1,N-length(g))];
subplot(423),stem(abs(fft(h)));title('分解低通滤波器频谱');
subplot(424),stem(abs(fft(g)));title('分解高通滤波器频谱');
sig1=ifft(fft(s).*fft(h));
sig2=ifft(fft(s).*fft(g));
subplot(425),plot(real(sig1));title('低频分量')
subplot(426),plot(real(sig2));title('高频分量')
subplot(427),stem(abs(fft(sig1)));title('低频分量频谱')
subplot(428),stem(abs(fft(sig2)));title('高频分量频谱')
figure
sig1=dyaddown(sig1);sig2=dyaddown(sig2);
sig1=dyadup(sig1);sig2=dyadup(sig2);
sig1=sig1(1,[1:N]);sig2=sig2(1,[1:N]);
hr=h(end:-1:1);gr=g(end:-1:1);
hr=circshift(hr',1)';gr=circshift(gr',1)';
sig1=ifft(fft(hr).*fft(sig1));sig2=ifft(fft(gr).*fft(sig2));
sig=sig1+sig2;
subplot(221),plot(real(sig1));title('重构低频信号');
subplot(222),plot(real(sig2));title('重构高频信号');
subplot(223),stem(abs(fft(sig1)));title('重构低频信号频谱');
subplot(224),stem(abs(fft(sig2)));title('重构高频信号频谱');
figure(3)
plot(real(sig),'r','linewidth',2);
hold on;
plot(y);
legend('重构信号','原始信号');
title('重构信号与原始信号比较')
展开
 我来答
匿名用户
2009-03-11
展开全部
你的fft 没有定义长度..一般默认是原信号长度..
h 长度是100, 而你S的长度是2048..
当然不能相乘..把原句改成
sig1=ifft(fft(s,1024).*fft(h,1024));
才可以了.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式