Analisis Sinyal Detak Jantung

Pada artikel ini diuraikan analisis sinyal detak jantung. Sinyal detak jantung diperoleh dari sensor pulsesensor.

Sensor ini sudah pernah dibahas di beberapa artikel sebelumnya:

Tambahan pada artikel ini adalah dilakukan filtering dengan LPF untuk membantu memuluskan sinyal hasil sensor.

 

Sensor detak jantung dari pulsesensor.com
Sensor detak jantung dari pulsesensor.com

Tahap pengolahan sinyal adalah sebagai berikut:

  • Pulsesensor sebagai sumber sinyal yang berasal dari detak jantung
  • Sinyal tegangan dari sensor dimasukkan ke Filter resistor dan kapasitor sebagai low pass filter untuk menghindari terjadinya aliasing,
  • Tegangan hasil filter dimasukkan ke modul Arduino Nano untuk dikonversikan ke digital dengan ADC. Data disampling dengan frekuensi 1 kHz dengan ADC pada Arduino Nano,
  • Data digital kemudian dikirimkan dengan komunikasi serial asinkron dengan kecepatan 115200 bps melalui port USB ke desktop PC.
  • Data direkam di desktop PC dengan perangkat lunak RealTerm. Data direkam ke sebuah file TXT di PC.
  • Data hasil rekaman kemudian dianalisis dengan perangkat lunak python menggunakan Jupyter Notebook

Perangkat lunak untuk pengukuran data di Arduino adalah sebagai berikut:  https://github.com/waskita/embedded/tree/master/atmega-detak-jantung-profiling

Perangkat lunak untuk analisis sinyal adalah sebagai berikut: https://github.com/waskita/embedded/blob/master/analisis-detak-jantung/heart-beat-analysis-1kHz.ipynb

Berikut ini diagram blok aliran sinyal pada sistem ini:

Berikut ini detail uraian aliran sinyal pada sistem tersebut

Sinyal hasil pengukuran dari ADC
Sinyal asli diperbesar

Tujuan dari sensor tersebut adalah mengukur detak jantung seseorang.

Ada beberapa hal yang mempersulit perhitungan detak jantung:

  • amplitudo sinyal berubah-ubah, tergantung kondisi tangan, tekanan pada sensor, dan sebagainya, sehingga batas ambang sinyal berubah-ubah
  • Sinyal detak jantung memiliki puncak yang tinggi, dan ada juga puncak yang lebih kecil. Mesti ada algoritma untuk mendeteksi puncak yang tinggi saja.

Sinyal hasil pengukuran ADC masih kurang rata, sehingga untuk membuat lebih halus dilakukan filtering pada frekuensi cut off 4 Hz. Frekuensi cut-off 4  Hz dipilih mengingat detak jantung maksimum orang normal adalah 220 per menit, atau setara 3,667 Hz. Jadi sinyal di atas frekuensi 3,667 Hz tidak diperlukan. 

Filter menggunakan filter digital IIR 4 pole. Filter 6 pole menghasilkan filter yang tidak stabil, sehingga akhirnya dipakai 4 pole saja. Jenis filter IIR supaya perhitungan lebih sederhana, mengingat sistem ini akan diimplementasikan di mikrokontroler dengan kemampuan komputasi yang terbatas.

Desain filter menggunakan Iowa Hills IIR Filter Designer Version 6.5 sebagai berikut:

Implementasi filter dengan bahasa Python, menggunakan struktur filter “Nth Order Coeffiecients”.

Struktur filter IIR (Infinite Impulse Response) yang dipakai adalah sebagai berikut:

Hasil filter adalah sebagai berikut (sinyal merah).

Sinyal hasil filter dengan low pass dengan fc=4 Hz

Sinyal hasi pengukuran mengandung sinyal DC offset, sehingga rata-ratanya tidak 0. Untuk menghilangkan DC offset, dilakukan filtering dengan LPF pada 200 mHz. Filter 2 pole IIR.

Hasil filter adalah sebagai berikut (sinyal merah):

Sinyal hasil filter LPF 0.2 Hz

Sinyal tanpa offset diperoleh dengan sinyal hasil filter 4 Hz dikurangi dengan sinyal hasil filter di 0.2 Hz.  Hasilnya adalah sinyal (warna biru) di gambar di bawah ini.

Sinyal biru kemudian disearahkan (rectified), sehingga didapat sinyal warna merah.

Sinyal hasil offset dan penyearahan

 

