Bagaimana detak jantung terdengar: mengubah kardiogram kertas ke format WAV


Banyak kali harus berurusan dengan pemeriksaan jantung di lembaga medis menggunakan kardiograf. Unit ini mengukur aktivitas bioelektrik jantung, merekam hasilnya pada pita kertas. Kardiograf modern mencatat hasil pengukuran bukan di atas kertas, tetapi dalam memori digital. Namun, pita kertas sering digunakan sebagai media akhir dari informasi yang direkam. Secara visual, itu adalah kertas milimeter panjang lebar kecil, yang dipelintir menjadi gulungan. Di atas kertas, selain kisi milimeter, grafik tertentu digambar dengan panjang penuh, yang mencerminkan hukum dari nilai yang terukur berubah seiring waktu. Nilai yang diukur, seperti yang saya mengerti, adalah perbedaan potensial antara lead. Paling sering, beberapa bagan disajikan pada satu kaset sekaligus, karena perbedaan potensial antara banyak lead dicatat. Namun, tanpa masuk ke rincian obat, di masa depan kami akan mempertimbangkan salah satu jadwal utama pertama. Selain grafik, ada informasi tekstual tambahan pada kaset: skala horizontal (mm / s), vertikal (mm / mV), detak jantung terukur (bpm) dan banyak lagi.

Ada ide untuk mengubah bagan ini menjadi format suara, mereproduksi hasilnya dan mendengarkan bagaimana bunyinya.

Menurut analisis pendahuluan, kita dapat menyimpulkan bahwa komposisi frekuensi gelombang semacam itu tidak terlalu jenuh. Bahkan, ini adalah frekuensi rendah, termasuk infrasonik, yang diyakini tidak terdengar. Namun, akan mungkin untuk melihat bagaimana kerucut woofer akan mengulangi getaran yang serupa dengan "getaran" jantung. Faktanya, karena adanya sirkuit pembeda kapasitif pada jalur perambatan sinyal dari kartu suara PC ke penguat bass, getaran kepala dinamis tidak akan persis mengulangi getaran yang disajikan pada kardiogram. Dan ini asalkan filter yang memotong frekuensi sangat rendah tidak dipasang di mana pun. Selain itu, distorsi non-linear akan hadir, disertai oleh beberapa harmonik frekuensi tinggi. Namun demikian, tanpa memperhitungkan analisis di atas, kami menimbulkan masalah sebagai berikut: konversi grafik di atas kertas ke format WAV sehingga ketika Anda membuka file ini dalam editor suara, bentuk gelombang cocok dengan versi kertas dan, lebih lanjut, sesuai dengan skala waktu.

Pertama, Anda perlu memperkirakan kedalaman kuantisasi (resolusi audio digital secara vertikal). Saya sedang mempertimbangkan salah satu standar: 8 atau 16 bit. Pilihan kedua (16 bit) adalah 65536 sampel vertikal, yang akan sesuai dengan 65536 piksel gambar, yang merupakan pemindaian atau foto kardiogram. Ini banyak, dan itu tidak masuk akal. Jika Anda mengambil 8 bit - ini adalah 256 sampel, atau 256 piksel gambar. Sekarang ini pilihan yang lebih cocok. Dalam hal ini, rentang dinamis audio adalah 6 * 8 = 48 dB. Saya tidak tahu kisaran dinamis apa yang dimiliki kardiogram, tapi saya pikir tidak lebih. Perangkat itu sendiri secara alami lebih besar, tetapi kesalahan tidak bisa dihindari ketika menampilkan kardiogram di atas kertas, terutama ketika datang untuk menggambar langsung dengan pena. Omong-omong, tentang yang terakhir. Saya tidak akan memperhitungkan pola lama yang digambar dengan pena "radial". Pita kertas milimeter untuk kardiogram semacam itu spesifik: busur vertikal bukan garis lurus ditarik. Sedangkan untuk skala horizontal - laju sampling - akan dihitung berdasarkan skala kardiogram dan ukuran gambar. Kecepatan pemutaran akan tergantung pada parameter ini, dan harus sesuai dengan "kecepatan kardiogram" yang sebenarnya.

