Penyaringan audio streaming

9

Diberikan sesuatu seperti 103 titik data ( ), DFT akan mengembalikan nilai frekuensi 103. Kemudian untuk melakukan sesuatu seperti memfilter frekuensi tinggi melibatkan pengaturan nilai frekuensi tinggi dari DFT ke nol, dan melakukan DFT terbalik untuk mendapatkan kembali 103 titik data yang mewakili sinyal asli tanpa frekuensi tinggi.N=103

Ini masuk akal bagi saya memberikan semua 103 poin data sekaligus. Tetapi bagaimana dengan streaming file WAV audio yang agak besar (katakan misalnya ). Jika seseorang ingin menyaring frekuensi tinggi maka pendekatan yang saya jelaskan pada seluruh data poin secara logis masuk akal. Tapi itu tidak masuk akal saat streaming file WAV untuk pemutaran. Apa yang dilakukan untuk memfilter frekuensi tinggi pemutaran streaming file audio?N=105105

pengguna782220
sumber

Jawaban:

12

FFT -> koefisien zeroing -> IFFT bukan cara yang benar dalam melakukan penyaringan - filter aktual yang direalisasikan dengan melakukannya memiliki karakteristik yang buruk.

Cara penyaringan sinyal yang benar adalah dengan menghitung koefisien filter digital , suatu proses yang dikenal sebagai desain filter dan untuk itu tersedia sejumlah besar perangkat / dokumentasi perangkat lunak, dan menerapkannya pada urutan input Anda. Singkatnya, ini terdiri dalam mengevaluasi untuk setiap sampel kombinasi linear dari sampel input masa lalu, dan sampel keluaran masa lalu. Bergantung pada persyaratan filter Anda dalam hal penolakan / ripple stop-band, hanya beberapa koefisien yang diperlukan, membuatnya jauh lebih efisien daripada FFT. Karena satu-satunya informasi yang diperlukan untuk menghitung sampel output adalah beberapa sampel input / output masa lalu, tidak ada masalah untuk menerapkannya pada streaming audio.

Anda perlu menggunakan FFT hanya jika Anda memutuskan untuk menggunakan filter FIR, dan jika persyaratan filter Anda menyebabkannya memiliki koefisien yang sangat besar. Dalam kasus khusus ini, akan lebih efisien untuk menerapkan filter ke blok berturut-turut dari data input Anda melalui FFT dan tumpang tindih-tambahkan .

pichenettes
sumber
8

Cara terbaik untuk menerapkan pemfilteran domain frekuensi untuk aliran sinyal adalah tumpang tindih add (atau penyimpanan rasa terkait tumpang tindih, atau blok convolvers, dll.).

Anda pada dasarnya mengambil dalam satu frame pada satu waktu (katakan 1024 sampel) Nol bantalan dua kali panjangnya (2048), lakukan FFT, gandakan dengan fungsi transfer (juga nol empuk) filter, lakukan FFT terbalik. Simpan 1024 sampel terakhir sebagai tumpang tindih untuk frame berikutnya, tambahkan tumpang tindih dari frame sebelumnya 1024 sampel pertama dan ini adalah output Anda. Untuk setiap 1024 sampel input, Anda mendapatkan sampel 1024 output dan Anda cukup mengulangi ini untuk frame berikutnya sampai aliran selesai.

Seluruh bisnis dengan bantalan nol dan tumpang tindih diperlukan karena perkalian dalam domain frekuensi menerapkan konvolusi melingkar dan Anda benar-benar menginginkan konvolusi linier di sebagian besar aplikasi.

Ada beberapa variasi dari metode ini yang menggunakan fungsi dan tumpang tindih jendela yang berbeda tetapi semuanya memiliki prinsip yang sama: memotongnya menjadi potongan-potongan kecil dan memproses satu potongan sekaligus.

Hilmar
sumber
Apakah ada buku yang membahas detail ini?
user782220
@ user782220: dsp.stackexchange.com/questions/427/…
Martin Thompson