Sinyal hasil penyearahan difilter lagi dengan filter 0.2 Hz, untuk membantu deteksi puncak. Deteksi puncak agak sulit, karena dari hasil filter 4 Hz masih ada puncak kecil. Dengan sinyal hasil penyearahan diharapkan mampu mendeteksi puncak yang tinggi saja.

Gabungan sinyal

Proses terakhir adalah deteksi puncak. Hanya puncak yang tinggi yang dihitung.

Deteksi puncak pulsa denyut jantung

Penutup

Dari percobaan yang dilakukan, filtering (penapisan) analog dan digital dapat membantu membentuk sinyal supaya lebih mudah diproses.

Referensi

Pengukuran Detak Jantung Dengan Sensor Detak Jantung

Pengukuran Detak Jantung dengan sensor yang dibahas di artikel Sensor Detak Jantung

Data mentah, delimited dengan semicolon:

Interval sampling adalah 1 ms

Board yang dipakai adalah Arduino Nano V3 clone

Software yang dipakai adalah Arduino sebagai berikut:

/*
Sumber: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won’t change. Used here to set a pin number :
const int ledPin =  13;      // the number of the LED pin
// Variables will change :
int ledState = LOW;             // ledState used to set the LED
// Generally, you shuould use “unsigned long” for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated
// constants won’t change :
const long interval = 1;           // interval at which to blink (milliseconds)
unsigned long counter=0;
int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
}

void loop()
{
// here is where you’d put code that needs to be running all the time.

// check to see if it’s time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();

if(currentMillis – previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
counter++;
sensorValue = analogRead(sensorPin);
Serial.print(counter);
Serial.print(“;”);
Serial.println(sensorValue);

}
}

 

Grafik hasil pengukuran (sekitar 30000 sampel pertama). Nampak amplitude maksimum berubah-ubah, tergantung posisi dan tekanan jari pada sensor.

Pengukuran detak jantung 2900 sampel
Pengukuran detak jantung 2900 sampel

 

Grafik hasil pengukuran (hanya sekitar 1000 sampel pertama saja). Nampak ada noise pada hasil pengukuran.

Pengukuran detak jantung 1000 sampel
Pengukuran detak jantung 1000 sampel

 

Rentang angka ADC adalah 0 sampai 1023 (ADC 10 bit di ATMega328)

Angka maksimum yang tercatat adalah 536. Angka minimum yang tercatat adalah 496. Rentang angka yang tercatat adalah 40. Hal ini konsisten dengan hasil tampilan dengan software Processing di artikel Sensor Detak Jantung yang menunjukkan rentang angka pengukuran sempit dibandingkan dengan sensor asli.

Tampilan sensor ex Banggood
Tampilan sensor ex Banggood. Rentangnya sempit

 

Data mentah:

  • 1khz-data dalam format CSV, delimited dengan semicolon

Sensor Detak Jantung

Berikut ini catatan singkat mengenai percobaan sensor detak jantuk yang didapat dari situs Banggood

 

Foto barang di situs banggood
‘Pulse Heart Rate Sensor Module’ di situs Banggood

Berikut ini foto sensor tersebut yang sampai setelah 18 hari di pengiriman. Lumayan cepat, sebelum-sebelumnya lama pengiriman dapat mencapai 1 bulan.

Rangkaian bagian depan sensor detak jantung
Rangkaian bagian depan sensor detak jantung

 

Rangkaian bagian belakang sensor detak jantung
Rangkaian bagian belakang sensor detak jantung

Deskripsi komponen menurut situs Banggood:

Pulse Heart Rate Sensor Module Heart Rate Monitor

Description:

Heart rate data can be really useful whether you’re designing an exercise routine, studying your activity or anxiety levels or just want your shirt to blink with your heart beat. The problem is that heart rate can be difficult to measure. Luckily, the Pulse Sensor Amped can solve that problem!

The Pulse Sensor Amped is a plug-and-play heart-rate sensor for Arduino. It can be used by students, artists, athletes, makers, and game & mobile developers who want to easily incorporate live heart-rate data into their projects.It essentially combines a simple optical heart rate sensor with amplification and noise cancellation circuitry making it fast and easy to get reliable pulse readings. Also, it sips power with just 4mA current draw at 5V so it’s great for mobile applications.

Simply clip the Pulse Sensor to your earlobe or finger tip and plug it into your 3or5 Volt Arduino and you’re ready to read heart rate! Of course Arduino example code is available as well as a Processing sketch for visualizing heart rate data.

Package included:

1 x Pulse Heart Rate Sensor Module Heart Rate Monitor

Pada situs Banggood tidak disebutkan lebih jauh tentang cara menggunakan sensor tersebut.

Setelah dicari di sana-sini, nampaknya komponen tersebut adalah clone dari sensor yang dijual di pulsesensor.com.

Sensor detak jantung dari pulsesensor.com
Sensor detak jantung dari pulsesensor.com

Sensor detak jantung dari pulsesensor.com
Sensor detak jantung dari pulsesensor.com

Cloning yang cukup mirip, namun harganya beda jauh. Sensor dari pulsesensor dijual USD 24, dengan beberapa aksesoris tambahan, sedangkan sensor dari Banggood dijual sekitar USD 7 tanpa tambahan aksesoris.

Perbedaan visual hanyalah pada teks ‘pulsesensor.com’ yang diganti dengan ‘CJMCU’. Entah apa artinya CJMCU itu.  CJMCU ini nampaknya nama pabrik pembuatnya (http://www.cjmcu.com/)

Rangkaian sensor tersebut adalah rangkaian open source di situs pulsesensor. Namun kurang jelas apakah rangkaiannya di clone tersebut sama dengan rangkaian opensource tersebut..

Rangkaian pulse sensor - open source hardware
Rangkaian pulse sensor – open source hardware

Dari situs pulsesensor diketahui bahwa sensor tersebut menggunakan power supply 3.3 v ~ 5 V, dan outputnya adalah tegangan analog. Nantinya di mikroprosesor mesti menggunakan ADC untuk diubah menjadi besaran digital.

Sebelum dipakai, sensor dibungkus dulu dengan lem dan plastik supaya tidak terkena kontaminasi garam dari keringat. Hal dilakukan ini berdasarkan saran di http://pulsesensor.com/pages/code-and-guide

Sensor detak jantung sudah dibungkus lem dan plastik
Sensor detak jantung sudah dibungkus lem dan plastik

Sementara ini dicoba dulu tegangan outputnya dengan osiloskop.

Hasil pengukuran sinyal dengan osiloskop. 10 mV/div, 0.2 s /div.

Gambar ditangkap dengan kamera digital, dengan waktu pencahayaan 2 detik. Pada layar osiloskop terdapat 10 div, dengan masing-masing div adalah 0.2 s, maka untuk menyapu selebar layar diperlukan waktu 2 detik.

Pengukuran sinyal dari sensor detak jantung dengan osiloskop
Pengukuran sinyal dari sensor detak jantung dengan osiloskop

Pengukuran sinyal dari sensor detak jantung dengan osiloskop
Pengukuran sinyal dari sensor detak jantung dengan osiloskop

Pengukuran sinyal dari sensor detak jantung dengan osiloskop
Pengukuran sinyal dari sensor detak jantung dengan osiloskop

Pengukuran sinyal dari sensor detak jantung dengan osiloskop
Pengukuran sinyal dari sensor detak jantung dengan osiloskop

Pengukuran sinyal dari sensor detak jantung dengan osiloskop
Pengukuran sinyal dari sensor detak jantung dengan osiloskop

Berikut ini rekaman video dari osiloskop:

Tahap berikutnya adalah mempelajari tulisan di situs pulsensor dengan harapan dapat dipakai untuk mengaktifkan sensor detak jantung tersebut. Cara kerja software dijelaskan di http://pulsesensor.com/pages/pulse-sensor-amped-arduino-v1dot1, dan nampaknya cukup kompleks.

Software untuk sensor tersebut tersedia untuk platform Arduino. Untuk menampilkan sinyal di PC juga tersedia modul processing.org-nya. Berikut ini foto rangkaian Arduino nano kloning dengan pulse sensor kloning.

Rangkaian Arduino dengan sensor detak jantung
Rangkaian Arduino dengan sensor detak jantung

Untuk menampilkan output dalam bentuk grafik digunakan software PulseSensor Processing Visualizer

Tampilan processing sensor asli
Tampilan processing sensor asli

Tampilan sensor ex Banggood
Tampilan processing sensor ex Banggood

Dari perbandingan tersebut nampak bahwa sinyal dari sensor ex Banggood tegangannya lebih kecil dibandingkan sensor buatan pulsesensor.com.

Kesimpulan

  • sejauh ini oprekan masih berlangsung, jadi belum ada hasil kesimpulan

Referensi Artikel