文章目录

  • 一、问题描述
  • 二、代码
    • 问题1:原始信号加6分贝高斯白噪声
    • 问题2:确定合适的小波基函数
    • 问题3:确定最合适的阈值计算估计方法
    • 问题4:确定合适的分解层数
    • 问题5:实际信号去噪
    • 问题6:对比
  • 三、演示视频
  • 最后

一、问题描述

1.利用MATLAB绘制原始信号,对其加6分贝高斯白噪声;
2.以Minimaxi阈值法,软阈值函数,3层分解层数,分别用dbN和symN小波对加噪信号去噪,获得分解图和去噪后的图,并用信噪比和均方根误差作为评判标准,确定合适的小波基函数;
3.用第2步确定的小波基函数,软阈值函数,分解层数为3层,对无偏估计阈值(RigrSure)、固定式阈值(Sqtwolog)、启发式阈值(HeurSure)和极大极小阈值(Minimaxi)四种分别去噪,获得去噪后的图,并用信噪比和均方根误差作为评判标准,确定最合适的阈值计算估计方法;
4.用第2步确定的小波基函数,第3步确定的阈值计算估计准则,分别用分解层数为1,2,3,4,5,6对加噪信号进行去噪,获得去噪后得到图,并用信噪比和均方根误差作为评判标准;
5.用实际的信号加6分贝噪声对前面确定的小波基函数,阈值计算方法以及分解层数用小波阈值进行去噪,并求信噪比和均方根误差。
6、确定好小波基函数、阈值函数和分解层数后,分别模拟加入不同量的噪声与4阶巴特沃斯低通滤波器滤波对比

二、代码

问题1:原始信号加6分贝高斯白噪声

代码如下(示例):

clear
clc
close all
%% MATLAB绘制原始信号
load('data.mat'); %私聊发数据
data=data;
%%6分贝高斯白噪声
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
figure;
subplot(211)
plot(data);ylabel('P/MPa');title('原始信号')
subplot(212)
plot(s);ylabel('P/MPa');title('加6dB高斯白噪声')

问题2:确定合适的小波基函数

代码如下(示例):

clear
clc
close all
%% MATLAB绘制原始信号
load('data.mat');
data=data;
%%6分贝高斯白噪声
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% Minimaxi阈值法,软阈值函数,3层分解层数,db5去噪
wname=strvcat('sym4','sym5','db4','db5');
for i=1:4[C,L] = wavedec(s,3,wname(i,:));  %进行3层小波包分解s1=wden(s,'minimaxi','s','mln',3,wname(i,:)); %Minimaxi、软阈值,3层,db5figure;subplot(311)plot(data);xlabel('t/ms');ylabel('P/MPa');title('原始信号')subplot(312)plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪声')subplot(313)plot(s1);xlabel('t/ms');ylabel('P/MPa');title(['Minimaxi-软阈值-3层-',wname(i,:)])figuresubplot(511)plot(data,'r');ylabel('s');title([wname(i,:),'小波分解图'])set(gca,'ytick',[]) set(gca,'xtick',[]) subplot(512)plot(C(1:L(2)),'b');ylabel('a3')set(gca,'ytick',[]) set(gca,'xtick',[]) subplot(513)plot(C(L(2):L(3)));ylabel('d3')set(gca,'ytick',[]) set(gca,'xtick',[]) subplot(514)plot(C(L(3):L(4)));ylabel('d2')set(gca,'ytick',[]) set(gca,'xtick',[]) subplot(515)plot(C(L(4):L(5)));ylabel('d1')SNR_s1(i)=snr(data,s1-data);RMSE_s1(i)=sqrt(mse(data-s1));   SNR_s11(i)=snr(s,s1-s);disp(['Minimaxi-软阈值-3层-',wname(i,:),':信噪比=',num2str(SNR_s1(i)),'dB,均方根误差=',num2str(RMSE_s1(i))])disp(['加噪后信噪比=',num2str(SNR_s11(i)),'dB'])disp('-----------------------------------------------------------')
end
%% 根据SNR选取较好的小波基函数
[m,index]=max(SNR_s1);
disp(['最合适的阈值计算估计方法为:',wname(index,:)])
disp('-----------------------------------------------------------')

