心电信号求qrs点坐标

算法思路:

这是2020年江苏省电赛A题的一部分设计要求,计算ADS1292模块传出的心电信号值,找到QRS坐标,ADS1292是一个24位高精度的ADC,通过两路的差分放大接收激励引脚产生的电压变化(心电信号的变化)。

ECG信号为准周期信号,R为一个波段的最大值,Q为R前的最小值,S为整个波段最小值(R后最小值),信号建议使用SG滤波,可以保留信号变化的一种类似于最小二乘法的滤波,然后对数组取差值,前后差值最大的点为R,R前差值为正,直到Q点,R后插值为负,直到S点。


代码:

提示:这是对一组250个采样点,分区间找最大值,判断组内有效心电信号波段个数,计算相应QRS坐标的简易算法,用的一组处理后的心电数据txt里的。

#include <stdio.h>
#include <math.h>
int main(void)
{
    int i,j,max_piont[6]={0},min1_piont[6]={0},min2_piont[6]={0},sz[461],max[6]={0},min1[6]={0},min2[6]={0};
    int len = 85;//real = 85 , org = 461(460)
    int base = 500;//651:b,1563:c   ,, real = 0
    int a[85]={0};
    int max_buf[5] = {0};
    int max_buf_val[5] = {0};
    int box[250] ={0};
    int box_len = 250;
    int window = 50;
    int window_cnt =0;
    int max_temp=0;
    int temp;
    int ture=0;
    float xinglv=0,  time = 0.004 ,xinglv_jiange1=0,xinglv_jiange2=0;//time要按采样时间算
//从TXT中读250个数字
    FILE *fpRead=fopen("box2.txt","r");//b,c ,,  real = real_1
    if(fpRead==NULL)
    {
        return 0;
    }
    for(i=0;i<box_len;i++)
    {
        fscanf(fpRead,"%d ",&box[i]);
        //printf("%d ",a[i]);
    }
//把250分成5个区间,取最大值
    for(i=0;i<5;i++)
    {
        max_temp = 0;
        for(j = i*window;j < i*window+window;j++)
        {
        max_temp=(max_temp>box[j])?max_temp:box[j];
        if(max_temp==box[j]) 
            {
            max_buf[i]=j;
            max_buf_val[i]=box[j];
            }
        }
        
        window_cnt = window_cnt + 1;
    }
//排序    
    for(i=0;i<5;i++)
    {
        for(j=i+1;j<5;j++)
        {
            if(max_buf_val[i]<max_buf_val[j])
            {
            temp=max_buf_val[i];
            max_buf_val[i]=max_buf_val[j];
            max_buf_val[j]=temp;
            temp=0;
            temp=max_buf[i];
            max_buf[i]=max_buf[j];
            max_buf[j]=temp;
            }
        }
    }
    

    for(i=0;i<5;i++)//计算有效的波峰
    {
        if(max_buf_val[i]>max_buf_val[0]-5) ture++;
    }
//取前有效个,算qs
    for(i=0;i<ture;i++)
        {    
            for(j=max_buf[i];j<max_buf[i]+10;j++)
            {

                min1[i]=(min1[i]<box[i])?min1[i]:box[j];
                if(min1[i]==box[j]) min1_piont[i]=j;//S
            }
            for(j=max_buf[i]-12;j<max_buf[i];j++)
            {

                min2[i]=(min2[i]<box[j])?min2[i]:box[j];
                if(min2[i]==box[j]) min2_piont[i]=j;//R
            }
        }
    //算心率,心律不齐
        xinglv = 60/(((max_buf[1]-max_buf[0])+(max_buf[2]-max_buf[1]))/2*time);    //    (time)not have  value !!! just test
        xinglv_jiange1 = max_buf[1]-max_buf[0];
        xinglv_jiange2 = max_buf[2]-max_buf[1];
    //输出
        printf("  %d %d %d %d %d  , %d\n",max_buf[0],max_buf[1],max_buf[2],max_buf[3],max_buf[4],window_cnt);
        printf("  %d %d %d %d %d  , %d\n",max_buf_val[0],max_buf_val[1],max_buf_val[2],max_buf_val[3],max_buf_val[4],window_cnt);
        printf(" R-R间距 %f %f \n",xinglv_jiange1,xinglv_jiange2);
        printf(" 心率 %f 间隔误差 %f \n",xinglv,(max_buf[1]-max_buf[0])/(max_buf[2]-max_buf[1]));
        for(i=0;i<ture;i++)
        {
        printf("  输入%d个整数中Q%d是:%d \n其数组下标是:%d 是第:%d个\n",box_len,i,min2[i],min2_piont[i],min2_piont[i]+base);
        printf("  输入%d个整数中R%d是:%d \n其数组下标是:%d 是第:%d个\n",box_len,i,max_buf_val[i],max_buf[i],max_buf[i]+base);
        printf("  输入%d个整数中S%d是:%d \n其数组下标是:%d 是第:%d个\n",box_len,i,min1[i],min1_piont[i],min1_piont[i]+base);
        }
        ture = 0;
    return 0;
}

结果对于处理过的数据还是比较准的


误差分析:

提示:还是需要处理两最大值采样点x坐标过近的问题,滤除可能的误差。


 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生理信号中,能够自动的对心电图(Electrocardiograph, ECG)信号进行分析是当前信号处理领域中的研究热和难,能够自动的进行心电图信号的分析将会强有力的促进医疗事业的蓬勃发展,同时能够使国民的健康水平有大幅度的提高,对于现代信号处理技术在医疗领域中应用的将会产生重大的突破。对于心电信号的分析有很广泛的研究内容以及研究方法,其中能够快速准确的定位心电信号QRS 波群和 P、T 波,是心电图信号分析的一个关键环节,心电信号中往往拥有过多的信号干扰,去除信号的干扰是准确检测各种特征波的前提。截止到现在为止,当前对于心电信号的滤波方法研究以及对于特征波形的定位中还存在着许多的不足以及亟待改进的地方。针对当前现状,本文从以下两个方面展开研究,包括“心电信号滤波”以及“QRS 波形定位”。 由于心电信号产生的十分微弱,周围环境中掺杂的肌电干扰、基线漂移以及工频干扰都会对心电信号造成影响。本文设计了针对50Hz工频干扰的滤波器设计。从实际情况出发来看,设计了 基于FIR 陷波器和 Levkov 滤波法相结合的方法来滤除信号中 50Hz 工频干扰。实验结果显示,改进后的算法相比较传统的滤波器而言,是一种更为有效 ECG 信号滤波法。 QRS 波形定位:特征波形定位是心电信号分析与诊断的基础,是诊断的入手QRS 波群是心电图最主要最突出的波段,是检测其他波形的前提,P 波和 T波在诊断中也有重要意义。通过对临床 QRS 复合波的形态研究,根据小波多分辨率分析的特和模极大值检测原理,提出一种 Marr 小波链检测 QRS 波群的新算法。变换 3 种尺度来定位R 波,然后对定位到的峰值采样采取多数表决的方式,最终唯一确定 R 波位置。R 波确定后再向前、向后搜索 Q、S 波。对于 P 波和 T波则增大尺度,应用同样的方法来检测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值