Latar belakang: Saya sedang mengerjakan aplikasi iPhone (disinggung dalam beberapa posting lain ) yang "mendengarkan" dengkuran / pernapasan saat seseorang tertidur dan menentukan apakah ada tanda-tanda sleep apnea (sebagai pra-layar untuk "lab tidur" pengujian). Aplikasi ini pada dasarnya menggunakan "perbedaan spektral" untuk mendeteksi dengkuran / napas, dan berfungsi dengan baik (korelasi 0,85--0,90) ketika diuji terhadap rekaman lab tidur (yang sebenarnya cukup berisik).
Masalah: Sebagian besar kebisingan "kamar tidur" (kipas angin, dll.) Saya dapat menyaring melalui beberapa teknik, dan seringkali dapat mendeteksi pernapasan pada tingkat S / N di mana telinga manusia tidak dapat mendeteksinya. Masalahnya adalah suara. Bukanlah hal yang aneh jika televisi atau radio diputar di latar belakang (atau sekadar meminta seseorang berbicara di kejauhan), dan irama suara sangat cocok dengan pernapasan / dengkuran. Bahkan, saya menjalankan rekaman almarhum penulis / pendongeng Bill Holm melalui aplikasi dan itu pada dasarnya tidak bisa dibedakan dari mendengkur dalam ritme, tingkat variabilitas, dan beberapa langkah lainnya. (Meskipun aku bisa mengatakan bahwa dia tampaknya tidak menderita sleep apnea, setidaknya tidak ketika bangun.)
Jadi ini agak sulit (dan mungkin serangkaian aturan forum), tapi saya mencari beberapa ide tentang cara membedakan suara. Kita tidak perlu menyaring dengkuran entah bagaimana (pikir itu akan menyenangkan), tetapi kita hanya perlu cara untuk menolak sebagai suara "terlalu berisik" yang terlalu tercemar oleh suara.
Ada ide?
File yang diterbitkan: Saya telah menempatkan beberapa file di dropbox.com:
Yang pertama adalah musik rock yang agak acak (kurasa), dan yang kedua adalah rekaman almarhum Bill Holm. Keduanya (yang saya gunakan sebagai sampel "noise" saya dibedakan dari mendengkur) telah dicampur dengan noise untuk mengaburkan sinyal. (Ini membuat tugas mengidentifikasi mereka secara signifikan lebih sulit.) File ketiga adalah sepuluh menit dari rekaman Anda benar-benar di mana sepertiga pertama sebagian besar bernafas, sepertiga tengah campuran pernapasan / mendengkur, dan sepertiga terakhir adalah mendengkur yang cukup mantap. (Anda mendapatkan batuk untuk bonus.)
Ketiga file telah diubah namanya dari ".wav" menjadi "_wav.dat", karena banyak browser membuatnya sangat sulit untuk mengunduh file wav. Ubah nama mereka kembali menjadi ".wav" setelah mengunduh.
Pembaruan: Saya pikir entropi adalah "melakukan trik" untuk saya, tetapi ternyata sebagian besar merupakan kekhasan dari kasus uji yang saya gunakan, ditambah algoritma yang tidak dirancang dengan terlalu baik. Secara umum, entropi tidak banyak membantu saya.
Saya kemudian mencoba teknik di mana saya menghitung FFT (menggunakan beberapa fungsi jendela berbeda) dari keseluruhan sinyal (saya mencoba kekuatan, fluks spektral, dan beberapa ukuran lain) sampel sekitar 8 kali per detik (mengambil statistik dari siklus FFT utama yaitu setiap 1024/8000 detik). Dengan 1024 sampel, ini mencakup rentang waktu sekitar dua menit. Saya berharap bahwa saya akan dapat melihat pola dalam hal ini karena irama lambat dari mendengkur / bernafas vs suara / musik (dan itu mungkin juga cara yang lebih baik untuk mengatasi masalah " variabilitas "), tetapi sementara ada petunjuk dari sebuah pola di sana-sini, tidak ada yang benar-benar dapat saya kaitkan.
( Info lebih lanjut: Untuk beberapa kasus, FFT besarnya sinyal menghasilkan pola yang sangat berbeda dengan puncak yang kuat di sekitar 0,2 Hz dan harmonik tangga. Tetapi polanya hampir tidak terlalu berbeda pada sebagian besar waktu, dan suara dan musik dapat menghasilkan kurang berbeda versi dari pola yang sama. Mungkin ada beberapa cara untuk menghitung nilai korelasi untuk angka pantas, tetapi tampaknya akan membutuhkan kurva yang cocok dengan sekitar polinomial orde 4, dan melakukan hal itu satu detik di telepon tampaknya tidak praktis.)
Saya juga berusaha melakukan FFT yang sama dengan amplitudo rata-rata untuk 5 "band" individual yang telah saya bagi spektrumnya. Band-band tersebut adalah 4000-2000, 2000-1000, 1000-500, dan 500-0. Pola untuk 4 pita pertama umumnya mirip dengan pola keseluruhan (meskipun tidak ada pita "nyata" nyata, dan sering kali semakin kecil sinyal di pita frekuensi yang lebih tinggi), tetapi pita 500-0 umumnya hanya acak.
Bounty: Saya akan memberi Nathan hadiah, meskipun dia tidak menawarkan sesuatu yang baru, mengingat bahwa itu adalah saran yang paling produktif hingga saat ini. Saya masih memiliki beberapa poin, saya akan bersedia memberikan kepada orang lain, jika mereka datang dengan beberapa ide bagus.
sumber
Jawaban:
Latar Belakang
Menurut makalah di bawah ini, mendengkur ditandai dengan puncak sekitar 130Hz, dan sepenuhnya terkonsentrasi di bawah 12kHz:
Mari kita lihat apakah kita dapat memanfaatkan ini.
Contoh MATLAB
Kami memiliki catatan yang buruk tentang mendengkur anak ; file WAV 10 menit, 8-bit mono. Tingkat pengambilan sampel adalah 8KHz, yang berarti bandwidth sinyal audio adalah 4KHz. Levelnya sangat rendah jadi saya akan meminta terlebih dahulu.
Sumbu y dinormalisasi ke bandwidth, 4KHz, sehingga takik yang Anda lihat di 0,1 sesuai dengan frekuensi 400Hz. Ada lonjakan yang berhubungan dengan batuk pada ~ 186s; abaikan itu. Secara samar-samar kita bisa melihat takik pada setiap dengkuran. Bukan hanya itu, tetapi mereka tampaknya terkonsentrasi di bawah 0,2 x 4KHz = 800Hz. Mari kita lihat lebih dekat.
Kali ini sumbu frekuensi diberi label dalam Hertz. Sekarang takik cukup jelas. Kita bahkan dapat melihat nada suara dari gangguan saluran listrik mulai dari 60Hz (180Hz, 300Hz, 420Hz). Sekarang tiba esensi dari algoritma: mari kita mengklasifikasikan sinyal berdasarkan energi dalam subband ini, dengan derau garis dihilangkan.
Jika kita ingin menjadi mewah, kita dapat membuang paku yang terlalu besar:
SNR rendah, bermanifestasi dalam kesulitan dalam membedakan sinyal di plot pertama, berarti kita memiliki kelonggaran hanya setengah standar deviasi (nilainya 4,1). Batang menandai dengkuran.
sumber
Hanya melempar ini ke sini untuk menutupi semua kemungkinan, Anda mungkin dapat menggunakan entropi, saya tidak tahu apa level entropi dari dengkuran vs ucapan, tetapi apakah itu cukup berbeda yang mungkin berhasil. http://www.ee.columbia.edu/~dpwe/papers/ShenHL98-endpoint.pdf
sumber
Statistik domain waktu mungkin? Mendengkur tampaknya memiliki periode stabil yang relatif lama sedangkan energi bicara berubah sedikit selama periode waktu yang singkat. Ini bisa dikombinasikan dengan analisis spektral juga. Vokal memiliki konten frekuensi lebih rendah dan konsonan frekuensi lebih tinggi. Selama pidato, spektrum dapat dengan cepat memantulkan bolak-balik antara negara-negara tersebut sementara penyimpanan dapat tetap dalam satu negara untuk periode waktu yang lebih lama.
sumber
Kompleksitas spektral dari waktu ke waktu. Saya akan berhipotesis bahwa ucapan manusia mungkin menggunakan lebih banyak fonem, dan dengan kompleksitas statistik yang lebih besar dalam urutannya daripada urutan mendengkur fonem.
Ini mungkin masalah yang jauh lebih mudah daripada pengenalan ucapan terus-menerus, karena Anda tidak perlu benar-benar mengenali fonem atau kalimat tertentu dengan benar, hanya jumlah segmen spektral yang terdengar fonem, dan beberapa kompleksitas ukuran statistik dari urutannya (entropi atau uji kompresibilitas mungkin berhasil). Kemudian lihat apakah Anda dapat menentukan ambang batas yang dapat diandalkan untuk tindakan ini.
sumber