小波分析处理信号噪声

一、小波的基本原理

所谓小波就是小的波形,“小”即具有衰减性,“波”是指具有波动性。一般来讲,db小波系和sym小波系在语音去噪中是经常会被用到的两族小波基。

1、【论文】基于小波变换的信号去噪技术及实现
2、【csdn】小波降噪详解
3、【csdn】小波变换在信号去噪声中的使用
4、【matlab】小波降噪的matlab过程
5、【推荐】小波变换和小波阈值法去噪

二、傅里叶变换缺点

特点:Fourier变换不具有局部性。它只适用于确定性信号及平稳信号,由于缺乏时间的局部信息,对时变信号、非平稳信号,Fourier频率分析存在严重不足,它无法告知某些频率成分发生在哪些时间内,无法表示某个时刻信号频谱的分布情况。信号在某时刻的一个小的邻域内发生变化,那么信号的整个频谱都要受到影响,而频谱的变化从根本上来说无法标定发生变化的时间位置和发生变化的剧烈程度。傅里叶变换的时域和频域是完全分割开来的。

其实根本原因是傅里叶变换的三角基是全域性的,其局部化性质不好,因而只能得到信号的整个频谱,难以在任何有限频段上确定任意小范围内信号的局部特征。

参考:从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换

小波分析处理信号噪声_第1张图片

对比小波:从上面的图中可以看出,用小波进行信号的消噪可以很好地保留有用信号中的尖峰和突变部分。而用Fourior分析进行滤波时,由于信号集中在低频部分,噪声分布在高频部分,所以用低通滤波器进行滤波。但是他不能将有用信号的高频部分和由噪声引起的高频干扰有效区分。若低通滤波器太窄,则滤波后信号中仍存在大量噪声;若低通滤波器太宽,则将一部分有用信号当作噪声滤除了。因此小波分析方法对非平稳信号的消噪比Fourior分析更加优越。

matlab小波工具箱:

小波分析处理信号噪声_第2张图片
小波分析处理信号噪声_第3张图片

三、Gabor变换的缺点

特点:Gabor变换在一定程度上解决了局部分析的问题,但对于突变信号和非平稳信号仍难以得到满意的结果,即Gabor变换仍存在着较严重的缺陷。1)Gabor变换的时频窗口大小、形状不变,只有位置变化,而实际应用中常常希望时频窗口的大小、形状要随频率的变化而变化,因为信号的频率与周期成反比,对高频部分希望能给出相对较窄的时间窗口,以提高分辨率,在低频部分则希望能给出相对较宽的时间窗口,以保证信息的完整性,总之是希望能给出能够调节的时频窗;2)Gabor变换基函数不能成为正交系,因此为了不丢失信息,在信号分析或数值计算时必须采用非正交的冗余基,这就增加了不必要的计算量和存储量。

应用: ① 暂态信号检测 如果对信号波形有一定的先验知识且可以据此选取合适的基函数,可以用Gabor变换对信号作精确的检测统计计量。 ② 图象分析与压缩 二维Gabor变换可以应用到图象分析与压缩中。

四、小波变换的优点

1、小波变换给出了一个可以调节的时频窗口,窗口的宽度随频率变化,频率增高时时间窗口的宽度自动变窄,以提高分辨率,“采用小波分析,就像使用一架可变焦距镜头的照相机一样,可以转向任一细节部分”。

2、 小波变换相比于STFT,优点是明显的:1)由于小波母函数ψa,b(t)相当于窗函数,但其窗宽是可变的,较好地解决了时间分辨率和频率分辨率的矛盾,其变化规律使得小波变换具有优良的局部化特性,对分析突变信号和奇异信号非常有效,充分体现了常相对带宽频率分析和自适应分析的思想;2)小波变换能将各种交织在一起的由不同频率组成的混合信号分解成不同频率的信号,并对频率大小不同的信号采用相应粗细的时空域取样步长,从而能够不断聚焦到对象的任意微小细节,对时变信号的频谱分析意义重大。3)并不要求小波变换基底是正交的,其时宽频宽乘积较小,因而展开系数的能量较为集中(参考)

参考:余小勇. 信号分析从傅氏变换到小波变换[J]. 西安邮电学院学报,2001,6(1):64-66.

3、比较一下小波变换、伽柏变换、傅里叶变换可以发现:傅里叶变换不具有局部性;伽柏变换有局部性,但有一些缺点(如前所述);而小波变换不但具有局部性,而且尺度参数a可以改变频谱结构和窗口的形状,起到“变焦”的作用,因此小波分析可能达到多分辨率分析的效果(小变波换被誉为数学显微镜)。从信号分析方法的理论发展过程可能看出:傅里叶分析特别适合分析长时间内较稳定的信号;STFT也有其一定的应用场合,但其效果取决于适当地选取窗函数;小波分析特别适合分析突变信号和奇异信号。

