前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小波去噪MATLAB代码「建议收藏」

小波去噪MATLAB代码「建议收藏」

作者头像
全栈程序员站长
发布2022-09-07 11:35:00
3.3K0
发布2022-09-07 11:35:00
举报
文章被收录于专栏:全栈程序员必看

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

本文基于北京交通大学陈后金教授的课件。我加以整理,若有冒犯还请谅解

1利用MATLAB产生分解与重建滤波器组

计算滤波器组的函数[Ld,Hd,Lr,Hr]=wfilters(‘wname’)

Ld:分解低通滤波器h0[-n];

Hd:分解高通滤波器h1[-n];

Lr:分解低通滤波器h0[-n];

Hr:分解高通滤波器h1[-n];

wfname:小波名

eg1:计算db2小波的四个滤波器,并画出其时域波形。

MATLAB程序如下: wn=’db2′; [Ld,Hd,Lr,Hr] = wfilters(wn); k=0:3; subplot(221);stem(k,Ld);

title(‘低通分解滤波器Ld’); subplot(222);stem(k,Lr); title(‘低通重建滤波器Lr’); subplot(223);stem(k,Hd);

title(‘高通分解滤波器Hd’); subplot(224);stem(k,Hd); title(‘高通重建滤波器Hr’);

2利用MATLAB计算小波函数

[phi,psi,t]=wavefun(‘wname’,lter)

wname:小波名

lter:计算过程的迭代次数

phi:尺度函数ϕ(t)

psi:小波函数ψ(t)

t:尺度函数与小波函数的抽样点

eg2:利用MATLAB计算db2小波的尺度函数与小波函数。

MATLAB程序如下:

lter=20;

wname=’db2′;

[s,w,t]=wavefun(wname,lter);

subolot(211);plot(t,s);

title(‘尺度函数’)

subplot(212);plot(t,w);

title(‘小波函数’)

3 利用MATLAB计算一维DWT和IDWT

计算多级DWT和IDWT的函数为wavedec和waverec,其调用格式为

[C,L]=wavedec(x,N,’wname’)

x=waverec(C,L,’wname’)

其中

wname: 小波名; x: 时域信号; N: 小波变换的级数; C = [cAN cDN cDN-1 ••• cD1]; L(1)= cAN的长度, L(2)= cDN的长度, L(N+1)= cD1的长度, L(N+2)= x的长度

3利用部分小波系数重建信号

x=wrcoef(‘type’, C, L, ‘wname’, N) type=’a’ 由第N级近似分量重建信号 type=‘d’ 由第N级细节分量重建信号 wname: 小波名

若 C = [cA3 cD3 cD2 cD1] x=wrcoef(‘a’,C,L, ‘wname’,3) x=IDWT{[cA3 0 0 0]} x=wrcoef(‘a’,C,L, , ‘wname’,2) x=IDWT{[cA3 cD3 0 0] }=IDWT{[cA2 0 0]}

eg3 已知某信号的波形如图所示,试计算其5级小波变换系数, 由第5、3、1级小波近似系数重建的信号。

小波去噪MATLAB代码「建议收藏」
小波去噪MATLAB代码「建议收藏」

MATLAB程序如下: wname=’db1′; dwtmode(‘per’) t=linspace(0,1,1024); x=20*t.^2.*(1-t).^4.*cos(12*pi*t); subplot(511);plot(t,x); axis([0 1 -0.5 0.5]);title(‘Signal’);

[C,L] = wavedec(x,5,wname); subplot(512);plot(t,C); axis([0 1 -3 3]);

A5=wrcoef(‘a’,C,L,wname,5); subplot(513);plot(t,A5); axis([0 1 -0.5 0.5]); A3=wrcoef(‘a’,C,L,wname,3); subplot(514);plot(t,A3); axis([0 1 -0.5 0.5]);

A1=wrcoef(‘a’,C,L,wname,1); subplot(515);plot(t,A1); axis([0 1 -0.5 0.5]);

4基于小波的信号去噪

XD = wden(X, TPTR, SORH, SCAL, N, ‘wname’) 其中: XD: 对噪声信号X去噪后得到的信号; X: 含噪声信号; TPTR: 阈值规则,主要有’rigrsure’, ‘heursure’, ‘sqtwolog’, ‘minimaxi’; SORH: 阈值方法, ‘s’ (soft阈值), ‘h’ (hard阈值); SCAL: 阈值尺度的调整方法,主要有’one’, ‘ sln’, ‘ mln’ ; N: 离散小波变换的级数 wname: 小波名

eg4 试利用函数wden对含有噪声的blocks信号进行去噪。

MATLAB程序如下: snr=5; % 噪声方差 [x, xn] = wnoise(‘blocks’,11,snr); k=0:length(x)-1; subplot(311);plot(k,x); title(‘原信号’); subplot(312);plot(k,xn); title(‘含噪信号’); lev=5;wn=’db1′; % 利用soft SURE阈值规则去噪 xd1= wden(xn, ‘heursure’, ‘s’, ‘one’, lev, wn); subplot(313);plot(k,xd1); title(‘去噪后的结果’);

5基于小波的信号压缩

NC= wthcoef(‘d’, C, L, N) 其中: ‘d’: 表示对DWT系数C中细节(detail)分量进行压缩; C,L: 由wavedec得到的DWT系数; N: 若N=[1 2 3]表示将C中1、2和3级细节分量置零。 NC: 由系数C经过压缩后得到的新系数;

eg5试利用函数wthcoef对leleccum信号进行压缩。

MATLAB程序如下: load leleccum; x = leleccum(1001:2024)*0.95/100; k=0:length(x)-1; [C,L] = wavedec(x,5,’db3′); NC1 = wthcoef(‘d’,C,L,[1]); x1 = waverec(NC1, L, ‘db3’); NC5 = wthcoef(‘d’,C,L,[1 2 3 4 5]) ; x2 = waverec(NC5, L, ‘db3’); subplot(311);plot(k,x);title(‘原信号’); subplot(312);plot(k,x1);title(‘2:1压缩’); subplot(313);plot(k,x2);title(’32:1压缩’);

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文基于北京交通大学陈后金教授的课件。我加以整理,若有冒犯还请谅解
  • 1利用MATLAB产生分解与重建滤波器组
  • 2利用MATLAB计算小波函数
  • 3利用部分小波系数重建信号
  • 4基于小波的信号去噪
  • 5基于小波的信号压缩
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档