Kertas kardiogram harus dipindai dalam b / w dengan nuansa abu-abu dalam resolusi yang memadai. Maka Anda perlu mengubah ukuran gambar sehingga kardiogram yang diinginkan sesuai dengan strip 256 piksel. Saya menemukan banyak gambar dengan kardiogram di Internet. Sebagai contoh, perhatikan dua di antaranya.



Gambar pertama, bisa dikatakan, hampir siap. Tinggi gambar - 431. Lebar - 1023. Gelombang melintasi lebar memenuhi seluruh gambar. Tetapi Anda harus meninggalkan 256 ketinggian, memotong gambar di atas dan di bawah sehingga gelombang terletak kira-kira di tengah.



Gambar kedua menunjukkan beberapa kardiogram sekaligus. Ambil yang pertama. Setelah memotong, kami mendapat gambar berukuran 508 kali 61.



Tanpa meregangkan gambar secara vertikal, kita akan membuat gambar dengan tinggi 256, mengisi area yang dibuat dengan kekosongan putih. Gelombang juga harus terletak kira-kira di tengah. Saat memotong, saya memilih lebar 508 sehingga meninggalkan sel-sel milimeter integer sebanyak mungkin, yang juga terlihat dalam gambar.

Kedua gambar perlu dikonversi ke tampilan di mana hanya grafik hitam akan terlihat pada latar belakang putih dan tidak ada yang lain. Ini dilakukan dengan cara dasar. Karena kenyataan bahwa grafik yang digambar jauh lebih gemuk daripada kisi milimeter, pada editor grafis menggunakan penyesuaian "kecerahan, kontras, saturasi", Anda dapat mencapai hasil yang diinginkan. Jika konversi sempurna gagal, sisa "sampah" berlebih di atas bagan harus dihapus dengan alat penghapus. Semua gambar harus disimpan dalam format BMP monokrom. Dengan demikian, hanya warna putih dan hitam yang pasti akan tetap ada dalam gambar.

Sebelum Anda mulai menjelaskan algoritme untuk mengonversi gambar ke WAV, ada baiknya Anda menentukan beberapa nuansa yang menyederhanakan pemrograman. Gambar yang dihasilkan harus diputar 90 derajat berlawanan arah jarum jam (lebar dan tinggi gambar akan berubah tempat). Ini diperlukan untuk mengarahkan awal kardiogram dengan awal file BMP. Diketahui bahwa data warna setiap piksel dalam file BMP ditulis ke file baris demi baris, mulai dari sudut kiri bawah. Maka Anda perlu membuka gambar di editor "MS Paint" (Saya memiliki Windows XP) dan menyimpan ke BMP 8-bit (256 warna). Tentu saja, akan ada "redefinisi informasi", tetapi dengan format ini, setiap piksel dalam gambar bersesuaian dengan satu byte, yang sangat nyaman saat pemrograman. Byte "0" adalah piksel hitam, dan byte "255" berwarna putih. Hasilnya harus seperti berikut (di sini dua gambar terhubung dan dibelah dua).



Adapun format output, kami akan output tidak ke file WAV standar, tetapi ke file data RAW (PCM). Ini juga menyederhanakan pemrograman, karena ketika mengeluarkan ke WAV, Anda masih harus menjaga header 44-byte. Dalam editor audio umum Adobe Audition 1.5, file PCM terbuka tanpa masalah. Selain itu, Anda bahkan dapat menampilkan angka desimal data PCM ke kolom dalam file teks, setelah sebelumnya membentuk header teks tertentu. Anehnya, tetapi file seperti itu Adobe Audition juga terbuka.

Kami menggambarkan algoritma transformasi. Dan algoritma ini sangat sederhana: Anda perlu menganalisis setiap baris file BMP dari bawah ke atas. Analisis akan terdiri dari penghitungan piksel putih dari kiri ke kanan berturut-turut hingga hitam ditemukan. Nilai integer non-negatif yang diperoleh harus ditulis ke file PCM output dalam bentuk biner. Ukuran file output akan sama persis dengan tinggi gambar yang diproses. Kedalaman kuantisasi 8 bit format data audio PCM menyiratkan pengkodean sampel sesuai dengan prinsip yang sama. Nilai "0" adalah nilai negatif maksimum dari sampel audio, nilai "255" adalah positif maksimum, dan "128" adalah nilai nol (di tengah). Misalnya, file PCM data audio diam akan berisi byte yang sama dengan nilai "128". Perlu disebutkan bahwa satu baris dapat mengandung beberapa piksel hitam berturut-turut, tergantung pada ketebalan garis kardiogram. Tetapi algoritma yang dijelaskan "menangkap" amplop atas, yang akan cukup. Selain itu, puncak tajam dari kardiogram diarahkan ke atas akan lebih baik dipahami dengan cara ini.

