Saya mencoba untuk menulis sebuah algoritma yang secara otomatis akan membagi potongan audio dengan rekaman panggilan burung. Data input saya adalah file gelombang berdurasi 1 menit dan pada output saya ingin mendapatkan panggilan terpisah untuk analisis lebih lanjut. Masalahnya adalah bahwa rasio signal-to-noise cukup mengerikan karena kondisi lingkungan dan kualitas mikrofon yang buruk (sampel mono, 8 kHz).
Saya akan sangat berterima kasih atas saran tentang bagaimana untuk melangkah lebih jauh dengan pengurangan kebisingan.
Berikut adalah contoh input saya, rekaman audio satu menit dalam format gelombang: http://goo.gl/16fG8P
Seperti inilah sinyalnya:
Penyaringan band-pass, di mana saya hanya menyimpan apa pun di antara 1500 - 2500 Hz, memang memperbaiki situasi, tetapi masih jauh dari harapan. Dalam spektrum ini masih banyak noise hadir.
Saya juga merencanakan energi rata-rata jangka panjang (lebih dari interval 32 sampel) dan menghapus beberapa klik darinya. Inilah hasilnya:
Dengan semua noise yang tersisa saya harus menetapkan ambang batas yang sangat rendah untuk algoritma deteksi awal untuk memilih 10 detik terakhir panggilan burung. Masalahnya adalah jika saya men-tweak sedemikian rupa maka dalam rekaman berikutnya saya bisa mendapatkan banyak positif palsu.
Filter moving average membantu sedikit dengan kebisingan angin. Ada ide lain? Saya sedang berpikir tentang "Pengurangan Spektral", tetapi di sini sepertinya saya saya punya masalah ayam dan telur - untuk menemukan daerah hanya kebisingan saya harus segmen audio dan untuk segmen audio saya perlu menghilangkan kebisingan. Apakah Anda tahu ada perpustakaan yang memiliki algoritma ini atau beberapa implementasi dalam pseudo-code? Methinks Audacity menggunakan metode seperti itu untuk menghilangkan noise. Ini sangat efektif, tetapi diserahkan kepada pengguna untuk menandai area hanya noise.
Saya menulis dalam Python dan ini adalah proyek open-source gratis.
Terima kasih sudah membaca!