matlab 小波启发式阈值滤波,小波阈值去噪 - osc_s6yenydw的个人空间 - OSCHINA - 中文开源技术交流社区...

目录

1.概念

小波分析即用Mallat塔式算法对信号进行降阶分解。该算法在每尺度下将信号分解成近似分量与细节分量。近似分量表示信号的高尺度,即低频信息;细节分量表示信号的低尺度,即高频信息。

对含有噪声的信号,噪声分量的主要能量集中在小波分解的细节分量中。

2.原理

小波阈值去噪的实质为抑制信号中无用部分、增强有用部分的过程。小波阈值去噪过程为:(1)分解过程,即选定一种小波对信号进行n层小波分解;(2)阈值处理过程,即对分解的各层系数进行阈值处理,获得估计小波系数;(3)重构过程,据去噪后的小波系数进行小波重构,获得去噪后的信号。

matlab 小波启发式阈值滤波,小波阈值去噪 - osc_s6yenydw的个人空间 - OSCHINA - 中文开源技术交流社区..._第1张图片 小波阈值去噪过程

matlab 小波启发式阈值滤波,小波阈值去噪 - osc_s6yenydw的个人空间 - OSCHINA - 中文开源技术交流社区..._第2张图片 小波分解重构过程

小波分解:X->ca3,cd3,cd2,cd1;小波重构:ca3,cd3,cd2,cd1->X。其中ca为低频信息、近似分量,cd为高频、细节分量。

3.影响降噪效果的因素

3.1小波基的选择

在对信号进行小波分解时需要选择合适的小波基,由于没有任何一种小波基可以对不同类型的信号达到最优的分解效果,因此,如何选择小波基成为小波分解的一个重点。针对现实中的信号,小波基的选择一般要考虑以下几个因素:支撑长度、对称性、消失矩、正则性、相似性。针对一维信号,例如语音信号,通常选择dB小波和sym小波。

3.2分解层数的选择

在对信号进行小波分解时,分解的层数取得越大,则噪声和信号表现的不同特性越明显,越有利于二者的分离,但是分解的层数越大,经过重构的信号失真也会越大,在一定程度上会对信号去噪的效果产生较差的影响。因此,如何选择分解层数以解决信噪分离效果和重构信号失真之间的矛盾呢?

小波分解的频段范围与采样频率有关。若进行N层分解,则各个频段范围为:

matlab 小波启发式阈值滤波,小波阈值去噪 - osc_s6yenydw的个人空间 - OSCHINA - 中文开源技术交流社区..._第3张图片

假设原始信号X的采样频率为1000Hz,则信号的最大频率为500,对该信号做3层小波分解,则各个频段范围如下图所示。

matlab 小波启发式阈值滤波,小波阈值去噪 - osc_s6yenydw的个人空间 - OSCHINA - 中文开源技术交流社区..._第4张图片

3.3阈值的选择

在小波域,有效信号对应的系数很大,而噪声对应的系数很小并且仍满足高斯分布。因此可以通过设定阈值将信号在小波域某段区间内的系数置零,就能最大程度的抑制噪声,同时只是稍微损伤有效信号。

阈值选择规则基于模型

9a001ccc37f9412b70606146a07d9e80.gif

fec3b1ec44ea7938f520dce9c27db42b.gif是高斯白噪声。

目前常见的阈值选择方法有:无偏风险估计阈值、极大极小阈值、固定阈值、启发式阈值。

MATLAB自带的自适应阈值选择函数,调用格式如下:

thr=thselect(X,str);

根据字符串str定义的阈值选择方法求信号X的自适应阈值thr。

str= 'rigrsure':无偏风险估计阈值;

str= 'minimaxi':极大极小阈值;

str= 'sqtwolog':固定阈值;

str= 'heursure':启发式阈值。

matlab 小波启发式阈值滤波,小波阈值去噪 - osc_s6yenydw的个人空间 - OSCHINA - 中文开源技术交流社区..._第5张图片