问题3:确定最合适的阈值计算估计方法

代码如下(示例):

clear
clc
close all
%% MATLAB绘制原始信号
load('data.mat');
data=data;
%%6分贝高斯白噪声
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% main2已经确定最合适的小波基函数
wname='sym5';
%% 无偏估计阈值(RigrSure)、固定式阈值(Sqtwolog)、启发式阈值(HeurSure)和极大极小阈值(Minimaxi)
TPTR=['rigrsure';'sqtwolog';'heursure';'minimaxi'];
for i=1:4s3=wden(s,TPTR(i,:),'s','mln',3,wname); %依次进行滤波figuresubplot(311)plot(data);xlabel('t/ms');ylabel('P/MPa');title('原始信号')subplot(312)plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪声')subplot(313)plot(s3);xlabel('t/ms');ylabel('P/MPa');title(['采用',TPTR(i,:),'进行滤波'])snr_s3(i)=snr(data,s3-data);RMSE_s3(i)=sqrt(mse(data-s3));snr_s33(i)=snr(s,s3-s);disp([TPTR(i,:),'-软阈值-3层-',wname,':信噪比=',num2str(snr_s3(i)),'dB,均方根误差=',num2str(RMSE_s3(i))])disp(['加噪后信噪比=',num2str(snr_s33(i)),'dB'])disp('-----------------------------------------------------------')
end
%% 根据SNR选取较好的阈值计算估计方法
[m,index]=max(snr_s3);
disp(['最合适的阈值计算估计方法为:',TPTR(index,:)])
disp('-----------------------------------------------------------')

问题4:确定合适的分解层数

代码如下(示例):

clear
clc
close all
%% MATLAB绘制原始信号
load('data.mat');
data=data;
%%6分贝高斯白噪声
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% main2和main3确定的小波基函数和阈值计算估计方法
wname='sym5';
TPTR='sqtwolog';
%% 分解层数为123456
for i=1:6s4=wden(s,TPTR,'s','mln',i,wname); %依次进行滤波figuresubplot(311)plot(data);xlabel('t/ms');ylabel('P/MPa');title('原始信号')subplot(312)plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪声')subplot(313)plot(s4);xlabel('t/ms');ylabel('P/MPa');title(['分解层数=',num2str(i)])snr_s4(i)=snr(data,s4-data);RMSE_s4(i)=sqrt(mse(data-s4));snr_s44(i)=snr(s,s4-s);disp([TPTR,'-软阈值-',num2str(i),'层-',wname,':信噪比=',num2str(snr_s4(i)),'dB,均方根误差=',num2str(RMSE_s4(i))])disp(['加噪后信噪比=',num2str(snr_s44(i)),'dB'])disp('-----------------------------------------------------------')
end
%% 根据SNR选取较好的分解层数
[m,index]=max(snr_s4);
disp(['最合适的分解层数为:',num2str(index)])
disp('-----------------------------------------------------------')

问题5:实际信号去噪

代码如下(示例):

clear
clc
close all
%% 读取实际的信号
data=xlsread('14#c1.csv');
data=data(:,2);
%%6分贝高斯白噪声
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% 根据(2)(3)(4)确定参数
wname='sym5';
TPTR='sqtwolog';
lev=6;
%% 进行滤波
s5=wden(s,TPTR,'s','mln',lev,wname); %进行滤波
%% 绘制
figure;
subplot(311)
plot(data);xlabel('t/ms');ylabel('P/MPa');title('实际信号')
subplot(312)
plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪声')
subplot(313)
plot(s5);xlabel('t/ms');ylabel('P/MPa');title('信号去噪')
snr_s55=snr(s,s5-s);
snr_s5=snr(data,s5-data);RMSE_s5=sqrt(mse(data-s5));
disp([TPTR,'-软阈值-',num2str(lev),'层-',wname,':信噪比=',num2str(snr_s5),'dB,均方根误差=',num2str(RMSE_s5)])
disp(['加噪后信噪比=',num2str(snr_s55),'dB'])

