Membersihkan Sinyal ECG dari Noise

UPDATE!! (24/5/2012) Kini dengan source code matlab untuk konvolusi!!

Ini tugas akhir buat mata kuliah Sinyal & Sistem. Sebuah sinyal Electrocardiography (ECG) bersih biasanya akan berbentuk seperti dibawah ini:

Tenang. Masih hidup.

Tetapi, hasil rekaman data oleh instrument yang digunakan TIDAK PERNAH ideal (sekalian mau ngeralat soal aslinya. Di soal aslinya ditulis “tidak selalu ideal”. Berarti pernah??). Selalu ada noise pada hasil rekaman.

"Kayaknya" pasien masih hidup....

Tugasnya mudah: Buat filter untuk membersihkan sinyal tersebut sebersih mungkin.

Naaah…. sebenernya, sebelum membuat filternya, mestinya dibahas dulu apa itu sinyal ECG, apa saja properties-nya, bla bla bla bla alalalalalala. Males dah. Jadi langsung ke bagian yang terpenting aja: mana bagian data yang merupakan sinyal ECG asli, mana yang noise?

Untuk menjawabnya, sinyal diatas mesti ditransform ke domain frekuensi dulu. Berikut source code yang digunakan untuk memplot sinyal ke domain frekuensi dengan fungsi fast fourier transform bawaan matlab, NFFT (ada di file soal).

Source-nya disimpan ke file *.m dan dijalankan.

Hasil plot pada domain frekuensi.

Lihat hasil plotnya. Ringkasnya, pada setiap frekuensi ada amplitudo sinus yang berbeda-beda. Dari rentang frekuensi 0-50 ada banyak yang amplitudonya besar. Tapi, dua “puncak” yang aneh sendiri di rentang frekuensi > 100 Hz. Dugaan awal, bagian ini lah yang noise.

Nah, buat memastikan, silahkan googling sebentar untuk mencari pada rentang frekuensi berapa sinyal ECG berada….

Kalau yang aku dapat, filter sinyal ECG ada beberapa lapis. Tapi yang terpenting, sinyalnya berada pada rentang 15-50 Hz (f < 15 Hz noise yang berasal dari pernapasan, diatas 50 Hz entah karena apa….).

Nah sekarang waktunya merancang filter. Sebenernya, karena ini cuma perhitungan memakai MATLAB, filter yang didesain bukan filter secara fisik, tetapi deskripsi sistem filternya. Ada banyak cara mendeskripsikan sistem, tapi tugas kali ini mewajibkan menggunakan respon impuls untuk deskripsi sistem. Respon impuls yang dibaut kemudian dikonvolusi dengan sinyal ECG ber-noise (penjelasan lebih detil baca bukunya. Males ngetik disini).

Biar gampang, respon impuls dibuat dengan fungsi bawaan MATLAB, fdatool.

Pakai lowpass, frekuensi sampel 1000 Hz, fpass 15 dan fstop 50. Habis itu klik design filter.

Kenapa pake low-pass filter? Jawab sendiri.

Ngomong-ngomong kalau bentuk respon impulsnya kayak begini:

satu sinyal impuls efeknya seperti ini....

Export jadi koefisien ke workspace matlab.

Nah, sekarang kita punya respon impuls. Selanjutnya, ya tinggal konvolusi sinyal ECG dengan respon impuls. MATLAB punya fungsi bawaan “conv” buat ini. Sayang banget tugas besarnya ngelarang pake fungsi bawaan MATLAB buat konvolusinya…. tapi buat sekarang sebagai gambaran aja, kita pake fungsi bawaannya.

Setelah hasil konvolusi didapat, berikut hasil plotnya:

Cukup bersih....

Yah, close enough lah. Berikutnya silahkan tambahkan bumbu sesuai selera.

Update (24/5/2012): Ini kode yang dipakai untuk konvolusi.

Simpan dengan nama (misalnya) konvolusi.m.

Comments are closed.

Switch to our mobile site