Sekarang Anda dapat mulai menulis teks program. Program yang ditulis dalam C sangat sederhana dan tidak perlu komentar rinci.

#include <stdio.h> // ,  ; int main(){ //  ; FILE *in,*out; //   ; unsigned long int h,i; //    ; unsigned char px,s; //     ; in=fopen("1.bmp","rb"); //   ; out=fopen("1.pcm","wb"); //   ; fseek(in,22,SEEK_SET); //    ,     fread(&h,4,1,in); //   (4 ); for(i=0;i<h;i++){ // -   ; fseek(in,0x436+i*256,SEEK_SET); //   i-  s=0; //  ( ); do{ //  ; fread(&px,1,1,in); //  ; s+=1; //   ; }while(px); // ,     ; fwrite(&s,1,1,out); //     ; } fclose(in); //  ; fclose(out); //  ; return 0; //  ; } 


Setelah program dieksekusi pada file "1.bmp", file "1.pcm" akan dibuat dalam direktori yang sama dengan program. Ketika Anda mencoba untuk membuka file di Adobe Audition, jendela berikut akan muncul.



Anda harus memilih "Mono", "8-bit", dan mencetak frekuensi pengambilan sampel dalam bidang input berdasarkan perhitungan: f = h / (s / v), di mana h adalah ketinggian gambar (juga jumlah sampel dalam audio), s - panjang kardiogram dalam milimeter, v adalah skala kardiogram dalam mm / s. Parameter terakhir ditulis pada kardiogram. Pada kardiogram pertama tidak ada yang tertulis, tetapi skalanya, biasanya, 25 mm / detik. Perhitungan laju sampel di Excel untuk contoh kami ditunjukkan pada gambar di bawah ini.



Seperti disebutkan di atas, kami memasukkan nilai frekuensi sampling yang diperlukan untuk masing-masing contoh di bidang yang sesuai. Anda bahkan dapat memasukkan desimal, toh kemudian akan ada pembulatan otomatis ke keseluruhan terdekat.



Dengan mengklik "OK", kami setuju bahwa kami bekerja dengan sampel "8 bit Tidak Ditandatangani" (akan ada jendela lain), setelah itu bentuk gelombang file kami akan meluas di bidang utama editor suara. Perhatikan bahwa tampilan ini akan disajikan "terbalik", dan untuk kepatuhan penuh dengan versi kertas, Anda harus membalikkan gelombang di menu yang sesuai. Hasilnya, akan terlihat seperti ini.



Kardiogram kedua terlihat "lebih tenang", karena ukuran aslinya tidak terlalu besar.



Sayangnya, tidak semua kartu suara memungkinkan Anda memutar audio pada frekuensi pengambilan sampel yang sewenang-wenang, lebih tepatnya, sebagian besar tidak tahu caranya. Agar dapat memutar file dengan benar, Anda harus menjalankan fungsi "Konversi tipe sampel". Kami akan mengonversi ke nilai standar terdekat 8000 Hz, pada saat yang sama meningkatkan resolusi dalam amplitudo menjadi 16 bit. Yang terakhir ini diperlukan untuk akurasi pada tahap interpolasi selama upsampling. Jika Anda meninggalkan 8 bit, maka wilayah spektrum yang tersisa akan diisi dengan noise kuantisasi. Omong-omong, prosedur ini dapat dilakukan secara terprogram pada tahap konversi BMP-PCM, bahkan menggunakan interpolasi. Tetapi salah satu tujuannya adalah kesederhanaan kode program.

Setelah operasi upampling, Anda dapat mendengarkan dan menikmati hasilnya. Anda dapat menyimpan hasilnya dalam file wav atau mp3 standar. Kedengarannya persis sama dengan yang saya harapkan.

Tautan ini memungkinkan Anda untuk mengunduh arsip rar, yang berisi dua file WAV dengan hasilnya.

Source: https://habr.com/ru/post/id419527/


All Articles