问题6:对比

代码如下(示例):

clear
clc
close all
%% 读取实际的信号
data=xlsread('14#c1.csv');
data=data(:,2);
fs=125000;
%%
wname='sym5';
TPTR='sqtwolog';
lev=6;
%% 设计4阶巴特沃斯低通滤波器
fc=10000;
n=4;  %阶数
[b,a]=butter(n,fc/(fs/2), 'low');
%%1-16分贝高斯白噪声
for SNR=1:16 %6dBnoise=0.2*randn(size(data))*std(data)/db2mag(SNR);s=data+noise;s1=filter(b,a,s);  %filter既能进行IIR滤波又能进行FIR滤波s2=wden(s,TPTR,'s','mln',lev,wname); %进行滤波snr_s1(SNR)=snr(data,s1-data);RMSE_s1(SNR)=sqrt(mse(data-s1));snr_s2(SNR)=snr(data,s2-data);RMSE_s2(SNR)=sqrt(mse(data-s2));
end
figure;
plot(1:16,snr_s1,'o-r');
hold on
plot(1:16,snr_s2,'*-b');
xlabel('高斯白噪声dB');ylabel('SNR')
legend('FIR滤波','小波滤波')
title('信噪比曲线')
%%
for SNR=2:2:10 %6dBnoise=0.2*randn(size(data))*std(data)/db2mag(SNR);s=data+noise;s1=filter(b,a,s);  %filter既能进行IIR滤波又能进行FIR滤波s2=wden(s,TPTR,'s','mln',lev,wname); %进行滤波figure;subplot(411)plot(data);xlabel('t/ms');ylabel('P/MPa');title('实际信号')subplot(412)plot(s);xlabel('t/ms');ylabel('P/MPa');title('加16dB高斯白噪声')subplot(413)plot(s1);xlabel('t/ms');ylabel('P/MPa');title('FIR信号去噪')subplot(414)plot(s1);xlabel('t/ms');ylabel('P/MPa');title('小波信号去噪')suptitle(['噪声大小=',num2str(SNR),'dB'])
end

三、演示视频

基于wden函数的去噪演示

最后

不定期发布一些matlab设计内容,敬请期待。包括但不限于如下内容:信号处理、通信仿真、gui设计、matlab appdesigner,simulink仿真。有任何有关MATLAB的问题可以关注公众号MatpyMaster加小英雄学长欧~

