小波包分解与重构目录
1 小波包分解、重构原理
1.1 小波变换
1.2 小波包变换
2 小波包使用到的函数及示例代码

以上即是小波包树,其中节点的命名规则是从(1,0)开始,叫1号, (1,1)是2号………依此类推,(3,0)是7号,(3,7)是14号。 每个节点都有对应的小波包系数,这个系数决定了频率的大小,也就是说频率信息已经有了,但是时域信息在哪里呢? 那就是 order。 这个order就是这些节点的顺序,也就是频率的顺序。
2.1 小波包分解
2.1.1 T = wpdec(X,N,‘wname’)
% Load signal. 载入原始信号 load noisdopp; x = noisdopp; figure(1); subplot(211); plot(x); title('Original signal'); % Decompose x at depth 3 with db1 wavelet packets % using Shannon entropy. wpt = wpdec(x,3,'db1'); plot(wpt) % 打印小波包分解树


2.1.2 X = wpcoef(T,N)
% Read packet (2,1) coefficients. 读取小波包(2,1)节点系数 cfs = wpcoef(wpt,[2 1]); figure(1); subplot(212); plot(cfs); title('Packet (2,1) coefficients');

需要注意的是:小波包节点系数的长度等于250,为原始信号长度1000/N = 250。其中N为2^2,为第N层小波包树的节点个数
2.2 小波包重构
2.2.1 X = wprcoef(T,N)
% Reconstruct packet (2,1). 重构小波包节点系数(2,1) rcfs = wprcoef(wpt,[2 1]); figure(1); subplot(212); plot(rcfs); title('Reconstructed packet (2,1)');

需要注意的是:小波重构系数的信号长度与原始信号长度一致
2.2.2 [T,X] = wpjoin(T,N)
% Recompose packet (1,1) 重写小波包节点(1,1) wpt = wpjoin(wpt,[1 1]); % Plot wavelet packet tree wpt. plot(wpt)

% 创建小波包树 load noisdopp; x = noisdopp; t = wpdec(x,3,'db3'); t = wpjoin(t,[4;5]); % 合并第4、5个小波树节点 plot(t);

2.2.3 T = write(T,‘cfs’,NODE,COEFS)
% 将值写入第4、5、6个小波包树节点中 sNod = read(t,'sizes',[4,5,7]); cfs4 = zeros(sNod(1,:)); cfs5 = zeros(sNod(2,:)); cfs7 = zeros(sNod(3,:)); t = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7); % Plot tree t and click the node (0,0) (see the plot function). % 打印原始节点(0,0),即小波包重构信号的节点 plot(t)

2.2.4 X = wprec(T)
wpt = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7);% 将值写入第4、5、6个小波包树节点中 xrec = wprec(wpt); % 重构后的信号

2.2.5 原始信号小波包分解后的重构方法
- 可由小波包分解后,利用wprcoef(T,N)函数,对最后一层的小波包进行系数重构,得到与原始数据长度一样的重构小波包系数,然后将小波包系数相加,可以得到原始信号
- 可以使用write(T,‘cfs’,NODE,COEFS)函数,将小波包系数加入小波包分解树,然后利用wprec(T) 函数进行原始信号重构,即可得到原始信号
2.3 小波包去噪
2.3.1 [THR,SORH,KEEPAPP,CRIT] = ddencmp(IN1,IN2,X)
下面是小波去噪代码:
[thr,sorh,keepapp] = ddencmp('den','wv',x); [A,D] = dwt(x,'db1'); noiselev = median(abs(D))/0.6745; thresh = sqrt(2*log(length(x)))*noiselev;
2.3.2 [XC,CXC,LXC,PERF0,PERFL2] = wdencmp(‘gbl’,X,‘wname’,N,THR,SORH,KEEPAPP)
[thr,sorh,keepapp] = ddencmp('den','wv',x); xd = wdencmp('gbl',x,'db3',2,thr,sorh,keepapp); subplot(211) plot(x); title('Original Signal'); subplot(212) plot(xd); title('Denoised Signal');

参考文献
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227479.html原文链接:https://javaforall.net
