filter suara ucapan manusia

17

Adakah yang tahu filter untuk menipiskan non-ucapan? Saya menulis perangkat lunak pengenal ucapan dan ingin menyaring semuanya kecuali ucapan manusia. Ini akan mencakup kebisingan latar belakang, kebisingan yang dihasilkan oleh mikrofon yang jelek, atau bahkan musik latar. Saya sudah menerapkan filter urutan pertama yang mengkompensasi roll-off 6 dB dari spektrum daya, tapi saya masih mendengar suara (meskipun ucapannya terdengar jauh lebih jelas). Saya berpikir untuk menggunakan filter low-pass, tapi saya ragu melakukan itu karena dua alasan:

  1. Saya tidak tahu apakah pre-filter low-pass akan mengganggu sisa proses pidato. Meskipun telinga manusia hanya dapat mendeteksi suara lebih rendah dari 20 kHz, saya tidak ingin mengambil risiko menghilangkan harmonisa tingkat tinggi yang mungkin diperlukan untuk memproses pidato (meskipun saya tidak tahu apakah ini masalahnya atau tidak. Tetapi Saya tidak ingin mengambil risiko).

  2. Saya mengerti bahwa eksitasi konsonan tertentu (seperti f, h, dan s) hampir seluruhnya merupakan white noise. Saya tidak ingin menerapkan filter noise yang akan menghilangkan noise yang baik , jadi untuk berbicara.

Idealnya, saya hanya ingin berbicara dengan orang yang berbicara di mikrofon. Jika Anda punya ide, atau ada sesuatu yang saya lewatkan, tolong beri tahu saya. Sangat dihargai!

Zetta Suro
sumber
Saya seharusnya. Saya akan membiarkannya terbuka, hanya karena saya telah melihat pertanyaan serupa (filter dan pemrosesan akustik) di sini yang dijawab dengan baik.
Zetta Suro
Seperti ini: stackoverflow.com/questions/6452926/…
Zetta Suro
Rule of thumb: jika Anda ingin tahu bagaimana menerapkan algoritma DSP yang diberikan misalnya dalam bahasa tertentu atau pada platform tertentu, maka pada topik untuk SO. Jika itu pertanyaan tentang algoritma / teknik DSP tanpa sudut pemrograman tertentu maka hampir pasti milik DSP.SE (di mana ia juga akan cenderung mendapatkan jawaban kualitas yang lebih baik).
Paul R
Kena kau. Apakah Anda bermigrasi ke sini? Jika demikian, terima kasih. Saya tidak tahu bagaimana cara memigrasikannya, jadi saya akhirnya bertanya kembali di sini.
Zetta Suro
Bukan saya - saya menandai dan bertanya apakah moderator bisa memindahkannya jadi saya kira salah satu TPTB melakukannya (terima kasih kepada siapa pun itu!).
Paul R

Jawaban:

8

Saluran komunikasi ucapan seperti yang digunakan dalam telepon biasanya memiliki respons frekuensi 300 Hz hingga 3 kHz. Meskipun ini menolak banyak energi dalam ucapan normal, kejelasan masih cukup baik - masalah utama tampaknya bahwa konsonan plosif tertentu , misalnya "p" dan "t", dapat sedikit sulit untuk dibedakan tanpa komponen frekuensi yang lebih tinggi .

Jadi Anda mungkin mencari "sweet spot" di suatu tempat antara menggunakan bandwidth 20 Hz - 20 kHz penuh yang biasanya ditemukan dalam audio konsumen dan pemfilteran paling agresif yang digunakan untuk komunikasi suara (lihat di atas). Saya akan menyarankan mulai dengan filter bandpass dari katakanlah 50 Hz hingga 8 kHz. Ini mungkin hanya akan meningkatkan SNR dengan beberapa dB terbaik, tetapi mungkin membantu, terutama jika Anda memiliki banyak kebisingan latar belakang frekuensi tinggi.

Paul R
sumber
Terima kasih! Seorang teman saya sebenarnya menyarankan saluran suara, tetapi saya curiga itu akan melemahkan terlalu banyak energi dalam beberapa konsonan. Saya akan mencoba 50 Hz hingga 8 kHz dan melihat cara kerjanya!
Zetta Suro
2
Memilih jawaban ini hanya karena itu adalah solusi "cepat" yang saya cari. Sisa jawaban akan membutuhkan lebih banyak penelitian yang saya pasti akan melihat ke dalam, karena mereka akan membantu dalam jangka panjang, tetapi ini adalah solusi filter sederhana yang awalnya saya cari.
Zetta Suro
5

