MATLAB 小波包分析进行信号去噪

文章目录

目录

文章目录

一、小波包分析

二、相关函数

1.   ddencmp:用于获取去噪或压缩的默认阈值

2.   wpdencmp:使用小波包去噪或压缩

三、去噪实例

1.  导入信号源

2.  3层去噪

3.  4层去噪

4.  5层去噪

5.  6层去噪

四、完整代码

结论



一、小波包分析

        其信号去噪的思想和在小波分析中基本相同。不同之处在于:小波包提供了一种更为复杂、更为灵活的分析手段,因为小波包分析对上一层的低频部分和高频部分同时实行分解,具有更加精确的局部分析能力。
        对信号进行小波包分解时,可以采用多种小波包基,通常根据分析信号要求从中选择最好的一种小波包基,即最优基。最优基的选择标准是熵标准。在 MATLAB的小波工具箱中可通过besttree函数进行最优基的选择。
        应用小波包分析对信号进行去噪处理是一个最基本的功能。小波包阈值去噪过程主要分为4个步骤,如下。
        (1)信号的小波包分解。选择一种小波包基并确定所需分解的层次,然后对信号进行小波包分解。

        (2)最优小波包基的选择。

        (3)小波包分解系数的阈值化。对干每一个小油句分解系数,选择一个恰当的阙值对小波包分解后的系数进行阙值量化处理。

        (4)信号的小波包重构。对低频系数和经过处理后的高频系数进行小波包重构。利用小波包进行去噪首先要选取小波包基和分解的层数。对称性好的小波不产生相位畸变,正则性好的小波易于获得光滑的重构信号。

二、相关函数

1.   ddencmp:用于获取去噪或压缩的默认阈值

        形式:[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)

        THR:返回去噪或压缩的默认阈值;

        SORH:代表软或硬阈值化,‘s’表示软阈值化;

        KEEPAPP:是否对近似系数进行阈值处理,0表示不进行,1表示进行。

        CRIT:选取的熵函数(仅用于小波包);

        IN1:'den' (信号去噪)or  'cmp'(信号压缩);

        IN2:'wv' (使用小波分解)or  'wp'(使用小波包分解)

        X:输入信号;

2.   wpdencmp:使用小波包去噪或压缩

        [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,则相反;

三、去噪实例

1.  导入信号源

        代码如下:

clc;
clear;
% 加载信号
load noisdopp;
s = noisdopp;
plot(s);title('原始信号');

MATLAB 小波包分析进行信号去噪_第1张图片 

 

2.  3层去噪

        代码如下:

%% 
[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层)');

MATLAB 小波包分析进行信号去噪_第2张图片

3.  4层去噪

        代码如下:

%% 
[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层)');

MATLAB 小波包分析进行信号去噪_第3张图片 

4.  5层去噪

 

        代码如下:

%%
[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层)');

MATLAB 小波包分析进行信号去噪_第4张图片 

5.  6层去噪

         

        代码如下:

%%
[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层)');

MATLAB 小波包分析进行信号去噪_第5张图片


四、完整代码

          代码如下:

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层)');

MATLAB 小波包分析进行信号去噪_第6张图片 

 

结论

 

        小波包分解层数是去噪处理过程的一人关键参数,通过上面的程序可以确定。从得到的不同分解层次后的去噪效果图可以看出,随着小波宝分解层次的增加,去噪效果变好,但是分解层次增加到四层以后,去噪效果改善已经不明显,此时反而增加了计算量。

        通过反复分析比较,确定分解层数为四层分解。

你可能感兴趣的:(matlab信号处理,matlab)