小波阈值去噪

小波阈值去噪目录1.概念2.原理3.影响降噪效果的因素3.1小波基的选择3.2分解层数的选择3.3阈值的选择3.4阈值函数的选择4.MATLAB代码参考文献1.概念小波分析即用Mallat塔式算法对信号进行降阶分解。该算法在每尺度下将信号分解成近似分量与细节分量。近似分量表示信号的高尺度,即低频信息;细节分量表示信号的低尺度,即高频信息。对含有噪声的信号,噪声分量的主要能量集中在小波分解的细节分量中。2.原理小波阈值去噪的实质为抑制信号中无用部分、增强有用部分的过

大家好,又见面了,我是你们的朋友全栈君。

目录

1.概念

2.原理

3.影响降噪效果的因素

3.1小波基的选择

3.2分解层数的选择

3.3阈值的选择

3.4阈值函数的选择

4.MATLAB代码

参考文献


1.概念

小波分析即用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阈值的选择

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

阈值选择规则基于模型\large y=f(t)+e,\large e是高斯白噪声。

 

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

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;
%% 产生仿真信号
Fs=100;   %数据采样率Hz
t=(1:1/Fs:4096*1/Fs)'; %对数据进行采样,将t转置为1列
N = length(t);  %数据的采样数目
f1 =0.8; %信号的频率
f2=0.05;
x=2*sin(2*pi*f1*t+cos(2*pi*f2*t));    %产生原始信号
nt=0.9*randn(N,1);  %高斯白噪声生成
y=x+nt; %含噪信号
%% 用db4小波对含噪信号进行5层分解并提取系数
[c,l]=wavedec(y,5,'db4'); 
%取第5层低频近似系数
ca5=appcoef(c,l,'db4',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=thselect(y,'sqtwolog'); % 阈值获取
%% 进行软阈值处理
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);
c1=[ca5;ysoft5;ysoft4;ysoft3;ysoft2;ysoft1];
Y=waverec(c1,l,'db4');
%% 画图
% 时域波形对比图
figure;
subplot(3,1,1);plot(t,x);xlabel('t/s');ylabel('幅值');title('模拟信号x(t)');
subplot(3,1,2);plot(t,y);xlabel('t/s');ylabel('幅值');title('含噪信号y(t)');
subplot(3,1,3);plot(t,Y);xlabel('t/s');ylabel('幅值');title('去噪后信号x(t)');
% 频谱对比图
figure;
fs=5;      % 采样频率为5Hz
[f,A] = PinPu(x,fs);
subplot(3,1,1);plot(f,A);xlabel('频率/Hz');ylabel('幅值/V');
[f,A] = PinPu(y,fs);
subplot(3,1,2);plot(f,A);xlabel('频率/Hz');ylabel('幅值/V');
[f,A] = PinPu(Y,fs);
subplot(3,1,3);plot(f,A);xlabel('频率/Hz');ylabel('幅值/V');
%% 降噪指标
% 降噪前信噪比
p1=sum(abs(y).^2)/N;
p2=sum(abs(nt).^2)/N;
SNR(1)=10*log10(p1/p2);
% 降噪后信噪比
p3=sum(abs(Y).^2)/N;
p4=sum(abs(Y-x).^2)/N;
SNR(2)=10*log10(p3/p4);
% 均方根误差
RMSE=sqrt(mean((Y-x).^2));
% 相关系数
CR=corr(Y,x,'type','Pearson');

参考文献

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

[2]有关小波的几个术语及常见的小波基介绍

[3]小波变换和小波阈值法去噪

[4]基于MATLAB的小波阈值去噪

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149288.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【mysql】explain介绍[通俗易懂]

    【mysql】explain介绍[通俗易懂]【mysql】explain介绍

    2022年4月25日
  • 数据挖掘十大算法——简介

    数据挖掘十大算法——简介1.简介ICDM(国际数据挖掘大会)2006年从18种提名的数据挖掘算法中投票选出了十大算法。这18中提名数据挖掘算法分属10大数据挖掘主题,红色部分即为最终选出的十大算法: 分类(Classification) C4.5 CART KNearestNeighbours NaiveBayes 统计学习(StatisticalLearning) SV…

    2022年6月10日
  • idea配置svn仓库

    idea配置svn仓库IntelliJIDEA使用教程(总目录篇)首先,使用的时候,自己得先在电脑上安装个小乌龟。也就是svn啦。第一步安装小乌龟。如下:具体安装好像没什么具体要求,一路next,就好。如上图箭头所示,在安装TortoiseSVN的时候,默认commandlineclienttools,是不安装的,这里建议勾选上。这个我不确定我当时选没选,不过呢,你给安装上,也是没问题的。把上面的勾选取…

    2022年5月14日
  • kubernetes教程入门_centos7搭建k8s集群

    kubernetes教程入门_centos7搭建k8s集群文章目录第一章 kubernetes简介01 部署方式的演变容器部署的编排问题:解决以上问题的容器编排管理工具:02 k8s简介主要功能:03 k8s组件04 k8s概念第二章 k8s集群环境搭建05 环境规划**集群类型:**安装方式:主机规划:06 环境搭建 主机安装07 环境初始化1.检查centos版本2.主机名解析3.时间同步4.禁用防火墙服务iptables和firewalld5.禁用linux的安全服务selinux6.禁用swap分区7.修改linux内核参数8.配置ipvs功能9.重启系统

    2022年8月11日
  • java的二维数组讲解_javalambda表达式语法

    java的二维数组讲解_javalambda表达式语法1、二维数组概述1、二维数组其实就是一个特殊的一维数组,一维数组中每个元素就是一个一维数组2、三维数组又是一个特殊的二维数组2、二维数组的定义int[][]a=newint[10][10];String[][]b=newString[10][10];3、初始化二维数组//静态初始化int[][]a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};//动态初始化

    2022年10月25日
  • Merge into用法总结

    Merge into用法总结简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。  有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQLServer中的语法如下:  ifexists(select1fromTwhere…

    2022年6月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号