Filter lowpass Downsampling untuk audio: FIR atau IIR?

8

Saya sedang mengerjakan proyek pemrosesan audio real-time di mana saya harus menurunkan sampel 44,1 kHz ke tingkat pengambilan sampel yang lebih rendah yang pada dasarnya ditentukan untuk mengurangi kompleksitas komputasi. Saya mencari filter downsampling yang layak, dan saya menemukan artikel yang menyarankan IIR (terutama elliptic) dan FIR (terutama fase minimum). Filter fase minumum FIR belum tentu bekerja untuk saya, karena saya perlu filter fase linier. Jadi opsinya adalah FIR fase linier yang bisa memiliki latensi yang cukup besar di dalamnya atau IIR pemfilteran ganda ( filtfiltperintah MATLAB ) yang pertama-tama memfilter maju kemudian mundur.

Apa saja kelebihan dan kekurangan FIR dan IIR sebagai filter downsampling? Mana yang lebih praktis dalam aplikasi waktu nyata?

Phonon
sumber

Jawaban:

10

Jika fase linier adalah persyaratan, itu mungkin akan mengarahkan Anda menuju implementasi FIR. Dimungkinkan untuk membuat filter IIR yang memiliki perkiraan fase linier, tetapi mudah untuk merancang FIR fase-linear.

Jika Anda khawatir tentang latensi, pemfilteran maju-mundur seperti pada filtfiltbukanlah pilihan yang baik. Secara umum, itu benar-benar dimaksudkan untuk digunakan proses offline, karena untuk menerapkan teknik ini dengan tepat, Anda harus menjalankan seluruh sinyal melalui maju, kemudian melakukan hal yang sama secara terbalik. Itu menyiratkan bahwa Anda memiliki akses ke seluruh sinyal sekaligus, yang tidak sepadan dengan penundaan rendah.

Secara umum, filter FIR akan membutuhkan urutan yang lebih tinggi untuk serangkaian persyaratan kinerja yang diberikan. Namun, filter FIR membawa beberapa keuntungan nyata, seperti stabilitas yang dijamin, kerentanan yang lebih rendah terhadap kesalahan pembulatan (karena kesalahan kuantisasi tidak diumpankan melalui filter, meskipun Anda dapat mengompensasinya dengan beberapa peningkatan kompleksitas), dan hanya dicapai respons fase linier. Selain itu, implementasi filter FIR yang efisien tersedia untuk banyak arsitektur prosesor, mengurangi biaya dari keran tambahan.

Cara lain untuk mengurangi biaya tap ekstra untuk filter FIR dalam situasi Anda adalah memanfaatkan teknik pemrosesan sinyal multirate yang efisien. Khususnya, Anda dapat menggunakan pendekatan penipisan polifase untuk secara signifikan mengurangi jumlah perhitungan yang Anda lakukan dalam proses penipisan sinyal Anda. Ini memiliki efek mengurangi jumlah ketukan efektif (dalam hal kompleksitas komputasi) dalam filter penipisan. Selain itu, jika Anda perlu memusnahkan oleh faktor besar, maka pendekatan multistage dapat membantu mengurangi beban Anda. Buku DSP pengantar Lyons memiliki beberapa bahan yang mudah dibaca tentang topik-topik ini.

Mengingat parameter yang lebih spesifik dari sistem Anda, orang dapat membuat rekomendasi yang lebih runcing. Apa persyaratan desain filter Anda? Kemampuan komputasi seperti apa yang dimiliki platform Anda? Berapa tingkat sampel yang akan Anda hilangkan?

Jason R
sumber
Penipisan polifase adalah persis apa yang saya cari! Terima kasih =)
Telepon
@ Phonon Dan jika Anda ingin menaikannya lebih jauh, lihat implementasi 'CIC' (Cascade Integrator Comb). Itulah teknik yang biasanya digunakan ketika perbedaan dalam tingkat sampling sangat besar.
Spacey
Filter CIC populer untuk implementasi perangkat keras (seperti pada FPGA) karena tidak memerlukan perkalian, hanya penundaan dan penambahan. Ini dilakukan dengan mengorbankan beberapa derajat kebebasan untuk seperti apa respons filter sebenarnya. Jika Anda memiliki persyaratan ketat untuk respons frekuensi decimator, Anda dapat melakukan lebih baik daripada pendekatan CIC, asalkan Anda dapat mengakomodasi beban kerja.
Jason R
@JasonR Youve memuncak keingintahuan saya - apa yang lebih baik dari CIC? (Saya berasumsi Anda masih berbicara tentang melakukan yang lebih baik dari CIC untuk FPGA atau kita berbicara tentang offline?)
Spacey
Komentar saya mengacu pada fakta bahwa Anda memiliki sedikit kendali atas respons frekuensi filter CIC bila dibandingkan dengan filter FIR umum, yang dapat Anda rancang untuk memiliki cutoff yang sewenang-wenang jika Anda memberikan cukup ketukan. Seperti kebanyakan masalah desain filter, Anda memerlukan semua spesifikasi kinerja di atas meja untuk memilih pendekatan terbaik.
Jason R
1

Seberapa rendah yang Anda maksud dengan "latensi rendah"?

Jika Anda berarti di bawah 1 mS dengan pengurangan laju sampel yang besar, maka FIR fase minimum mungkin diperlukan. Jika maksud Anda sekitar 1/30 detik, maka Anda bahkan mungkin dapat menerapkan filter FIR linier yang efisien menggunakan pendekatan penambahan / penyimpanan tumpang tindih FFT (konvolusi cepat).

hotpaw2
sumber
1

Sedikit masalah tentang kompleksitas waktu: Filter FIR dapat diubah-ubah, yang sangat membantu dalam arsitektur CPU modern. Selanjutnya, filter IIR mengambil hit kinerja karena nilai output saat ini tergantung pada nilai-nilai output sebelumnya, yang menghilangkan keuntungan dari pipelining.

MackTuesday
sumber