4、 学习小波变换时会发现有一大堆形形色色的小波变换,这是因为小波变换与小波母函数ψ(x)有关,不同的小波母函数ψ(x)则对应着不同种类的小波变换了,比如Haar小波、Shannon小波、墨西哥草帽状小波等等。可以证明,ψa,b(x)的时频窗口面积与参数a和b无关,仅于ψ (x)的选取有关,所以不能通过选择参数a和b使时域和频域窗口的半径同时缩小,时域和频域上的分辨率相互牵制,要想使两者的分辨率同时提高,就必须选择适当的小波母函数ψ (x)*,小波母函数趋向于零的速度是衡量小波母函数性质好坏的一个重要标志。

小波分析处理信号噪声_第4张图片

5、阈值处理

硬阈值方法能够保留更多尖峰特征,软阈值方法使重建信号比较光滑。【matlab】wthresh函数

小波分析处理信号噪声_第5张图片

小波分析处理信号噪声_第6张图片

参考

【csdn】小波降噪详解

【matlab】阈值处理

五、代码实现

1、使用ddencmp函数,获取在消噪和压缩中的阈值代码
load leleccum;
index = 1:1024;
x = leleccum(index);
%产生噪声信号
init = 2055615866;
randn('seed',init);
nx = x + 18*randn(size(x));
%获取消噪的阈值
[thr,sorh,keepapp] = ddencmp('den','wv',nx);
%对信号进行消噪
xd = wdencmp('gbl',nx,'db4',2,thr,sorh,keepapp);
subplot(311);
plot(x);
title('原始信号');
subplot(312);
plot(nx);
title('含噪信号');
subplot(313);
plot(xd);
title('消噪后的信号');

代码实现的图像如下所示
小波分析处理信号噪声_第7张图片

2、使用函数wnoisest获取噪声方差,然后使用函数wbmpen获取小波去噪阈值,最后使用wdencmp实现信号消噪。
load leleccum;
indx = 1:1024;
x = leleccum(indx);
%产生含噪信号
init = 2055615886;
randn('seed',init);
nx = x + 18*randn(size(x));
%使用小波函数'db6'对信号进行3层分解
[c,l] = wavedec(nx,3,'db6');
%估计尺度1的噪声标准差
sigma = wnoisest(c,l,1);
alpha = 2;
%获取消噪过程中的阈值
thr = wbmpen(c,l,sigma,alpha);
keepapp = 1;
%对信号进行消噪
xd = wdencmp('gbl',c,l,'db6',3,thr,'s',keepapp);
subplot(311);
plot(x);
title('原始信号');
subplot(312);
plot(nx);
title('含噪信号');
subplot(313);
plot(xd);
title('消噪后的信号');

代码实现图像如下所示
小波分析处理信号噪声_第8张图片

3、使用一维信号的自动消噪函数wden对信号进行消噪
load leleccum;
indx = 1:1024;
x = leleccum(indx);
%产生含噪信号
init = 2055615866;
randn('seed',init);
nx = x + 18*randn(size(x));
%将信号nx使用小波函数'sym5'分解到第5%使用mimimaxi阈值选择系数进行处理,消除噪声信号
lev = 5;
xd = wden(nx,'minimaxi','s','mln',lev,'sym5');
subplot(311);
plot(x);
title('原始信号');
subplot(312);
plot(nx);
title('含噪信号');
subplot(313);
plot(xd);
title('消噪后的信号');

小波分析处理信号噪声_第9张图片

4、对小波分解系数使用函数wthcoef进行阈值处理,然后利用阈值处理后的小波系数进行重构达到去噪目的

load leleccum;
indx = 1:1024;
x = leleccum(indx);
%产生含噪信号
init = 2055615866;
randn('seed',init);
nx = x + 18*randn(size(x));
%使用小波函数'db5'对信号进行3层分解
[c,l] = wavedec(nx,3,'db5');
%设置尺度向量
n = [1,2,3];
%设置阈值向量
p = [100,90,80];
%对高频系数进行阈值处理
nc = wthcoef('d',c,l,n,p);
%对修正后的小波分解结构进行重构
rx = waverec(nc,l,'db5');
subplot(311);
plot(x);
title('原始信号');
subplot(312);
plot(nx);
title('含噪信号');
subplot(313);
plot(rx);
title('消噪后的信号');

小波分析处理信号噪声_第10张图片

5、软硬阈值实现降噪

【csdn】MATLAB实现小波变换去噪

load leleccum;
indx = 1:1024;
x = leleccum(indx);
%产生含噪信号
init = 2055615866;
randn('seed',init);
s = x + 18*randn(size(x));
N = numel(s);
%小波分解;
[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-3层置0,4-7层用软阈值函数处理
sd3=zeros(1,length(cd3));
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'); %小波重构
subplot(311);
plot(x);
title('原始信号');
subplot(312);
plot(s);
title('含噪信号');
subplot(313);
plot(s0);
title('消噪后的信号');

小波分析处理信号噪声_第11张图片

各函数降噪处理的优劣大家自行比较,此处个人认为信号降噪使用噪声方差后处理的降噪效果还原更贴近原信号,因阈值选择若加入噪声的相关系数,但具体使用情况大家可根据自身需求而定。

你可能感兴趣的:(声源定位)