Tentang proyek ini
Serangan jantung mendadak dan peningkatan kematian :Kekhawatiran yang Bertambah
Dalam satu dekade terakhir, kematian akibat serangan jantung mendadak meningkat pesat.
Khususnya di negara berkembang seperti India, selain genetik dan gaya hidup, kurangnya sumber daya medis di daerah pedesaan menyebabkan sebagian besar kematian akibat serangan jantung.
Kontribusi teknologi untuk memecahkan masalah global ini:
Saya mengerjakan aplikasi TinyML yang diberdayakan oleh Edge Impulse untuk mengembangkan perangkat penganalisis EKG Mini-Diagnosis yang dapat dimasukkan ke dalam saku dan dapat mendiagnosis penyakit jantung secara mandiri tanpa konektivitas cloud.
Hadirkan mesin ECG Analyzer di pasar dan fitur-fiturnya
•Perangkat medis IoT saat ini mengirimkan data EKG massal ke seluler/server dan analisis dilakukan di Aplikasi seluler/prosesor tinggi
•Aplikasi berbasis komputer yang menerima sinyal dari perangkat EKG dan menganalisis pola EKG
•Semua perangkat penganalisis EKG memiliki ketergantungan pada Internet atau komputer dengan pemrosesan tinggi/ Aplikasi seluler.
Jadi ini dapat diringkas dalam grafik di bawah ini;
Solusi Utama
•ECG Analyzer yang didukung oleh Edge Impulse akan menganalisis data EKG tanpa ketergantungan apa pun pada Internet.
•Latensi paling rendah dibandingkan dengan perangkat IoT
•Rom 15Kb - Model TinyML yang Menganalisis EKG dapat berjalan pada mikrokontroler yang didukung TinyML.
•Perangkat akan menganalisis pola EKG dan mengklasifikasikan ke dalam Normal, Fibrilasi Atrium, dan blok jantung Derajat Pertama
Arsitektur
Penganalisis EKG melibatkan
1. Pembacaan EKG menggunakan AD8232
2. Mensimulasikan pola EKG penyakit jantung yang berbeda
3. Pendekatan baru untuk menghasilkan kumpulan data berkualitas
4. Melatih Model
5. Akurasi pengujian model dan Mengintegrasikan kode aplikasi dengan penerapan perpustakaan
Ketahui tentang grafik EKG
Sebelum melanjutkan dengan pekerjaan teknis, terlebih dahulu akan melalui beberapa dasar grafik EKG.
Grafik EKG dibagi menjadi 5 Gelombang - gelombang P, Q, R, S dan T.
Fibrilasi Atrium
Blok Jantung Tingkat Pertama
Mari membangun Penganalisis EKG
1. Pembacaan EKG menggunakan AD8232
Hubungkan sensor EKG AD8232 ke sensor Arduino Nano 33 BLE sesuai diagram koneksi di bawah ini.
Flash kode di bawah ini lalu tekan "Ctrl+Shift+L" untuk memvisualisasikan data streaming grafis.
void setup() {
// menginisialisasi komunikasi serial:
Serial.begin(115200);
pinMode(2, INPUT); // Setup untuk deteksi lead off LO +
pinMode(3, INPUT); // Setup untuk deteksi lead off LO -
}
void loop() {
if((digitalRead(2) ==1) ||(digitalRead(3) ==1)){
Serial.println('!');
}
else{
// kirim nilainya input analog 0:
Serial.println(analogRead(A0));
}
//Tunggu sebentar agar data serial tidak jenuh
delay(5);
}
1.1 Penempatan elektroda EKG
Elektroda EKG ditempatkan di RA, LA dan LL seperti yang disebutkan dalam diagram di atas dan hubungkan jack ke sensor AD8232 pada ECG Analyzer.
2.Mensimulasikan pola EKG yang berbeda menggunakan pembuat sinyal Matlab
Langkah 2.1 :Menyimpan data EKG normal di Excel
Salin dulu dan simpan data serial monitor ke dalam file excel seperti template di bawah ini. Nilai EKG harus di kolom kedua di bawah 'Y'. Kolom pertama adalah deret waktu. itu harus bertambah sebagai ( * 0,005) 5ms.
Langkah 2.2 :Pembuat sinyal di Matlab
Buat model Simulink baru di Matlab
Kemudian ketik 'signal builder' di ruang kerja dan pilih. Sisipkan juga
'lingkup' untuk menghubungkannya ke pembuat sinyal. Silakan lihat tangkapan layar di bawah ini.
Untuk memuat data excel yang disimpan, buka pembuat sinyal dan pilih opsi 'impor dari file'.
Silakan pilih opsi yang disebutkan untuk mengimpor data.
Kemudian konfirmasikan pemilihan dan impor tanpa menyimpan model. karena kita perlu beberapa langkah lagi.
2.3 : Visualisasi Data EKG di pembuat sinyal
A Data EKG 60 detik akan terlihat seperti ini di tampilan pembuat sinyal, Untuk pengeditan manual, Perbesar data selama 5 detik dan lakukan 'tarik' untuk mengedit gelombang EKG.
Setelah Zooming, saat Anda meletakkan penunjuk mouse di dekat gelombang EKG, Anda dapat memilih titik mana pun di EKG dan menyeretnya sesuai kebutuhan aplikasi Anda.
2.4 :Mengedit data interval PR di Pembuat sinyal untuk Kasus AV Blok 1
Saya telah secara manual menyeret gelombang P ke bawah dan menggeser gelombang P jauh sebelum gelombang R, sehingga interval P-R melebihi 200 md.
Ulangi langkah ini di timeline yang berbeda dalam data pembuat sinyal.
Setelah diedit, Ekspor data ke dalam file mat. Anda dapat menemukan opsi ini di pembuat sinyal. Setelah file mat disimpan, silakan ikuti langkah-langkah di bawah ini.
Langkah-langkah yang harus diikuti --> Klik dua kali file mat terlebih dahulu dan klik dua kali Dataset 1x1--> Anda dapat melihat data yang dimodifikasi di bawah Data:1.
Salin dan tempel data di file excel baru.
Langkah 2.5 :Ekspor data excel ke dalam Array
Saya telah menulis skrip a.m yang dapat mengubah data excel menjadi array.
Jalankan skrip ini di Matlab, sebelum menjalankan, ganti ExcelFilename dengan nama file tersimpan lokal Anda dan ExcelSheetName menjadi nama sheet yang sesuai.
data=xlsread('ExcelFilename.xlsx','ExcelSheetName');
ECGExtract=(data(1:end,1)); %%Column A data
fid=fopen('test.txt','wt');%pembukaan dengan tanda t mengonversi otomatis \n ke \r\n di Windows
fprintf(fid,'{');
FormatSpec=[repmat('%i ',1,size(ECGExtract,2)) ','];%atau seharusnya \r\n sebagai gantinya?
fprintf(fid,FormatSpec, ECGExtract);
fprintf(fid,'}')
fclose(fid);
File teks akan dibuat di lokasi direktori saat ini.
Salin konten larik dan tempel di kode ECGAnalyzer.c untuk mensimulasikan fibrilasi atrium dan blok jantung Derajat Pertama.
3. Pendekatan baru untuk menghasilkan kumpulan data berkualitas
Jika Anda melihat data EKG, sangat sulit untuk membedakan kondisi jantung yang berbeda Data EKG dengan data EKG normal dalam waktu yang lebih singkat (contoh:3 detik)
Saat saya melatih model dengan Data EKG Terfilter saja untuk fibrilasi atrium, blok Jantung Normal dan Derajat Pertama, Akurasinya kurang dari 23%. Alasannya adalah di jendela yang lebih pendek model tidak dapat membedakan perbedaannya.
Jika saya menggunakan waktu jendela yang lebih lama, waktu pemrosesan dan penggunaan RAM puncak meningkat cukup banyak. Bahkan Tidak ada akurasi.
Latar Belakang Pendekatan Novel:
Kapan seorang dokter atau orang terlatih mencoba menganalisis grafik EKG, Mereka akan menghitung kotak-kotak kecil antara gelombang R ke R, interval P ke R dan menuliskannya dalam grafik atau mengingatnya untuk perhitungan.
Saya membuat bentuk gelombang terpisah dari data EKG yang difilter.
Bentuk gelombang baru:
Set Data yang Dihasilkan untuk EKG Normal data :
Yang interval R-R yang didekodekan dan data interval PR selalu 100 dan 50 untuk Data EKG normal.
Dataset yang Dihasilkan untuk Fibrilasi Atrium- Data EKG:
Kapan pun ada deviasi antara interval RR sebelumnya dan interval RR saat ini, Interval RR data akan diturunkan menjadi -100 untuk satu siklus.
Set Data yang Dihasilkan untuk EKG Blok Jantung Derajat Pertama Data:
Kapan pun interval P ke R melebihi 200 md, maka data Interval PR akan diturunkan menjadi -50 untuk satu siklus.
Pendekatan ini meningkatkan akurasi model saya menjadi lebih dari 90%.
4. Melatih Model di Edge Impulse
Sebelum masuk ke ML pelatihan Edge Impulse, kita perlu mengonfigurasi beberapa parameter dalam file library untuk simulasi dan pembacaan sensor EKG waktu nyata.
langkah4.1 :konfigurasikan SIMULASI ke 0, Jika akuisisi data dari pembacaan sensor EKG waktu nyata
atau
Konfigurasi SIMULASI ke 1, Jika akuisisi data berasal dari data EKG simulasi untuk Fibrilasi Atrium dan Blok Jantung Derajat Pertama ( mengikuti sesi Matlab).
Langkah4.2 :Beri komentar/batalkan komentar pada data yang diperlukan penyangga untuk simulasi
Langkah4.3 :Akuisisi data
Kumpulkan data EKG di bawah tiga label berbeda:Normal, Fibrilasi atrium, dan Blok Jantung Derajat Pertama
https://docs.edgeimpulse.com/docs/arduino-nano-33-ble-sense
dan pilih frekuensi sebagai 202
$ edge-impulse-daemon --frequency 202
Langkah4.4 :Buat Impuls
Dalam bagian buat impuls, ukuran jendela adalah 3000 ms dan peningkatan jendela adalah 2999 ms, pilih deteksi anomali k-means
Langkah 4.5:Fitur spektral
Dalam fitur spektral, pilih jenis filter sebagai Tidak Ada.
Langkah 4.6 :Pengklasifikasi NN:
Saya telah menetapkan 40 jumlah siklus pelatihan dan kecepatan belajar sebagai 0,005. Saya mendapatkan akurasi 92,9.
dan untuk deteksi anomali, saya telah memilih RMS interval PR dan RMS interval RR.
5. Akurasi &Integrasi uji model
Dalam akurasi uji model, akurasinya sekitar 97%.
5.1 Penerapan:
pilih Arduino sebagai penerapan;
Tambahkan file yang di-deploy EI yang diunduh ke perpustakaan Arduino
Catatan: Tambahkan perpustakaan ECG_Analyzer dari tautan GitHub ke perpustakaan Arduino juga
Ini membantu mengintegrasikan kode algoritme decoding EKG saya untuk diintegrasikan dengan model yang dihasilkan EI.
5.2 Mengintegrasikan kode Aplikasi ke kode EI yang dihasilkan inti
Saya telah menggabungkan kode aplikasi ke dalam EI yang diterapkan "nano_ble33_sense_accelerometer_continuous " dan menyimpannya sebagai ECGAnalyzer.ino.
Ini tersedia di tautan GitHub terlampir. Flash kode dengan SIMULASI sebagai 0 di ECG_Analyzer.c di perangkat.
Perangkat Keras:
Hubungkan sesuai diagram fritzing:
Merakit :
Produk Akhir:
Berikut produk akhir dan tingkat akurasi dalam data uji!!!
Kredit:
EKG :https://geekymedics.com/how-to-read-an-ecg/
Kode
https://github.com/Manivannan-maker/ECGAnalyzer
unzip ECGAnalyzer.zipCode ke Flash:EI_Deployed_Library\examples\ECGAnalyzer\ECGAnalyzer.inoLibrary untuk Edit simulasi :ECGAnalyzer_lib\ecg_analyzer.cSkrip Matlab dan model pembuat sinyal:skrip untuk dijalankan di matlab --> Matlab_Simulation\Excel2\Arrayconverterbuilder. signalbuilder.slxhttps://github.com/Manivannan-maker/ECGAnalyzer Skema
Hubungkan sesuai diagram ekgdefault_SjMMcgW8jY.fzz