kalp ritmi hesap algoritması

Başlatan görkem, 06 Mayıs 2018, 18:56:23

görkem

Arkadaşlar merhaba,

Elimde  Gravity: Analog Heart Rate Monitor Sensor (ECG) sensör var.

https://www.dfrobot.com/wiki/index.php/Heart_Rate_Monitor_Sensor_SKU:_SEN0213

Analog olarak kalp atış bilgisini 5ms de bir örnekleyerek ploter ile çizdiriyorum fakat bpm bilgisi için algoritma kuramadım  sitede arduino ile yapmışlar fakat kütüphanesini anlayamadım kendim kütüphane oluşturmak istedim sağlıklı bir bilgi elde edebilmem için nasıl bir algoritma kullanmalıyım yardımcı olursanız sevinirim.

OptimusPrime

https://www.dfrobot.com/wiki/index.php/File:Heart_Rate_SEN0213_checking.png
adresinde verilen grafigi elde edebiliyor musun? En azindan oradaki pikleri gorebilmen lazim. Bunlar kalp atislari.

Eger gorebiliyorsan ilk once bu degerleri excel aktarip excelde biraz oyna derim. Yapman gereken alcak geciren bir filtre tasarlamak. Normal bir insanin bpm degeri max 180 dir. Yani 3Hz. 3Hz lik bir fitreden gecirdikten sonra tepeler arasindaki sureyi olceceksin.

Benim tavsiyem ham datayi ilk once excele aktar. Sonra filtreni tasarla. Sonuclarina bak, bir esik seviyesi belirle. Sonra bu tepeler arasinda timer i saydir.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

MC_Skywalker

#2
sitede verilen örnekte seti portan bpm bilgisini göndermiş. örnekte kullanılan "HeartSpeed.h" isimli header dosyasını icelemeniz algoritma konusunda faydalı olur.


 /*!
* @file Heartrate.h
* @brief Heartrate.h detailed description for Heartrate.cpp 
*
*  This is written for the heart rate sensor the company library. Mainly used for real 
*  time measurement of blood oxygen saturation, based on measured values calculate heart rate values.
* 
* @author jianghao(460221531@qq.com)
* @version  V1.0
* @date  2016-07-08
*/

#ifndef __HEARSPEED__H
#define __HEARSPEED__H

#include "Arduino.h"
#include "MyTimer2.h"

typedef void (*HEARTCBFUNC)(uint8_t,int);

#define RAW_DATA 1           		///<Serial port mapping switch
#define HEARRATE_VALUE 0           	///<Off by default serial port mapping
	
#define sampleSize 512  			

class HeartSpeed
{
public:
	/*!
   *  @brief Constructor
   */
	HeartSpeed(uint8_t _pin, uint8_t _rawData = HEARRATE_VALUE);
	/*!
   *  @brief Sets the callback function
   */
	void setCB(HEARTCBFUNC cb_);
	/*!
   *  @brief Start test
   */
	void begin(void);
	/*!
   *  @brief Calculate heart rate value
   */
	int calculateSpeed(void);
	/*!
   *  @brief Receive serial data and process
   */
	static void recv( void *);
	/*!
   *  @brief Initializes the heart rate period
   */
	void goInit();
	/*!
   *  @brief Kalman filtering
   */
	float kalmanUpdate(float Accel,float Gyro);
	
private:
	uint8_t rawData;      			 ///<Serial port mapping switch
	uint8_t pin;           
	int Count;			  			 ///<Counts, to run once every minute

	/*The following data is used to calculate the heart rate value*/
	float heart;
	int heartRateNum=0;
	int sum;
	int go1;               			 
	int go2;
	int go3;
	int go4;

	/*Square-wave operation enabling conditions*/
	int high=1;           
	int low=0;

	int sampleNum;					///<Heart rate values

	/*Kalman filter parameters*/
	float  Gyro_y;      
	float  Angle;
	float  Q_bias, Angle_err;
	float  dt=0.05;
	float  Pdot[4] ={0,0,0,0};
	float  Q_angle=0.001;
	float  PP[2][2] = { { 1, 0 },{ 0, 1 } };
	float  Q_gyro=0.003;
	float  PCt_0, PCt_1, E;
	float  K_0, K_1, t_0, t_1;
	char   C_0 = 1;
	float  R_angle=0.5;
};

#endif

/******************************************************************************
  Copyright (C) <2016>  <jianghao>
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  Contact: 460221531@qq.com
 ******************************************************************************/

usahin

Doğrudan R tepelerini bir limitle ölçmek yanıltıcı olur, kas hareketi ve çevresel gürültülerin etkisiyle yanlış nabız ölçebilirsiniz. PAN & TOMPKINS algoritmasını EKG sinyalinden nabız hesaplamak için kullanabilirsiniz. Bolca MATLAB uygulaması var, Arduino kütüphanesi de mevcut, inceleyebilirsiniz.

OptimusPrime

@usahin
Neredeyse camurun icinden sinyali cikartmis. Tesekkurler bilgi icin.
Bende linki ekledim. Birilerinin isine yarar belki.
http://www.robots.ox.ac.uk/~gari/teaching/cdt/A3/readings/ECG/Pan+Tompkins.pdf
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||