0
点赞
收藏
分享

微信扫一扫

【代码补全】matlab心电信号R波提取

未定义变量 2022-02-10 阅读 110
matlab

        对Matlab心电信号QRS波检测中代码的补充,使其完整可用。

        补充内容来自基于matlab的心电信号QRS波检测与分析。

x=iswt(swa,swd,'db3');
%——心电信号去噪完成后——
yabs=abs(x); 
sigtemp=x;
siglen=length(x);
sigmax=[];
for i=1:siglen-2
    if (x(i+1)>x(i)&x(i+1)>x(i+2))|(x(i+1)<x(i)&x(i+1)<x(i+2))
        sigmax=[sigmax;abs(sigtemp(i+1)),i+1];
    end
end
thrtemp=sort(sigmax);
thrlen=length(sigmax);
thr=0;
for i=(thrlen-7):thrlen
    thr=thr+thrtemp(i);
end
thrmax=thr/8;               %最大幅度平均值,8个最大幅值点的平均值
 
zerotemp=sort(x);
zerovalue=0;
for i=1:100
    zerovalue=zerovalue+zerotemp(i);
end
zerovalue=zerovalue/100;    %最小幅度平均值,对消幅度,100个最小幅值点的平均值
thr=(thrmax-zerovalue)*0.3; %最大、最小幅度的差值的30%为判别R波的阈值                      
 
%定位R波
rvalue=[];
for i=1:thrlen
    if sigmax(i,1)>thr
        rvalue=[rvalue;sigmax(i,2)];
    end
end
rvalue_1=rvalue;

%排除误检,如果相邻两个极大值间距小于0.4s,则去掉幅度较小的一个
lenvalue=length(rvalue);
i=2;
while i<=lenvalue
      if (rvalue(i)-rvalue(i-1))*(1/800)<0.4
          if yabs(rvalue(i))>yabs(rvalue(i-1))
              rvalue(i-1)=[];
          else
              rvalue(i)=[];
          end
 
          lenvalue=length(rvalue);
          i=i-1;
      end
      i=i+1;
end      

lenvalue=length(rvalue);
% 在原信号上精确校准
for i=1:lenvalue
    if (x(rvalue(i))>0)
        k=(rvalue(i)-5):(rvalue(i)+5);
         [a,b]=max(x(k));
        rvalue(i)=rvalue(i)-6+b; 
    else
        k=(rvalue(i)-5):(rvalue(i)+5);
        [a,b]=min(x(k));
        rvalue(i)=rvalue(i)-6+b; 
    end
end

plot(x);
hold on;
plot(rvalue,x(rvalue),'r^');

 

举报

相关推荐

0 条评论