NGSIM小波去噪 python 小波变换去噪matlab源码_matlab 阈值获取算法

NGSIM小波去噪 python 小波变换去噪matlab源码_matlab小波变换_02

    机械故障诊断中,采集得到的设备振动信号不可避免的含有一定的噪声成分。良好的去噪效果对于信号分析有着很的大帮助。由于小波变换具有良好的时频特性,通过小波变换可对信号的不同频率成分进行分解,在信号去噪中得到了广泛的应用。其中,小波阈值降噪是一种实现简单,效果较好的小波去噪方法。通过对小波分解后的各层系数中模大于或小于某设定阈值的系数分别处理,然后进行反变换重构出去噪后的信号。下面对小波阈值降噪进行简要介绍。

1.基本思想

 假定一个叠加噪声的信号模型如下:                


NGSIM小波去噪 python 小波变换去噪matlab源码_matlab 小波变换_03

f(t)是我们想要得到的原始信号,n(t)为噪声。降噪的目的就是抑制n(t)以恢复f(t)。通常情况下,n(t)表现为高频信号,而实际中f(t)通常为低频信号,或者是较为平稳的信号。基于小波变换的去噪方法利用小波变换中的变尺度特性,对确定信号有一种‘集中’能力。如果一个信号的能量集中于小波变换域少数小波系数上,那么它们的值必然大于在小波变换域内能量分散后大量信号和噪声的小波系数。这时可通过选取合适的阈值,大于阈值的小波系数被认为是信号产生的,予以保留;小于阈值的则认为是噪声产生的,予以置零,从而达到去噪的目的。一般一维信号的小波阈值降噪可以按照下面三个步骤进行:

     (1)选择合适的小波基函数,确定小波分解层数,对信号进行N层小波分解,得到各尺度小波分解系数Wj,k。

     (2)设定阈值,保留所有的低频系数,确保信号的整体形状不变;对每一层的高频系数Wj,k进行阈值函数处理。

    (3)根据阈值处理后的小波系数,进行一维信号的小波重构,得到去噪后的信号估计值f(t)。


NGSIM小波去噪 python 小波变换去噪matlab源码_小波去噪matlab程序_04

      在进行小波分析时常用到‘近似’和‘细节’,近似表示信号的高尺度,即低频信息;细节表示信号的低尺度,即高频信息。对含有噪声的信号,噪声分量的主要能量集中在小波分解后的细节分量中。

2.关键问题

   在上述小波阈值降噪过程中,小波基和分解层数的选择,阈值的选取准则,阈值函数的设计都会对最终的信号去噪效果产生很大影响。

2.1小波基选择

  通常我们希望所选取的小波同时满足以下条件:正交性、高消失矩、紧支性、对称性或反对称性。由于小波基函数在处理信号时各有特点,且没有任何一种小波基函数可以对所有类型信号都取得最优的去噪效果。所以在应用的时候一般选取具有紧支的小波以及根据信号的特征来选取较为合适的小波。

2.2 分解层数选择

  在小波分解中,分解层数的选择也是非常重要的一步。取得越大,则噪声和信号表现的不同特性越明显,越有利于二者的分离。但另一方面,分解层数越大,重构到的信号失真也会越大,在一定程度上又会影响最终去噪的效果。因此在应用时要格外注意处理好两者之间的矛盾,选择一个合适的分解尺度。

2.3 阈值选取

  在小波域,有效信号对应的系数很大,而噪声对应的系数很小。噪声在小波域对应的系数仍满足高斯白噪分布。因此可以通过小波系数、或者原始信号来进行评估能够消除噪声在小波域的阈值。目前主要有通用阀值(VisuShrink)、SureShrink阀值、Minimax阀值、BayesShrink阀值等。

2.4 阈值函数的选择

   确定了噪声在小波系数(域)的阈值限之后,就需要有个阈值函数对小波系数进行过滤,去除噪声系数。阈值函数就是用来修正小波系数的规则,常用的阈值函数有软阈值和硬阈值方法,基于这两种方法许多学者也进行了改进。

1)硬阈值法:

将绝对值小于阈值的小波系数变为零,而将绝对值大于阈值的小波系数不加任何处理予以保留。硬阈值算法可以很好的保留原始信号边缘等局部特征,由于其收缩函数是不连续的,重构得到的信号可能会产生一些振荡。


NGSIM小波去噪 python 小波变换去噪matlab源码_matlab 阈值获取算法_05

2)软阈值法:

将绝对值大于阈值的小波系数不完全保留,而是做收缩处理。采用软阈值算法处理,虽然整体连续性好,但分解系数之间总存在恒定的偏差,会影响重构信号与真实信号的逼近程度。


NGSIM小波去噪 python 小波变换去噪matlab源码_matlab小波变换_06

NGSIM小波去噪 python 小波变换去噪matlab源码_NGSIM小波去噪 python_07

NGSIM小波去噪 python 小波变换去噪matlab源码_matlab 小波变换_08

3.MATLAB实例

clear all;
clc;
N=5000;
fs=1000;
load xz.mat;
s=xz(1:N);                        %加载信号
%%小波分解
[c,l]=wavedec(s,7,'coif5');            %小波基为coif5,分解层数为7层
ca11=appcoef(c,l,'coif5',7);           %获取低频信号
cd1=detcoef(c,l,1);
cd2=detcoef(c,l,2);
cd3=detcoef(c,l,3);
cd4=detcoef(c,l,4);                  %获取高频细节
cd5=detcoef(c,l,5);
cd6=detcoef(c,l,6);
cd7=detcoef(c,l,7);
sd1=zeros(1, length(cd1));
sd2=zeros(1, length(cd2));            %1-2层置0,3-7层用软阈值函数处理
sd3=wthresh(cd3,'s',0.014);
sd4=wthresh(cd4,'s',0.014);
sd5=wthresh(cd5,'s',0.014);
sd6=wthresh(cd6,'s',0.014);
sd7=wthresh(cd7,'s',0.014);
c2=[ca11,sd7,sd6,sd5,sd4,sd3,sd2,sd1];
s0=waverec(c2,l,'coif5');             %小波重构
save s0.mat s0
figure;
subplot (211); plot(s0);
ff=fs*(0:N/2-1)/N;
Yf= fft(s0);              
Q=2*abs (Yf)/N;
Subplot (212); plot(ff(1:N/2),Q(1:N/2));


NGSIM小波去噪 python 小波变换去噪matlab源码_NGSIM小波去噪 python_09

参考文献

1.季策, 路学亮,张志伟.一种新的小波阈值去噪算法在弱信号检测中的应用. Diss. 2011.

2.红叶幽香.小波变换和小波阈值法去噪

作者/ 杨晨