小波阈值去噪
小波阈值去噪
目录
1.概念
2.原理
3.影响降噪效果的因素
3.1小波基的选择
3.2分解层数的选择
3.3阈值的选择
3.4阈值函数的选择
4.MATLAB代码
参考文献
小波分析即用Mallat塔式算法对信号进行降阶分解。该算法在每尺度下将信号分解成近似分量与细节分量。近似分量表示信号的高尺度,即低频信息;细节分量表示信号的低尺度,即高频信息。
对含有噪声的信号,噪声分量的主要能量集中在小波分解的细节分量中。
2.原理
小波阈值去噪的实质为抑制信号中无用部分、增强有用部分的过程。小波阈值去噪过程为:(1)分解过程,即选定一种小波对信号进行n层小波分解;(2)阈值处理过程,即对分解的各层系数进行阈值处理,获得估计小波系数;(3)重构过程,据去噪后的小波系数进行小波重构,获得去噪后的信号。
小波阈值去噪过程
小波分解重构过程
小波分解:X->ca3,cd3,cd2,cd1;小波重构:ca3,cd3,cd2,cd1->X。其中ca为低频信息、近似分量,cd为高频、细节分量。
3.影响降噪效果的因素
3.1小波基的选择
在对信号进行小波分解时需要选择合适的小波基,由于没有任何一种小波基可以对不同类型的信号达到最优的分解效果,因此,如何选择小波基成为小波分解的一个重点。针对现实中的信号,小波基的选择一般要考虑以下几个因素:支撑长度、对称性、消失矩、正则性、相似性。针对一维信号,例如语音信号,通常选择dB小波和sym小波。
3.2分解层数的选择
在对信号进行小波分解时,分解的层数取得越大,则噪声和信号表现的不同特性越明显,越有利于二者的分离,但是分解的层数越大,经过重构的信号失真也会越大,在一定程度上会对信号去噪的效果产生较差的影响。因此,如何选择分解层数以解决信噪分离效果和重构信号失真之间的矛盾呢?
小波分解的频段范围与采样频率有关。若进行N层分解,则各个频段范围为:
假设原始信号X的采样频率为1000Hz,则信号的最大频率为500,对该信号做3层小波分解,则各个频段范围如下图所示。
3.3阈值的选择
在小波域,有效信号对应的系数很大,而噪声对应的系数很小并且仍满足高斯分布。因此可以通过设定阈值将信号在小波域某段区间内的系数置零,就能最大程度的抑制噪声,同时只是稍微损伤有效信号。
阈值选择规则基于模型
,
是高斯白噪声。
目前常见的阈值选择方法有:无偏风险估计阈值、极大极小阈值、固定阈值、启发式阈值。
MATLAB自带的自适应阈值选择函数,调用格式如下:
thr=thselect(X,str);
根据字符串str定义的阈值选择方法求信号X的自适应阈值thr。
str= 'rigrsure':无偏风险估计阈值;
str= 'minimaxi':极大极小阈值;
str= 'sqtwolog':固定阈值;
str= 'heursure':启发式阈值。
一般来讲,极大极小阈值和无偏风险估计阈值比较保守,当噪声在信号的高频段分布较少时,这两种阈值估计方法效果较好,可以将微弱的信号提取出来。而固定阈值和启发式阈值去噪比较彻底,在去噪时显得更为有效,但是也容易把有用的信号误认为噪声去掉。
3.4阈值函数的选择
在确定了高斯白噪声在小波域的阈值门限之后,就需要有个阈值函数对含有噪声系数的小波系数进行过滤,去除高斯噪声系数,常用的阈值函数有硬阈值函数和软阈值函数。
3.4.1硬阈值函数
当小波系数的绝对值大于给定阈值时,小波系数不变;小于阈值时,小波系数置零。
3.4.2软阈值函数
当小波系数的绝对值大于给定阈值时,令小波系数减去阈值;小于阈值时,小波系数置零。
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.
[2]有关小波的几个术语及常见的小波基介绍
[3]小波变换和小波阈值法去噪
[4]基于MATLAB的小波阈值去噪
小波阈值去噪相关教程
Halcon阈值算子 -- 局部阈值之var_threshold
Halcon阈值算子 -- 局部阈值之var_threshold Halcon阈值算子 – 局部阈值之var_threshold 与local_threshold类似,var_threshold也是基于局部均值和方差。只不过计算公式不一样。 算子的函数签名如下: var_threshold(Image : Region : MaskWidth, MaskHeight
基于阈值的图像二值化方法
基于阈值的图像二值化方法 1.以经验值128作为阈值分割 2.手动调试,寻找更好的阈值 3.自动选择合适的阈值方法 首先选取灰度值128为阈值,使用固定阈值的二值化处理,观察分割效果。得出两组由灰度值小于128和大于等于128 的像素组成的像素群,做出两组像素群
Halcon阈值算子 -- 局部阈值之local_threshold
Halcon阈值算子 -- 局部阈值之local_threshold Halcon阈值算子 – 局部阈值之local_threshold 按照官方文档介绍,本算子适合文本二值化(This algorithm is a text binarization technique and provides good results for document images)。 算子的函数签名
OpenCV-Python官方教程-32-计算摄影学图像去噪
OpenCV-Python官方教程-32-计算摄影学图像去噪 学习使用非局部平均值去噪算法去除图像中的噪音 学习函数 cv2.fastNlMeansDenoising(),cv2.fastNlMeansDenoisingColored()等 我们已经学习了很多图像平滑技术,比如高斯平滑,中值平滑等,当噪声比较小时这些技
2020-10-19 可视化HSV色彩空间阈值编辑器
2020-10-19 可视化HSV色彩空间阈值编辑器 cv2.inRange(dst, hsv_low, hsv_high): 第一个参数:dst指的是原图 第二个参数:low_hsv指的是图像中低于这个low_hsv的值,图像值变为0(黑色) 第三个参数:high_hsv指的是图像中高于这个high_hsv的值,图像值变为0
JAVA程序设计:带阈值的图连通性(LeetCode:5128)
JAVA程序设计:带阈值的图连通性(LeetCode:5128) 有 n 座城市,编号从 1 到 n 。编号为 x 和 y 的两座城市直接连通的前提是: x 和 y 的公因数中,至少有一个 严格大于 某个阈值 threshold 。更正式地说,如果存在整数 z ,且满足以下所有条件,则编号 x
数字图像处理-DFTDCTWHT小波变换分解重构(Matlab)
数字图像处理-DFTDCTWHT小波变换分解重构(Matlab) 文章目录 数字图像处理-DFTDCTWHT小波变换分解重构(Matlab) 基本的matlab图像处理函数的使用 代码块 运行效果 傅里叶变换(DFT) 对图像进行傅里叶正变换 去除部分高频分量后对图像进行傅里叶逆变换 离散余弦变
图像处理与小波变换-Python实现
图像处理与小波变换-Python实现 关于小波变换的理论知识,可以查看我的另一篇文章→小波变换入门 本文主要介绍小波变换在图像分解中的应用及其Python实现。 按照滤波组理论,图像的二维离散小波分解和重构过程如下图所示,分解过程可描述为:首先对图像的每一