小波包分解与构建目录
1小波包分解、重构原理1.1小波变换
小波变换只对讯号的低频部份做进一步分解,而对高频部份也即讯号的细节部份不再继续分解,所以小波变换才能挺好地表征一大类以低频信息为主要成份的讯号,不能挺好地分解和表示包含大量细节信息(细小边沿或纹理)的讯号,如非平稳机械震动讯号、遥感图像、地震讯号和生物医学讯号等。
1.2小波包变换
小波包变换既可以对低频部份讯号进行分解,也可以对高频部份进行分解力的正交分解法的基本过程,并且这些分解既无冗余,也无疏漏,所以对包含大量中、高频信息的讯号才能进行更好的时频局部化剖析。
2小波包使用到的函数及示例代码
以上即是小波包树,其中节点的命名规则是从(1,0)开始,叫1号力的正交分解法的基本过程,(1,1)是2号………依这种推,(3,0)是7号,(3,7)是14号。每位节点都有对应的小波包系数,这个系数决定了频度的大小,也就是说频度信息早已有了,而且频域信息在那儿呢?那就是order。这个order就是这种节点的次序,也就是频度的次序。
2.1小波包分解2.1.1T=wpdec(X,N,‘wname’)
T=wpdec(X,N,‘wname’)小波分解函数
T为小波包分解树,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.2X=(T,N)
X=(T,N)小波包分解系数函数
X为返回的小波包系数,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.1X=(T,N)
X=(T,N)小波包构建系数函数
X为构建后的小波包节点系数,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]=(T,N)
[T,X]=(T,N)用于合并小波包树的节点
返回T:为更改后的小波包树T
返回X:合并后的节点系数
T:输入的小波包数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.3T=write(T,‘cfs’,NODE,COEFS)
T=write(T,‘cfs’,NODE,COEFS)将
返回T:更改后的小波包树
T:输入的小波包树
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.4X=wprec(T)
对于一位小波包分解构建
X=wprec(T)重组小波包
X:为小波包分解树
T:构建后的讯号
wpt = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7);% 将值写入第4、5、6个小波包树节点中
xrec = wprec(wpt); % 重构后的信号
2.2.5原始讯号小波包分解后的构建方式可由小波包分解后,借助(T,N)函数,对最后一层的小波包进行系数构建,得到与原始数据宽度一样的构建小波包系数,之后将小波包系数相乘,可以得到原始讯号可以使用write(T,‘cfs’,NODE,COEFS)函数,将小波包系数加入小波包分解树,之后借助wprec(T)函数进行原始讯号构建,即可得到原始讯号2.3小波包去噪2.3.1[THR,SORH,,CRIT]=(IN1,IN2,X)
[THR,SORH,,CRIT]=(IN1,IN2,X)
THR是阀值,SORH是阀值函数,近似系数,CRIT熵的选择(仅用于小波包)
:选择0或1可对近似系数进行阀值处理
IN1:‘den’表示去噪,‘cmp’表示压缩.
IN2:'wv’用于小波,'wp’用于小波包
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,]=(‘gbl’,X,‘wname’,N,THR,SORH,)
[XC,CXC,LXC,PERF0,]=(‘gbl’or‘lvd’,X,‘wname’,N,THR,SORH,)
返回值XC:
返回值CXC:XC的小波包分解结构
返回值LXC:XC的小波包分解结构
返回值PERF0:恢复L^2的范数比率,是用百分制表明降噪所保留的能量成份
返回值:压缩L^2的范数比率,是用百分制表明压缩所保留的能量成份
‘gbl’:表示每层都采用同一个阀值进行处理
‘lvd’:对每层采用不同的阀值进行处理
X:输入的讯号
‘wname’:小波基
N:小波分解的层数
THR:阀值向量的宽度
SORH:阀值函数,'s’软阀值,'h’硬阀值
:0对低频近似系数不进行阀值量化处理;1对低频近似系数进行阀值量化处理
[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');
参考文献
1.自带的help
2.