目录
文章目录
一、小波包分析
二、相关函数
1. ddencmp:用于获取去噪或压缩的默认阈值
2. wpdencmp:使用小波包去噪或压缩
三、去噪实例
1. 导入信号源
2. 3层去噪
3. 4层去噪
4. 5层去噪
5. 6层去噪
四、完整代码
结论
其信号去噪的思想和在小波分析中基本相同。不同之处在于:小波包提供了一种更为复杂、更为灵活的分析手段,因为小波包分析对上一层的低频部分和高频部分同时实行分解,具有更加精确的局部分析能力。
对信号进行小波包分解时,可以采用多种小波包基,通常根据分析信号要求从中选择最好的一种小波包基,即最优基。最优基的选择标准是熵标准。在 MATLAB的小波工具箱中可通过besttree函数进行最优基的选择。
应用小波包分析对信号进行去噪处理是一个最基本的功能。小波包阈值去噪过程主要分为4个步骤,如下。
(1)信号的小波包分解。选择一种小波包基并确定所需分解的层次,然后对信号进行小波包分解。
(2)最优小波包基的选择。
(3)小波包分解系数的阈值化。对干每一个小油句分解系数,选择一个恰当的阙值对小波包分解后的系数进行阙值量化处理。
(4)信号的小波包重构。对低频系数和经过处理后的高频系数进行小波包重构。利用小波包进行去噪首先要选取小波包基和分解的层数。对称性好的小波不产生相位畸变,正则性好的小波易于获得光滑的重构信号。
形式:[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
THR:返回去噪或压缩的默认阈值;
SORH:代表软或硬阈值化,‘s’表示软阈值化;
KEEPAPP:是否对近似系数进行阈值处理,0表示不进行,1表示进行。
CRIT:选取的熵函数(仅用于小波包);
IN1:'den' (信号去噪)or 'cmp'(信号压缩);
IN2:'wv' (使用小波分解)or 'wp'(使用小波包分解)
X:输入信号;
[XD,TREED,PERF0,PERFL2] = wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)
XD:处理后的信号;
TREED:是XD的小波包最佳树分解;
PERFL2和PERF0是以百分比表示的L^2恢复和压缩分数;
X:需处理的信号;
SORH:'s'或'h'用于软阈值或硬阈值;
N:分解层数;
'wname':小波名称的字符串;
CRIT:熵准则;
PAR:阈值参数;
KEEPAPP:如果KEEPAPP=1,则无法计算近似系数阈值化;如果KEEPAPP=0,则相反;
代码如下:
clc;
clear;
% 加载信号
load noisdopp;
s = noisdopp;
plot(s);title('原始信号');
代码如下:
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x,wpt,perf0,perf1]=wpdencmp(s,sorh,3,'sym6',crit,thr,deepapp);
figure(2);
plot(x);title('去噪信号(3层)');
代码如下:
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x1,wpt,perf0,perf1]=wpdencmp(s,sorh,4,'sym6',crit,thr,deepapp);
figure(3);
plot(x1);title('去噪信号(4层)');
代码如下:
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x2,wpt,perf0,perf1]=wpdencmp(s,sorh,5,'sym6',crit,thr,deepapp);
figure(4);
plot(x2);title('去噪信号(5层)');
代码如下:
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x3,wpt,perf0,perf1]=wpdencmp(s,sorh,8,'sym6',crit,thr,deepapp);
figure(5);
plot(x3);title('去噪信号(8层)');
代码如下:
clc;
clear;
% 加载信号
load noisdopp;
s = noisdopp;
subplot(321);plot(s);title('原始信号');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x,~,~,~]=wpdencmp(s,sorh,3,'sym6',crit,thr,deepapp);
subplot(322);plot(x);title('去噪信号(3层)');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x1,~,~,~]=wpdencmp(s,sorh,4,'sym6',crit,thr,deepapp);
subplot(323);plot(x1);title('去噪信号(4层)');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x2,~,~,~]=wpdencmp(s,sorh,5,'sym6',crit,thr,deepapp);
subplot(324);plot(x2);title('去噪信号(5层)');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x3,~,~,~]=wpdencmp(s,sorh,8,'sym6',crit,thr,deepapp);
subplot(325);plot(x3);title('去噪信号(8层)');
小波包分解层数是去噪处理过程的一人关键参数,通过上面的程序可以确定。从得到的不同分解层次后的去噪效果图可以看出,随着小波宝分解层次的增加,去噪效果变好,但是分解层次增加到四层以后,去噪效果改善已经不明显,此时反而增加了计算量。
通过反复分析比较,确定分解层数为四层分解。