fireholder.github.io

伪文艺女青年,状高冷,话少爱热闹


Blog | Archive | About

心率计算R-R间期算法

18 Apr 2017 | 算法

1.心率计算

心电指心脏在每个心动周期中,由起搏点、心房、心室相继兴奋,伴随着生物电的 变化。在一个正常心动周期中,一个典型的 ECG 波形是由一个 P 波,一个 QRS 波群,一个 T 波,以及 在 50% ~ 75% 的 ECG 中可能见到的 U 波。心率 (HR) 是指单位时间内心脏搏动的次数。

1.1 R-R间期算法

心率计算的算法大概以R-R间期算法最为普遍。

假设心电图机的采样频率为1000,即每秒采样1000个数据。

假设我们要求的心律是x,那么心率计算的数学公式如下(R波指的是大小为4000的缓冲区里面,心跳波动的波峰数):

x/(60*10000)=(R波个数 - 1)/(最后一个R波位置-第一个R波位置)

[ frac{5+4+(2-3-(6+\frac{4}{5}))}{3(6-2)(2-7)} ]

这个数学公式中,(最后一个R波位置-第一个R波位置) 得到的是最后一个R波和第一个R波之间隔了多少个数据,采样率1000的话,这个值其实就是隔了多少个毫秒。(R波个数 - 1)得到的是在这么多个毫秒内,经历多少个心跳周期。

由此可以算出,即我们所求的心率。

1.2 代码及说明


// CALCULATE HEART RATE
	r_check_counter++;
	sample_counter++;
	if (adc_sample_filtered > R_WAVE_THRESHOLD) // THE R WAVE WAS DETECTED
	{
		current_r_pos = sample_counter; // SAVE CURRENT R WAVE POSITION
		r_check_counter = 0;
	}
  if (r_check_counter == SAMPLE_WINDOW) // THE R WAVE WAS NOT DETECTED DURING
	{									 // THE FOLLOWING 128 CONSECUTIVE SAMPLES
		r_counter++;
		if (r_counter > 1)				 // THE FIRST R WAVE HAS BEEN DETECTED
		{
			time_interval += current_r_pos - previous_r_pos;
			if (r_counter == 3)
			{
				r_counter = 0;
				_heart_rate = (30720 / time_interval) * 2;     //512*60=30720

				OLED_Clear();
				Show_BPM(_heart_rate);			
				time_interval = 0;
				sample_counter = 0;
			}
		}
		previous_r_pos = current_r_pos;
	}


其中,time_interval为第一个R波到最后一个R波的间期,2 为R波个数-1,即r_counter-1,此处为检测到3个R波计算一次。时钟频率为32768Hz,采样频率为512Hz。经测算,检测3个R波计算一次时瞬时性良好。

1.3 分析与结论

但是R波检测算法却并不完美,有时候会漏检,比如缓冲区里有5个R波,却只检出4个,这个时侯算出来的心律就偏低,不准确了。后期可以考虑P-T算法。

comments powered by Disqus

Older · View Archive (56)

PID 详解

Newer

互补滤波概述

概述