Mengenali data yang dikelompokkan menjadi bentuk

9

Saya sedang mengerjakan sebuah proyek dengan Python untuk mendeteksi dan mengklasifikasikan beberapa lagu burung, dan saya telah menemukan diri saya pada posisi di mana saya perlu mengubah file gelombang menjadi data frekuensi vs. waktu. Ini belum terlalu banyak masalah, tetapi untuk dapat mengklasifikasikan suku kata yang berbeda ke dalam kelompok, saya perlu menulis sesuatu yang akan mendeteksi ketika data berkelompok menjadi bentuk tertentu. Untuk memberi Anda gambaran tentang seperti apa data itu, berikut adalah gambar bagaimana data itu terlihat ketika diplot:

masukkan deskripsi gambar di sini

Saya perlu beberapa cara untuk mendapatkan setiap suku kata individu (setiap bentuk dengan pemisahan di kedua sisi) dan menyimpannya ke variabel atau ke file mereka sendiri sehingga saya dapat menjalankan korelasi Pearson di antara mereka menggunakan SciPy.

Juga, saya lebih suka Python, tetapi saya terbuka untuk pengkodean dalam bahasa lain jika Anda memiliki cara lain untuk melakukannya.

Terima kasih!

smckee
sumber
Saya tidak sepenuhnya terbiasa dengan apa yang akan saya sarankan, tetapi sepertinya Transformasi Wavelet Berkelanjutan dengan wavelet yang berisi properti suku kata Anda adalah sesuatu yang patut untuk dilihat.
heltonbiker
Apakah Anda perlu menemukan bentuk atau Anda mencoba untuk mengklasifikasikan burung? Jika demikian, apakah menggunakan suara Model Markov Tersembunyi?
Mikhail

Jawaban:

2

Dua pertanyaan:

1 / Dekat 8-an, kita bisa mengamati pitch stabil untuk sekitar 100 ms atau lebih, kemudian kenaikan tiba-tiba turun hingga 8,5. Apakah seluruh urutan ini (8s hingga 8.5s) membentuk satu entitas, atau apakah Anda menganggap dua tahap (stabil kemudian menurun) sebagai dua entitas?

2 / Apakah Anda ingin bekerja dengan atau tanpa pengawasan. Apakah Anda tahu sebelumnya "pola" yang harus dicari?

  • Jika Anda ingin bekerja tanpa pengawasan (misalkan Anda telah mengumpulkan rekaman dan bertujuan mengekstraksi "representasi terstruktur" darinya), masalah Anda mirip, pada langkah pertama, dengan deteksi aktivitas suara. Cukup gunakan intensitas sinyal, mungkin dalam hubungannya dengan metrik "pitchiness" (katakan rasio maksimum autokorelasi dalam kisaran brid, 1kHz - 5kHz di sini) untuk mendeteksi segmen di mana ada nada bernada aktif yang kuat. Median-filter urutan yang dihasilkan untuk menghaluskannya, dan kemudian ambang untuk mendapatkan segmen yang berbeda. Setelah Anda membagi sinyal menjadi beberapa segmen, Anda dapat melakukan hal-hal menarik dengannya. Misalnya, Anda dapat mengekstrak lintasan pitch masing-masing untuk mereka (urutan dengan puncak frekuensi terkuat untuk setiap frame FFT, atau sesuatu yang lebih kuat diekstraksi dengan penaksir pitch yang benar), menggunakan DTW untuk menghitung matriks jarak berpasangan antara setiap blok, dan menggunakan algoritma pengelompokan (k-means, pengelompokan aglomeratif) untuk mengidentifikasi kelompok pola nada yang serupa (segmen 8: 8.5 dan 10: 10.5). Sangat mungkin bahwa pendekatan yang tidak diawasi akan terlalu banyak segmen - misalnya 7.6: 8.5 dan 9.6: 10.5 akan diakui sebagai pengulangan dari dua blok yang sama, sedangkan bagi Anda mereka secara fundamental dapat menjadi satu pola tunggal, tetapi Anda dapat menggunakan sesuatu sepertiSequitur memiliki satu tingkat struktur yang lebih tinggi.

  • Jika Anda memiliki kamus "pola" yang telah ditentukan yang ingin Anda beri label sinyal, Anda sebaiknya mengikuti jenis pendekatan yang digunakan untuk pengenalan suara, dengan satu-satunya perbedaan utama bahwa pengenalan suara tidak memperhitungkan, sementara di lemparan kasus adalah satu-satunya informasi yang harus dipertimbangkan! Sistem pengenalan wicara menangani tugas segmentasi dan pengenalan dalam satu operasi pendekodean FST.

pichenettes
sumber