Matlab小波去噪——基于wden函数的去噪分析相关推荐

  1. matlab 小波滤波器系数导出函数,小波基函数和滤波系数.ppt

    小波基函数和滤波系数 小波分析及其应用 Wavelet Analysis andIt's Applications同济大学 计算机系宣国荣 2003年 6月10日 研究生讲座(2009年11月10日 ...

  2. 【数字信号去噪】基于matlab小波阙值数字信号去噪和求信噪比【含Matlab源码 2191期】

    ⛄一.小波阈值法去噪概述 电能质量扰动信号的噪声大多以高斯白噪声的形式存在,利用小波变换对信号进行多分辨率分解,由于小波变换具有去除数据相关性的特点,故可以将有用信号与噪声的能量分离开来.信号中有效的 ...

  3. 【心电信号】基于matlab小波阙值心电信号去噪【含Matlab源码 2188期】

    ⛄一.小波阈值法去噪概述 电能质量扰动信号的噪声大多以高斯白噪声的形式存在,利用小波变换对信号进行多分辨率分解,由于小波变换具有去除数据相关性的特点,故可以将有用信号与噪声的能量分离开来.信号中有效的 ...

  4. 【语音去噪】基于matlab小波硬阈值语音降噪【含Matlab源码 532期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[语音去噪]基于matlab小波硬阈值语音降噪[含Matlab源码 532期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  5. 正交db小波 图像处理 matlab,基于matlab小波工具箱的数字图像处理及小波分析

    基于matlab小波工具箱的数字图像处理及小波分析 基于 Matlab 小波工具箱的数字图像处理摘要:小波分析在图像处理中有非常重要的应用,包括图像压缩.去噪.分解和增强等.运用多分辨率分析可以将信号 ...

  6. 【图像去噪】基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含Matlab源码 462期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪[含Matlab源码 462期] 获取代码方式2: 通过订阅紫极神光 ...

  7. Matlab小波工具箱的使用2

    Matlab小波工具箱的使用2 (2011-11-11 09:32:57) 转载▼ http://blog.sina.com.cn/s/blog_6163bdeb0102dw7a.html#cmt_5 ...

  8. bp神经网络mallat小波matlab,小波神经网络原理及其应用汇总.ppt

    小波神经网络原理及其应用汇总,小波神经网络原理,小波变换原理与应用,神经网络的原理及应用,小波神经网络matlab,小波神经网络预测代码,小波神经网络模型,小波神经网络预测程序,小波神经网络预测,小波 ...

  9. 利用matlab小波GUI工具箱对空挡噪声进行滤波

    利用matlab小波GUI工具箱对空挡噪声进行滤波: 1.命令wavemenu调出matlab小波GUI工具箱, 2.File->load加载噪声音频文件,wavelet 1-D,选择小波函数, ...

最新文章

  1. QIIME 2教程. 28社区Community(2020.11)
  2. [ An Ac a Day ^_^ ] hdu 5835 Danganronpa 令人发指
  3. 默认轮播,鼠标移入停止,移出继续
  4. Surf特征提取分析
  5. 计算机网络之网络概述:6、TCP/IP模型和5层参考模型
  6. java innodb存储引擎_MySQL InnoDB存储引擎的事务隔离级别
  7. ASP.NET MVC动态二级域名及DNS(泛解析配置)
  8. 64位CentOS源码编译方式安装wine
  9. 斗战神 刷图电罗刹攻略
  10. setactive隐藏之后无法显示_U盘里面有文件但是看不见无法显示文件的解决方法...
  11. 用 keepalived 搭建高可用集群之 IP Failover
  12. ASP.NET Web API 安全验证之摘要(Digest)认证
  13. Hadoop Snappy安装终极教程
  14. caffe教程笔记《Blobs, Layers, and Nets》
  15. 【FPGA】ds18b20温度传感器
  16. php代码的网页框架,easyweb: easyweb是一个简单易用的php框架,实现了路由、容错等处理,集成composer代码生态,可快速创建中小型网站应用...
  17. Flash 第九章 运动补间动画
  18. 在线安装rancher2.4管理K8S集群并部署服务
  19. 给定出生年月日及现在年月日,计算天数
  20. 达梦数据库忘记SYSDBA密码的问题探讨

热门文章

  1. 金种子集团搭建TurboGate反垃圾邮件网关
  2. 百度编辑器Ueditor上传控件相关问题解决
  3. 在腾迅云申请免费型DV版SSL证书让自己的网站启用https
  4. SSL证书(HTTPS)的加密算法
  5. 三菱模块增益和偏置调整步骤_三菱A系列PLC模拟量模块的偏置和增益应用
  6. 一图缕清 mysql 事务锁
  7. matlab用进退法写程序,进退法matlab程序
  8. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》工作总结(二)
  9. 如何将eps文件转换为原visio文件
  10. 51单片机~运放控制声控电路,运算放大器(各模式精细详解),NE555时基电路芯片分析