声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1749|回复: 0

[小波] 使用小波变换重构某个节点的信号

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

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

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

x
  1. 使用小波分解、重构
  1)wrcoef 由多层小波分解重构某一层的分解信号;
  2)waverec 直接重构原始信号
  注意:如果原始信号的长度为N,则使用wrcoef得到的信号,不论是近似信号信息还是细节信息,其长度都为N。
  主要代码如下:
  fg2=figure('numbertitle','on','name','使用wavedec信号分解');
  [d,a]=wavedec(y,3,'db5');
  subplot(211);plot(d);ylabel('信号分解');
  subplot(212);plot(a);ylabel('各段信号长度');

62.jpg
  fg3=figure('numbertitle','on','name','使用wrcoef获取每层信号');
  a3=wrcoef('a',d,a,'db5',3);
  d3=wrcoef('d',d,a,'db5',3);
  d2=wrcoef('d',d,a,'db5',2);
  d1=wrcoef('d',d,a,'db5',1);
  subplot(411);plot(a3);ylabel('a1');
  subplot(412);plot(d3);ylabel('d3');
  subplot(413);plot(d2);ylabel('d2');
  subplot(414);plot(d1);ylabel('d1');
  fg4=figure('numbertitle','on','name','使用waverec的效果图');
  subplot(211);
  plot(y);ylabel('原始信号');
  subplot(212);
  sx=waverec(d,a,'db5');

  plot(sx);ylabel('恢复的信号');
63.jpg
  fg5=figure('numbertitle','on','name','使用Hilbert的效果图');
  ys=hilbert(d3);
  ydata=abs(ys);
  Fs=1000;
  NFFT=1024;
  p=abs(fft(ydata,NFFT));
  plot((0:NFFT/2-1)/NFFT*Fs,p(1:NFFT/2));
  xlabel('频率 f/Hz');

  ylabel('功率谱 P/W');
64.jpg
  2. 使用小波包分解、重构
  参见另外我的一篇博客《使用小波包获得某个节点信号的几个细节问题》。
  3. 几种重构获取节点处信号的不同之外

  3.1 关于小波分解时,层数、近似信号、细节信号的对应关系
65.jpg
  wrcoef
  Reconstruct single branch from 1-D wavelet coefficients
  Syntax
  X = wrcoef('type',C,L,'wname',N)
  Description
  wrcoef reconstructs the coefficients of a one-dimensional signal, given a wavelet decomposition structure (C and L) and either a specified wavelet ('wname', see wfilters for more information) or specified reconstruction filters (Lo_R and Hi_R).
  Argument 'type' determines whether approximation ('type' = 'a') or detail ('type' = 'd') coefficients are reconstructed. When 'type' = 'a', N is allowed to be 0; otherwise, a strictly positive number N is required. Level N must be an integer such that N ≤length(L)-2.
  解释:
  如果分解三层,则
  信号:C=CA3+CD3+CD2+CD1,
  长度标示:L=[size(CA3),size(CD3),size(CD2),size(CD1),size(C)]
  如果要求解节点CA3,则使用a3=wrcoef('a',d,a,'db5',3);
  如果要求解节点CD3,则使用d3=wrcoef('d',d,a,'db5',3);
  如果要求解节点CD2,则使用d2=wrcoef('d',d,a,'db5',2);
  如果要求解节点CD1,则使用d1=wrcoef('d',d,a,'db5',1);

  最后一个参数是根据在L中的索引顺序决定的,且最大值为length(L)-2,在此应用中最大值是3。
66.jpg

  %-------------------------------------------------
  a3=wrcoef('a',d,a,'db5',3); % 得到CA3,等同于a3=wrcoef('a',d,a,'db5');
  d1=wrcoef('d',d,a,'db5',1); % 得到CD1
  d2=wrcoef('d',d,a,'db5',2); % 得到CD2
  d3=wrcoef('d',d,a,'db5',3); % 得到CD3,等同于d3=wrcoef('d',d,a,'db5');
  %-------------------------------------------------
  wpt = wpdec(y,3,'db5');
  cfs_a3= wprcoef(wpt,[3 0]); % 得到CA3
  cfs_d1= wprcoef(wpt,[1 1]); % 得到CD1
  cfs_d2= wprcoef(wpt,[2 1]); % 得到CD2
  cfs_d3= wprcoef(wpt,[3 1]); % 得到CD3 由此可知,小波分解与小波包分解,其分解思路是一致的。只是小波分解只用了左半部分,小波包分解用了整个二叉树。
  3.2 关于小波包分解时,层数、近似信号、细节信号的对应关系
  参见另外一篇博文:《使用小波包获得某个节点信号的几个细节问题》。
  3.3 信号长度
  以原始信号的长度是1024,分解层数是3作为例子。
  1)使用wrcoef,其格式为:X = wrcoef('type',C,L,'wname',N) ,使用此函数可得到任意节点处的信号,即除了节点CA3,CD3,CD2,CD1之外,还可以获取节点CA1,CA2处的信号。小波分解后使用的wrcoef函数,其特殊之处在于从每个节点处得到的信号长度均与原始信号长度一致,如3.1节的图所示。
  2)使用wpcoef,其格式为:X = wpcoef(T,N),例如:
  wpt = wpdec(x,3,'db1'); % Plot wavelet packet tree wpt.
  plot(wpt);

  cfs = wpcoef(wpt,[3 0]);
67.jpg
  原始信号长度为1024,经过3层分解后,原始信号的近似信号长度为128。
68.jpg
  3)使用wprcoef,其格式为:X=wprcoef(T,N),例如:
  t = wpdec(x,3,'db1','shannon'); % Plot wavelet packet tree.
  plot(t);
  rcfs = wprcoef(t,[3 0]);
  figure(2);
  subplot(211);
  plot(x); title('Original signal');
  subplot(212);

  plot(rcfs); title('Reconstructed packet 3,0)');
69.jpg
  原始信号长度为1024,使用该函数得到某个节点处的信号,其长度与原始信号长度一致。如果对该信号采取降采样,降采样系数为8,则可得到的信号的长度与wpcoef函数得到的信号的长度一致。


转自:http://blog.163.com/lxfan_0406%4 ... 992620125713240582/

回复
分享到:

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 17:13 , Processed in 0.066043 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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