声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1360|回复: 0

[小波] 小波分解A'Trous算法Matlab代码示例

[复制链接]
发表于 2016-3-21 15:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  采用多孔trous算法(undecimated wavelet transform)实现小波变换

  1.   clear;clc;

  2.   %% 1.生成信号

  3.   f=50; % 频率

  4.   fs=800; % 采样率

  5.   T=128; % 信号长度

  6.   n=1:T;

  7.   %y=yuanshishuju

  8.   y=sin(2*pi*f*n/fs)+2*exp(-f*n/(4*fs)); % 信号

  9.   % y=circshift(y.',3).';

  10.   %% 2.正变换

  11.   l1=wfilters('db4','l')*sqrt(2)/2; % 参考低通滤波器

  12.   l1_zeros=[l1,zeros(1,T-length(l1))]; % 低通滤波器1

  13.   h1=wfilters('db4','h')*sqrt(2)/2; % 参考高通滤波器

  14.   h1_zeros=[h1,zeros(1,T-length(h1))]; % 高通滤波器1

  15.   low1=ifft(fft(y).*fft(l1_zeros)); % 低频分量1

  16.   high1=ifft(fft(y).*fft(h1_zeros)); % 高频分量1

  17.   l2=dyadup(l1); % 原滤波器插值

  18.   l2_zeros=[l2,zeros(1,T-length(l2))]; % 低通滤波器2

  19.   h2=dyadup(h1); % 原滤波器插值

  20.   h2_zeros=[h2,zeros(1,T-length(h2))]; % 高通滤波器2

  21.   low2=ifft(fft(low1).*fft(l2_zeros)); % 低频分量2

  22.   high2=ifft(fft(low1).*fft(h2_zeros)); % 高频分量2

  23.   %% 3.反变换

  24.   lr2=circshift(l2_zeros(end:-1:1).',1).'; % 重构低通滤波器2

  25.   hr2=circshift(h2_zeros(end:-1:1).',1).'; % 重构高通滤波器2

  26.   lr1=circshift(l1_zeros(end:-1:1).',1).'; % 重构低通滤波器1

  27.   hr1=circshift(h1_zeros(end:-1:1).',1).'; % 重构高通滤波器1

  28.   lowr=(ifft(fft(low2).*fft(lr2))+ifft(fft(high2).*fft(hr2))); % 重构低频分量1(lowr=low1)

  29.   r_s=(ifft(fft(lowr).*fft(lr1))+ifft(fft(high1).*fft(hr1))); % 重构源信号(r_s=y)

  30.   %% 4.绘图

  31.   figure(1);

  32.   plot(y);

  33.   title('源信号');

  34.   figure(2);

  35.   plot(low1,'r');

  36.   hold on;

  37.   plot(low2,'b');

  38.   legend('第一层低频','第二层低频');

  39.   figure(3);

  40.   plot(high1,'r');

  41.   hold on;

  42.   plot(high2,'b');

  43.   legend('第一层高频','第二层高频');

  44.   figure(4);

  45.   plot(low1,'r');

  46.   hold on;

  47.   plot(lowr,'b.');

  48.   legend('第一层低频','重构第一层低频');

  49.   figure(5);

  50.   plot(y,'r');

  51.   hold on;

  52.   plot(r_s,'b.');

  53.   legend('源信号','重构信号');

  54.   disp(norm(low1-lowr))

  55.   disp(norm(y-r_s))
复制代码




转自:http://blog.sina.com.cn/s/blog_4d7c97a00101a0dd.html
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-24 23:04 , Processed in 0.070835 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表