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

小波去噪MATLAB代码「建议收藏」本文基于北京交通大学陈后金教授的课件。我加以整理,若有冒犯还请谅解1利用MATLAB产生分解与重建滤波器组计算滤波器组的函数[Ld,Hd,Lr,Hr]=wfilters(‘wname’)Ld:分解低通滤波器h0[-n];Hd:分解高通滤波器h1[-n];Lr:分解低通滤波器h0[-n];Hr:分解高通滤波器h1[-n];wfname:小波名eg1:计算db2小波的四…

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

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

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程序如下:
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.net/148179.html原文链接:https://javaforall.net

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


相关推荐

  • strtok()函数的使用以及注意事项

    strtok()函数的使用以及注意事项一、函数的简介        函数原型:char*strtok(char*s,char*delim)       功能:作用于字符串s,以delim中的字符为分界符,将s切分成一个个子串;如果,s为空值NULL,则函数保存的指针SAVE_PTR在下一次调用中将作为起始位置。        返回值:分隔符匹配到的第一个子串二、主要内容       1、函数的作用

    2022年7月14日
    22
  • http 301、302、304、400、405、415状态码解释

    http 301、302、304、400、405、415状态码解释http301、302、303、304、400、405、415状态码解释

    2022年6月7日
    36
  • android微信怎么建群,微信怎么建群?微信怎么建群当群主?

    android微信怎么建群,微信怎么建群?微信怎么建群当群主?【科技讯】5月12日消息,微信怎么建群,微信怎么建群当群主?微信怎么建群聊,微信建群第一次多少人?想必这些问题,已经开始成为大家在日常使用微信时经常会遇到的一个问题,今天,科技讯小编就亲自上手,为大家一一解答这些问题。微信已然成为大家日常进行社交的第一工具,虽然同属腾讯旗下产品,但是微信与QQ显然有着明显的用户群体区分,qq仍然活跃着大量的95后甚至00后的年轻人,而在他们看来,微信则是“大人”们…

    2022年5月12日
    50
  • java基础练习题(含答案)[通俗易懂]

    java基础练习题(含答案)[通俗易懂]7、数组操作题一现在有如下一个数组:intoldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5},要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:intnewArr[]={1,3,4,5,6,6,5,4,7,6,7,5}intoldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};intcount=0;for…

    2022年7月7日
    24
  • 数据仓库ods层设计_数据仓库建模的流程有几个

    数据仓库ods层设计_数据仓库建模的流程有几个当我们的数据采集到hdfs层上之后,我们就开开始对数据进行建模以便后来分析,那么我们整体的架构先放在每个建模层级的最前面所以项目1的将行为数据和业务数据导入到hdfs中我们已经完成了,现在需要的是将hdfs的数据通过ODS层数据建模,初步的分析以及改变,那么我们首先介绍下ODS层的作用因为我们的数据刚落到hdfs上,他还只是单纯的数据,并没有能让我们直接操作。所以我们需要将这些数据放入到能够对数据进行操作的框架中,如我们这个项目采取了使用hive的方法。所以我们此次在ODS层需要做到的就是将hdfs

    2022年9月1日
    2
  • php laravel左连接leftJoin多条where语句

    php laravel左连接leftJoin多条where语句

    2021年11月10日
    71

发表回复

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

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