声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 9169|回复: 29

[小波] [转帖]小波变换的模极大值重建信号源程序

[复制链接]
发表于 2005-12-6 09:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
这是用小波变换模极大值重建信号的源程序,数据是一心电信号,在matlab6。5下实现,来源于胡广书的《现代信号处理教程》附属光盘,现提供给大家供大家学习参考,滤波部分可以根据个人情况进行修改。程序包含四个部份,其中wave_peak实现信号的分解并求出模极大值<BR><BR>%--------------------------------------------------------------------------<BR>% exa130301.m 例13.3.1: 利用小波变换模极大重建原信号<BR>%--------------------------------------------------------------------------<BR>close all;<BR>points=1024; level=6; sr=360; num_inter=6; wf='db3';<BR>%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称<BR><BR>offset=0;<BR>[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);<BR><BR>%计算小波分解系数和模极大序列<BR>[signal,swa,swd,ddw,wpeak]=wave_peak(points,level,Lo_D,Hi_D,Lo_R,Hi_R,offset);<BR>% signal: 原始信号; swa:小波概貌; swd:小波细节;<BR>% ddw: 局部极大位置; wpeak:小波变换的局部极大序列]<BR><BR>pswa=swa(level,: ); % pswa: 为待重建的信号<BR>wframe=(wpeak~=0);<BR>%迭代初始化<BR>w0=zeros(1,points);<BR>[a,d]=swt(w0,level,Lo_D,Hi_D);<BR>w2=d; % w2为待重建小波<BR>for j=1:num_inter<BR>w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影<BR>w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影<BR>[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv<BR>end<BR>pswa=iswt(swa(level,: ),w2,Lo_R,Hi_R); % 计算重建信号<BR><BR>% 原信号和由模极大重建信号的比较<BR>figure,<BR>subplot(211)<BR>plot(pswa(1:points)); <BR>subplot(212)<BR>plot(signal(1:points),'r');<BR><BR>%分别计算重建小波以及原信号的信噪比<BR>werr=w2-swd;<BR>% 原信号的小波变换(swd)和重建后的小波变换(w2)的比较<BR>figure,<BR>for m=1:level<BR>wsnr(m)=20*log10(norm(swd(m,: ))/norm(werr(m,: )))<BR>subplot(level+1,1,m);<BR>plot(swd(m,: )),hold on,<BR>plot(w2(m,: ),'r');grid on;ylabel(strcat('j=',num2str(m))),axis tight;<BR>end<BR>err=pswa(1:points)-signal(1:points);<BR>snr=20*log10(norm(signal)/norm(err)) <BR><BR>
回复
分享到:

使用道具 举报

 楼主| 发表于 2005-12-6 09:42 | 显示全部楼层

回复:(wsi)[转帖]小波变换的模极大值重建信号源程序...

function [signal,swa,swd,ddw,wpeak]=wave_peak(points,level,Lo_D,Hi_D,Lo_R,Hi_R,offset)<BR>% 该函数用于读取ecg信号,找到小波变换模极大序列<BR><BR>warning off;<BR>ecgdata=load('ecg.txt' );<BR>plot(ecgdata(1:points)),grid on,axis tight,axis([1,points,-50,300]);<BR>signal=ecgdata(1:points)'+offset;<BR><BR>% 信号的小波变换,按级给出概貌和细节的波形<BR>[swa,swd] = swt(signal,level,Lo_D,Hi_D);<BR>figure;<BR>subplot(level,1,1); plot(real(signal)); grid on;axis tight;<BR>for i=1:level<BR>subplot(level+1,2,2*(i)+1);<BR>plot(swa(i,: )); axis tight;grid on;xlabel('time');<BR>ylabel(strcat('a ',num2str(i)));<BR>subplot(level+1,2,2*(i)+2);<BR>plot(swd(i,: )); axis tight;grid on;<BR>ylabel(strcat('d ',num2str(i)));<BR>end<BR><BR>%求小波变换的模极大值及其位置<BR>ddw=zeros(size(swd));<BR>pddw=ddw;<BR>nddw=ddw;<BR>posw=swd.*(swd&gt;0);<BR>pdw=((posw(:,1:points-1)-posw(:,2:points))&lt;0);<BR>pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))&gt;0);<BR>negw=swd.*(swd&lt;0);<BR>ndw=((negw(:,1:points-1)-negw(:,2:points))&gt;0);<BR>nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))&gt;0);<BR>ddw=pddw|nddw;<BR>ddw(:,1)=1;<BR>ddw(:,points)=1;<BR>wpeak=ddw.*swd;<BR>wpeak(:,1)=wpeak(:,1)+1e-10;<BR>wpeak(:,points)=wpeak(:,points)+1e-10;<BR><BR>%按级给出小波变换模极大的波形<BR>figure;<BR>for i=1:level<BR>subplot(level,1,i);<BR>plot(wpeak(i,: )); axis tight;grid on;<BR>ylabel(strcat('j= ',num2str(i)));<BR>end <BR>

评分

1

查看全部评分

发表于 2006-3-25 17:04 | 显示全部楼层
<P>thanks </P>

[em04]
发表于 2006-3-30 10:42 | 显示全部楼层
太好了,一直在找相关的东东
发表于 2006-6-11 15:58 | 显示全部楼层
谢谢谢谢
发表于 2006-6-11 17:18 | 显示全部楼层
bu不错
发表于 2006-10-13 18:54 | 显示全部楼层
想把这个程序做到LABVIEW里面去,但是不知道该怎样处理那两个子函数

谁能指点下    不胜感激
发表于 2006-10-17 10:17 | 显示全部楼层
搂主你好,我现在用到二次样条小波变换及变换后极大,极小值的位置提取,可否介绍一下在那能找到源代码,请联系,谢谢。信箱:PSZ10@126.COM
发表于 2006-10-20 11:15 | 显示全部楼层

LZ没发原信号数据文件,我补上

LZ没发原信号数据文件,我补上。

ecg.txt

46.88 KB, 下载次数: 302

ECG.TXT

发表于 2006-11-12 09:51 | 显示全部楼层
谢谢提供,小波变换的模极大值重建信号源程序...
发表于 2006-11-13 21:36 | 显示全部楼层
这个例子很有代表性吧
支持一下
发表于 2006-11-16 15:02 | 显示全部楼层
呵呵  你发的这些代码还是很适用的,挺有代表性,要好好模仿下
发表于 2007-4-11 10:15 | 显示全部楼层
但是这个例子有没有滤波的部分呢?
发表于 2007-4-11 10:15 | 显示全部楼层
是不是通过模极大算法滤波的呢?
发表于 2007-5-8 11:11 | 显示全部楼层

回复 #2 AaronSpark 的帖子

好东西,支持LZ:@)
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-28 03:03 , Processed in 0.255552 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表