Pengurangan kebisingan dari audio yang sangat bising

8

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:

Sinyal input saya (8 kHz).  Area yang ditandai menunjukkan panggilan burung

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.

Spektrogram

Saya juga merencanakan energi rata-rata jangka panjang (lebih dari interval 32 sampel) dan menghapus beberapa klik darinya. Inilah hasilnya:

Energi rata-rata jangka panjang

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!

Lukasz Tracewski
sumber
Selamat datang di DSP.SE. Ini pertanyaan yang luar biasa! Saya harap Anda bisa mendapatkan petunjuk yang bagus di sini.
Telepon
@Lukasz Tracewski Pak yang terhormat: Meskipun sudah terlambat tetapi saya sedang mengerjakan proyek yang sama sehingga saya memiliki masalah seperti bagaimana saya dapat membuat spektrogram dari file wav. Anda dapat menghemat waktu lebih lanjut karena saya mencoba menyelesaikan masalah ini dari 2 bulan terakhir. Terima kasih sebelumnya. Setiap hel akan sangat dihargai
Mubeen Khan
@MubeenKhan Maksud Anda membantu memproduksi spektrogram dari file audio? Ada lusinan alat dan perpustakaan yang sesuai untuk tujuan itu, apakah Anda memerlukan rekomendasi? Atau apakah Anda bertanya tentang pengurangan kebisingan?
Lukasz Tracewski

Jawaban:

4

Pada akhirnya apa yang telah terbukti menjadi solusi terbaik adalah deteksi onset berdasarkan frekuensi tinggi atau kandungan energi. Sebelum bisa bekerja saya harus menggunakan filter high-pass untuk memotong 1 kHz pertama, karena mengandung terlalu banyak noise.

Setelah saya memiliki area noise-only, saya dapat menggunakan profilnya untuk mengurangi noise dari sisa sampel.

Satu perpustakaan yang saya temukan sangat berguna adalah Aubio . Ini memiliki serangkaian contoh yang baik dan menyediakan banyak algoritma untuk dipilih untuk deteksi onset.

Lukasz Tracewski
sumber
0

Saya tidak tahu banyak tentang pengurangan noise audio tetapi setelah pengurangan noise yang cepat dan kotor dari pass-band yang difilter (sekitar 1500-3000 hz) saya mendapatkan ini:

https://dl.dropboxusercontent.com/u/98395391/signal_denoised.wav

Saya pikir itu terdengar sedikit lebih baik dari sinyal yang disaring dan asli.

Dengan filter Wiener sederhana saya mendapatkan hasil yang sangat mirip.

Yozek
sumber
Kecuali saya salah paham dengan Anda, maka sepertinya Anda merujuk pada sesuatu yang sudah saya lakukan pada paragraf kedua dari pertanyaan saya (tepat di bawah grafik pertama). Dengan metode yang dijelaskan dalam jawaban saya, saya dapat menemukan semua onsets dan kemudian menerapkan pengurangan spektral, yang memberikan hasil yang lebih baik. Sayangnya itu juga menghasilkan apa yang disebut "nada musikal", yang sekarang menjadi perhatian utama saya. Bagaimanapun, terima kasih!
Lukasz Tracewski