happy 发表于 2006-11-23 16:37

小波变换模极大序列

function =wave_peak(points,level,Lo_D,Hi_D,Lo_R,Hi_R,offset)
% 该函数用于读取ecg信号,找到小波变换模极大序列

warning off;
ecgdata=load('ecg.txt');
plot(ecgdata(1:points)),grid on,axis tight,axis();
signal=ecgdata(1:points)'+offset;

%信号的小波变换,按级给出概貌和细节的波形
= swt(signal,level,Lo_D,Hi_D);
figure;
subplot(level,1,1); plot(real(signal)); grid on;axis tight;
for i=1:level
    subplot(level+1,2,2*(i)+1);
    plot(swa(i,:)); axis tight;grid on;xlabel('time');
    ylabel(strcat('a   ',num2str(i)));
    subplot(level+1,2,2*(i)+2);
    plot(swd(i,:)); axis tight;grid on;
ylabel(strcat('d   ',num2str(i)));
end

%求小波变换的模极大值及其位置
ddw=zeros(size(swd));
pddw=ddw;
nddw=ddw;
posw=swd.*(swd>0);
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
negw=swd.*(swd<0);
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
ddw=pddw|nddw;
ddw(:,1)=1;
ddw(:,points)=1;
wpeak=ddw.*swd;
wpeak(:,1)=wpeak(:,1)+1e-10;
wpeak(:,points)=wpeak(:,points)+1e-10;

%按级给出小波变换模极大的波形
figure;
for i=1:level
    subplot(level,1,i);
    plot(wpeak(i,:)); axis tight;grid on;
ylabel(strcat('j=   ',num2str(i)));
end

weixiaocike 发表于 2006-11-23 20:57

pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
这句作用是什么?可以解释一下吗?

lsq001 发表于 2006-11-24 20:46

这个程序很经典了
值得一看
还要劳烦楼主加以详注啊

别的地方也常这样

suffer 发表于 2006-11-25 10:45

原帖由 weixiaocike 于 2006-11-23 20:57 发表
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
这句作用是什么?可以解释一下吗?


当(pdw(i,1:points-2)-pdw(i,2:points-1))>0时
其对应位置pddw(i,2:points-1)为1
反之为0

tonghuayuxing 发表于 2009-9-16 18:52

回复 楼主 happy 的帖子

请问程序运行时出错,显示说没有定义函数 'wave_peak'.,应该怎么办?麻烦解释下

ChaChing 发表于 2009-9-16 23:04

回复 5楼 tonghuayuxing 的帖子

路径没定义好!
help path

tonghuayuxing 发表于 2009-9-18 15:01

回复 5楼 tonghuayuxing 的帖子

谢谢你的回答

zmmzmm 发表于 2011-3-1 19:46

请楼主对程序做一下详尽一点的注释吧,不胜感激,这程序非常经典,可惜我不清楚到底是根据什么原理,请楼主不吝指教
页: [1]
查看完整版本: 小波变换模极大序列