关于小波变换
去噪的必要性
一般来说信号中都是带有信号的,特别是信号的采集过程中,在接收端除了获取目标信号外还会引入噪声。常见的噪声包括高斯白噪声,通常我们在处理噪声时都将噪声假设为高斯白噪声。因此在信号做进一步处理之前需要将有效的信号提取出来。以下为高斯背景噪声。
![这里写图片描述](https://img-blog.csdn.net/20161031153115970)
噪声数学模型
![这里写图片描述](https://img-blog.csdn.net/20161031151801409)
传统的去噪方法
通常去噪声的有滤波器,模拟滤波器和数字滤波器。除了滤波器还有傅里叶变换,FFT去噪不能将有用信号的高频部分和由噪声引起的高频干扰加以区分。这种情况特别是需要信号高频信息的时候就无能无力了,在去除高频噪声的同时需要保留信号高频成分。
小波变换去噪可以很好的保护有用的信号尖峰和突变信号。因此小波变换适合用于暂态信号和瞬态信号的噪声去除方面,以及抑制高频噪声的干扰,有效将高频信息和高频噪声区分开来。
小波变换去噪原理
小波变换具有良好的时频局部化特性,其线性表示为:WX=Wf+We,保留主要由信号控制的小波系数,发现并去掉由噪声控制的小波系数。剩下的小波系数做逆变换得到去躁信号。
小波分解与信号重构图解
![这里写图片描述](https://img-blog.csdn.net/20161031154612587)
去噪声的理论依据:经小波分解后,信号的小波系数幅值要大于噪声的系数幅值。
具体操作流程
![这里写图片描述](https://img-blog.csdn.net/20161031155732247)
小波变换工具箱
matlab具备小波变换的常用仿真函数,列表如下:
![这里写图片描述](https://img-blog.csdn.net/20161031160021420)
仿真实验
一层离散小波分解与重构
以实际电流信号为例,该电流为用户一种电器的稳定工作时通过数据采集卡和LABVIEW采集到的真实数据。对该电流序列信号进行一层小波分解与重建。以下是原始电流信号:
![这里写图片描述](https://img-blog.csdn.net/20161101165835605)
可以认为在电流信号在采集过程混杂着高斯噪声。对电流信号进行一层小波分解得到近似系数和细节系数,通常就采用近似系数作为分解后的近似信号。
![这里写图片描述](https://img-blog.csdn.net/20161101170617342)
本部分代码
s=importdata('C:\Users\Administrator\Desktop\steady.txt');
figure(1)
plot(s);
title('原始信号');
lengthS=length(s);
[cA1,cD1]=dwt(s,'db1');
A1=idwt(cA1,[],'db1',lengthS);
D1=idwt([],cD1,'db1',lengthS);
figure(2);
title('近似系数与细节系数');
subplot(1,2,1);plot(A1);title('近似电流信号');
subplot(1,2,2);plot(D1);title('细节系数');
A0=idwt(cA1,cD1,'db1',lengthS);
figure(3);
plot(A0);
title('恢复信号');
err = max(abs(s-A0));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
最后用err来判断重建后的信号与初始信号的误差,err=8.8818e-16;
三层离散小波分解与重构
三层离散小波分解的过程与一层分解类似,以下是三层分解的细节系数和近似系数的结果:
![这里写图片描述](https://img-blog.csdn.net/20161101193008977)
一般多层小波分解的近似系数和细节系数可以用以下图表示:
![这里写图片描述](https://img-blog.csdn.net/20161101194443866)
一维离散平稳小波分析
离散平稳小波分析所用到的函数有swt小波分解和iswt小波重构,在应用中采样离散小波分析进行去噪处理。此部分的处理步骤与上述类似。以下是三层分解中的近似系数和细节系数的结果图:
![这里写图片描述](https://img-blog.csdn.net/20161101195120270)
阈值去噪声
去除噪声时,先使用ddencmp函数计算一个默认的全局阈值,再使用wthresh函数执行细节系数的实际阈值,然后使用iswt得到除噪信号。 所有在一维离散小波变换中选择阈值的方法在一维平稳小波变换中都是有效的。
[thr,sorh] = ddencmp('den','wv',s);
dswd = wthresh(swd,sorh,thr);
clean = iswt(swa,dswd,'db1');
figure(5);
subplot(2,1,1), plot(s);
title('Original signal')
subplot(2,1,2), plot(clean);
title('denoised signal')
以下是用全局阈值进行小波变换去躁的源信号和去噪后的信号对比图:
![这里写图片描述](https://img-blog.csdn.net/20161101195459856)
需要注意的是小波分解与重构的层次数目并不是越多越好,也不是越少越好。因为越多会丢失一些细节,层次少了不能有效去除噪声。另外在采样阈值法去除噪声时还有一些双阈值以及软硬阈值的方法可以选择,具体的使用可以查阅matlab工具箱。
(function () {('pre.prettyprint code').each(function () { var lines =
(this).text().split(′\n′).length;var
numbering = $('
').addClass('pre-numbering').hide();
(this).addClass(′has−numbering′).parent().append(
numbering); for (i = 1; i