Ini merupakan kelanjutan dari pertanyaan sebelumnya .
Saya mencoba menganalisis suara pernapasan dan dengkuran, dan sementara saya bisa mendeteksi dengkuran dengan cukup baik sekarang, pernapasan adalah tantangan yang lebih besar.
Saya telah belajar bahwa jika saya memecahkan rentang frekuensi yang dianalisis (sekitar 4KHz, sampel pada sekitar 8KHz, dengan ukuran 1024) menjadi sekitar 5 subrange, sangat sering salah satu subrange menunjukkan sensitivitas yang baik (menggunakan perbedaan spektral) yang terkubur dalam kebisingan di kisaran keseluruhan. Caranya adalah menentukan subrange mana yang harus "dipercaya" kapan.
Mungkin subrange "dapat dipercaya" akan menunjukkan variabilitas pada tingkat antara 2Hz dan 0,05Hz, sedangkan subrange "buruk" akan berperilaku lebih acak, dengan sebagian besar variasinya berada pada interval yang lebih pendek.
Saya dapat menggabungkan beberapa jenis algoritma untuk menghaluskan nilai pada resolusi sub-detik dan kemudian menghitung variabilitas dalam interval yang lebih lama, tapi saya ingin tahu apakah tidak ada algoritma "kalengan" untuk hal-hal semacam ini - sesuatu dengan mungkin sedikit teori di baliknya?
Ada saran?
[Catatan: Saya menyadari bahwa secara teori, seseorang dapat menggunakan FFT untuk mengekstrak info ini, tetapi itu sepertinya menggunakan tongkat baseball untuk membunuh kutu. Mungkin sesuatu yang sedikit lebih ringan?]
Ditambahkan:
Dalam arti (menggunakan analogi) saya mencoba mendeteksi sinyal "baseband" dalam transmisi RF (hanya "RF" adalah frekuensi audio, dan "baseband" di bawah 8Hz). Dan, dalam arti tertentu, "RF" adalah "spread spectrum" - suara yang ingin saya deteksi cenderung menghasilkan banyak harmonisa dan / atau memiliki beberapa komponen frekuensi terpisah, jadi jika satu pita spektrum terlalu berisik saya dapat mungkin memanfaatkan yang lain. Tujuannya adalah untuk pada dasarnya menentukan beberapa metrik yang menyerupai SNR untuk berbagai pita frekuensi, dengan asumsi bahwa sebagian besar "noise" adalah> 2Hz dan sinyal saya kurang dari 2Hz.
Saya memiliki input untuk algoritma ini amplitudo mentah (jumlah amplitudo FFT pada semua frekuensi termasuk) untuk setiap band, diukur pada interval 8Hz.
(Perlu dicatat bahwa, sementara saya belum melakukan pengukuran SNR formal, SNR keseluruhan di seluruh spektrum yang diproses tampaknya sering berada di dekat atau di bawah 1,0 - jika Anda secara visual mengamati amplop suara dalam alat seperti Audacity, tidak ada modulasi dari amplop terlihat (meskipun telinga dapat dengan jelas membedakan suara pernapasan). Inilah sebabnya mengapa perlu untuk menganalisis band untuk menemukan mereka yang memiliki SNR yang layak.)
sumber
Jawaban:
Daniel,
Setelah membaca ulang pertanyaan Anda, tampaknya apa yang telah saya pelajari dikenal sebagai 'Bandwidth Gabor "mungkin berguna bagi Anda dalam hal ini, karena Anda mencoba mengukur' variabilitas spektral '. (Dilip memberikan jawaban yang baik untuk saya pertanyaan tentang Spectral Moments di sini).
Ketika saya mempelajarinya lebih lanjut, Gabor-Bandwidth tampaknya benar-benar hanya menjadi ukuran seberapa 'spread' spektrum dari rata-rata. (Karenanya manipulasi momen).
Lihatlah dan lihat apa yang Anda pikirkan.
sumber
Sudahkah Anda mencoba fluks spektral. Ada implementasi MATLAB di sini: http://blog.weisu.org/2009/12/spectral-flux-sf-in-audio.html
sumber
Apa yang Anda butuhkan tampaknya jauh lebih besar daripada kutu. Jadi Anda mungkin perlu pergi ke arah yang berlawanan, dan melakukan lebih dari sekedar FFT. Mungkin cepstrum frekuensi rendah atau analisis cepstral untuk menemukan frekuensi "exiter" Anda.
sumber
Input Anda adalah representasi seperti spektogram beresolusi rendahX( m , n ) di mana m adalah indeks bingkai dan n band (subrange index). Baik?
Inilah yang saya sarankan:
Untuk setiap n:
Pilih subband dengan puncak autokorelasi tertinggi (= lebih "bernada").
Langkah-langkah memuncak untuk dilihat:
Metrik semacam ini misalnya digunakan untuk membedakan ucapan yang disuarakan / tidak disuarakan.
sumber