Menggunakan filter pass band yang cocok dengan bandwidth pembicaraan akan membantu.

Jika Anda memiliki beberapa mikrofon (seperti yang terjadi pada ponsel), ada banyak metode seperti ICA yang dapat memanfaatkannya - tetapi pertanyaan Anda mengisyaratkan bahwa Anda hanya memiliki satu input.

Yang ingin Anda lakukan adalah "pemisahan sumber satu-mikrofon" (nama diambil dari kertas inovatif Roweis), juga disebut "sensor tunggal". Peringatan: ini masih jauh dari masalah yang diselesaikan, dan semua penelitian di bidang ini sangat baru, tanpa algoritma atau pendekatan menjadi "pemenang yang jelas" (tidak seperti model campuran gaussian + FST untuk pengenalan suara).

Kerangka kerja yang baik untuk melakukannya adalah melalui pemfilteran Wiener. Lihat Benaroya et al. "Pemisahan Sumber Sensor Tunggal berdasarkan filter Wiener dan beberapa jendela STFT" (Baca bagian 1 & 2, jangan repot-repot dengan hal multiresolusi kecuali Anda benar-benar membutuhkannya). Singkatnya, Anda menghitung STFT dari sinyal Anda, dan untuk setiap frame STFT, Anda mencoba untuk mendapatkan perkiraan spektrum suara dan spektrum kebisingan, dan Anda menggunakan pemfilteran Wiener untuk memulihkan perkiraan spektrum suara yang terbaik dari itu (ini mirip dengan "soft-masking" spektrum).

Masalah Anda sekarang adalah sebagai berikut: diberi bingkai STFT, perkirakan pidato dan komponen derau darinya. Pendekatan yang lebih sederhana yang dijelaskan dalam makalah oleh Benaroya adalah melalui Vector-quantization - mengambil beberapa jam pidato oleh banyak pembicara, menghitung STFT, menjalankan LBG di atasnya untuk menemukan codebook dari 512 atau 1024 frame ucapan yang khas; lakukan hal yang sama untuk kebisingan. Sekarang, dengan diberi kerangka sinyal input Anda, proyeksikan non-negatif (prosedur pembaruan gradien multiplikasi dijelaskan dalam makalah) ke basis bicara dan derau, dan Anda mendapatkan perkiraan bicara dan derau Anda. Jika Anda tidak ingin berurusan dengan proyeksi non-negatif, cukup gunakan tetangga terdekat. Ini benar-benar hal paling sederhana yang mungkin dapat bekerja di departemen "pemisahan sumber sensor tunggal".

Perhatikan bahwa sistem pengenalan ucapan memang dapat memberikan beberapa input untuk sistem pemisahan. Lakukan pengodean sandi pertama kali menggunakan sistem pengenalan ucapan Anda. Untuk setiap frame, ambil vektor MFCC rata-rata dari gaussian yang mendapat skor terbaik. Balikkan itu menjadi spektrum. Boom, Anda memiliki topeng yang memberi Anda lokasi spektral yang paling mungkin dari bit seperti-bicara, dan Anda dapat menggunakannya sebagai input untuk filter Wiener. Ini kedengarannya seperti melambaikan tangan, tetapi geistnya adalah bahwa untuk memisahkan sumber, Anda memerlukan model yang bagus untuk itu, dan sistem pengenalan ucapan yang diambil mundur adalah model generatif yang bagus untuk sinyal ucapan.

pichenettes
sumber
1

Anda mungkin harus melihat melakukan Analisis Komponen Independen (ICA) karena masalah Anda sangat mirip dengan masalah "pesta koktail" yang sering digunakan untuk menggambarkan ICA. Singkatnya ICA menemukan komponen-komponen sinyal Anda yang tidak tergantung satu sama lain. Ini mengandaikan bahwa kebisingan lain di lingkungan (pencuci piring, white noise, kipas angin) akan terlepas dari sumber sinyal suara dan dapat dipisahkan.

ICA mirip dengan PCA (analisis komponen utama) tetapi bukannya memaksimalkan varians pada sumbu prinsip, itu memaksimalkan independensi. Ada banyak implementasi ICA yang harus dihubungkan ke lingkungan pengkodean apa pun yang Anda gunakan.

gallamine
sumber
4
ICA membutuhkan sebanyak mungkin sinyal input karena ada sumber untuk memisahkan. Dalam denoising ucapan, kita hanya memiliki satu sinyal dan ICA karenanya tidak membantu.
pichenettes