小波分析、小波降噪matlab代码实现

软阈值、硬阈值、固定阈值三种方式

1. 简介

所谓的小波就是指微小的具有波动性的波形,从信号学角度来看,是一个信号滤波的过程。目前,小波去噪已然是一种喜闻乐见的噪声处理方式。
本文使用matlab进行小波降噪,采用软阈值、硬阈值、和固定阈值三种方式,对一维噪声数据进行降噪处理,并输出误差SNR,RMSE,以及降噪前后的噪声图像 。

2. 操作步骤

主要有三个步骤

  1. 对被噪声污染的信号进行小波变换处理;
  2. 通过对变换后的小波系数进行处理,去除其中的噪声
  3. 小波逆变换,得到去噪后的信号

3. 直接上代码

%%初始化程序
clear,clc
t1=clock;
 %% 载入噪声信号数据,数据为.mat格式,并且和程序放置在同一个文件夹下
load('filename.mat');%matrix
YSJ= filename;
 %% 数据预处理,数据可能是存储在矩阵或者是EXCEL中的二维数据,衔接为一维的,如果数据是一维数据,此步骤也不会影响数据
[c,l]=size(YSJ);
Y=[];
for i=1:c
    Y=[Y,YSJ(i,:)];
end
[c1,l1]=size(Y);
X=[1:l1];
 %% 绘制噪声信号图像
figure(1);
plot(X,Y);
xlabel('横坐标');
ylabel('纵坐标');
title('原始信号');
 %% 硬阈值处理
lev=3;
xd=wden(Y,'heursure','h','one',lev,'db4');%硬阈值去噪处理后的信号序列
figure(2)
plot(X,xd)
xlabel('横坐标');
ylabel('纵坐标');
title('硬阈值去噪处理')
set(gcf,'Color',[1 1 1])
 %% 软阈值处理
lev=3;
xs=wden(Y,'heursure','s','one',lev,'db4');%软阈值去噪处理后的信号序列
figure(3)
plot(X,xs)
xlabel('横坐标');
ylabel('纵坐标');
title('软阈值去噪处理')
set(gcf,'Color',[1 1 1])
%% 固定阈值后的去噪处理
lev=3;
xz=wden(Y,'sqtwolog','s','sln',lev,'db4');%固定阈值去噪处理后的信号序列
figure(4)
plot(X,xz);
xlabel('横坐标');
ylabel('纵坐标');
title('固定阈值后的去噪处理')
set(gcf,'Color',[1 1 1])
%% 计算信噪比SNR
Psig=sum(Y*Y')/l1;
Pnoi1=sum((Y-xd)*(Y-xd)')/l1;
Pnoi2=sum((Y-xs)*(Y-xs)')/l1;
Pnoi3=sum((Y-xz)*(Y-xz)')/l1;
SNR1=10*log10(Psig/Pnoi1);
SNR2=10*log10(Psig/Pnoi2);
SNR3=10*log10(Psig/Pnoi3);
%% 计算均方根误差RMSE
RMSE1=sqrt(Pnoi1);
RMSE2=sqrt(Pnoi2);
RMSE3=sqrt(Pnoi3);
%% 输出结果
disp('-------------三种阈值设定方式的降噪处理结果---------------'); 
disp(['硬阈值去噪处理的SNR=',num2str(SNR1),',RMSE=',num2str(RMSE1)]);
disp(['软阈值去噪处理的SNR=',num2str(SNR2),',RMSE=',num2str(RMSE2)]);
disp(['固定阈值后的去噪处理SNR=',num2str(SNR3),',RMSE=',num2str(RMSE3)]);
t2=clock;
tim=etime(t2,t1);
disp(['------------------运行耗时',num2str(tim),'秒-------------------'])

4. 运行结果显示

1. 噪声信号图像

在这里插入图片描述

2. 硬阈值去噪图像

在这里插入图片描述

3. 软阈值去噪图像

在这里插入图片描述

4. 固定阈值去噪图像

在这里插入图片描述

5. 去噪结果的误差对比

在这里插入图片描述
由于本人能力有限,欢迎大家指出不足之处,我将尽力完善代码

  • 128
    点赞
  • 992
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 115
    评论
以下是一个示例的Matlab代码,用于小波降噪: ```matlab % 输入信号 signal = your_signal; % 小波分解级数 level = your_decomposition_level; % 小波类型 wavelet_type = 'sym4'; % 噪声估计方法 noise_estimation_method = 'mln'; % 阈值选择规则 threshold_selection_rule = 'sqtwolog'; % 阈值 threshold = your_threshold; % 保留系数数目 keep_coefficients = your_number_of_coefficients_to_keep; % 进行小波去噪 = wdencmp('gbl',signal,wavelet_type,level,threshold,threshold_selection_rule,keep_coefficients); ``` 请注意,你需要将`your_signal`替换为你的输入信号,`your_decomposition_level`替换为你希望进行的小波分解级数,`your_threshold`替换为你选择的阈值,`your_number_of_coefficients_to_keep`替换为你希望保留的系数数目。 这段代码使用了Matlab中的`wdencmp`函数,其中`'gbl'`表示使用全局阈值,`wavelet_type`表示所选择的小波类型,`noise_estimation_method`表示噪声估计方法,`threshold_selection_rule`表示阈值选择规则。 最后,`denoised_signal`即为经过小波降噪后的信号。<span class="em">1</span> #### 引用[.reference_title] - *1* [matlab小波去噪的详细使用方法](https://blog.csdn.net/weixin_39302449/article/details/130053655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 115
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank,Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值