一般来讲,极大极小阈值和无偏风险估计阈值比较保守,当噪声在信号的高频段分布较少时,这两种阈值估计方法效果较好,可以将微弱的信号提取出来。而固定阈值和启发式阈值去噪比较彻底,在去噪时显得更为有效,但是也容易把有用的信号误认为噪声去掉。

3.4阈值函数的选择

在确定了高斯白噪声在小波域的阈值门限之后,就需要有个阈值函数对含有噪声系数的小波系数进行过滤,去除高斯噪声系数,常用的阈值函数有硬阈值函数和软阈值函数。

3.4.1硬阈值函数

当小波系数的绝对值大于给定阈值时,小波系数不变;小于阈值时,小波系数置零。

b14847ab0db4e8272f8507887920807b.png

3.4.2软阈值函数

当小波系数的绝对值大于给定阈值时,令小波系数减去阈值;小于阈值时,小波系数置零。

a7e5f233d50272a2fbc5554f54741070.png

MATLAB自带的阈值处理函数,调用格式如下:

Y=wthresh(X,SORH,thr);

返回输入向量或矩阵X经过软阈值(SORH=’s’)或硬阈值(SORH=’h’)处理后的信号Y,thr是阈值。

4.MATLAB代码

%% 基于小波变换的阈值去噪

clc;

clear;

close all;

tic;

%% 用db8小波对含噪信号进行5层分解并提取系数

[c,l]=wavedec(y,5,'db8'); % y为含噪信号

%取第5层低频近似系数

ca5=appcoef(c,l,'db8',5);

%取各层高频细节系数

cd5=detcoef(c,l,5);

cd4=detcoef(c,l,4);

cd3=detcoef(c,l,3);

cd2=detcoef(c,l,2);

cd1=detcoef(c,l,1);

%% 阈值获取

% [thr,sorh,keepapp]=ddencmp('den','wv',y); % 函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值

thr=thselect(y,'rigrsure'); % 自适应阈值选择使用Stein的无偏风险估计原理

% thr=thselect(y,'heursure'); % 使用启发式阈值选择

% thr=thselect(y,'sqtwolog'); % 阈值等于sqrt(2*log(length(X)))

% thr=thselect(y,'minimaxi'); % 用极大极小原理选择阈值

%% 进行硬阈值处理

yhard5=wthresh(cd5,'h',thr);

yhard4=wthresh(cd4,'h',thr);

yhard3=wthresh(cd3,'h',thr);

yhard2=wthresh(cd2,'h',thr);

yhard1=wthresh(cd1,'h',thr);

c1=[ca5;yhard5;yhard4;yhard3;yhard2;yhard1];

y1=waverec(c1,l,'db8');

%% 进行软阈值处理

ysoft5=wthresh(cd5,'s',thr);

ysoft4=wthresh(cd4,'s',thr);

ysoft3=wthresh(cd3,'s',thr);

ysoft2=wthresh(cd2,'s',thr);

ysoft1=wthresh(cd1,'s',thr);

c2=[ca5;ysoft5;ysoft4;ysoft3;ysoft2;ysoft1];

y2=waverec(c2,l,'db8');

%% 对上述信号进行图示

figure(1);

plot(y);title('含噪信号');

axis tight;

figure(2);

plot(y1);title('硬阈值处理'); %降噪信号时域图

axis tight;

figure(3);

plot(y2);title('软阈值处理'); %降噪信号时域图

axis tight;

fs=50;N=4000; % 采样频率为50MHz,采样点数为4000

figure(4);

[f1(:,1),A1(:,1)]=PinPu(y1,fs,N);

plot(f1(:,1),A1(:,1));

title('硬阈值处理');legend('D denoise Signal'); %降噪信号频谱图

axis tight;

figure(5);

[f2(:,1),A2(:,1)]=PinPu(y2,fs,N);

plot(f2(:,1),A2(:,1));

title('软阈值处理');legend('D denoise Signal'); %降噪信号频谱图

axis tight;

toc;

参考文献

[1]司莉,毕贵红,魏永刚等.基于RQA与SVM的声发射信号检测识别方法[J].振动与冲击,2016,35(2):98.

你可能感兴趣的:(matlab,小波启发式阈值滤波)