Faktor apa yang harus saya pertimbangkan ketika memilih realisasi filter IIR?

16

Filter IIR dapat diimplementasikan sebagai bentuk langsung 1 atau 2 . Tetapi bagaimana Anda memutuskan formulir mana yang akan digunakan? Apa pro dan kontra dari masing-masing?

anasimtiaz
sumber
Terlebih lagi, apa cara terbaik untuk mengimplementasikannya pada GPU.
Royi
2
@Drazick, GPU adalah gim yang sepenuhnya berbeda. membutuhkan pertanyaan lain.
Trevor Boyd Smith

Jawaban:

9

Pertama-tama, sedikit dari wikipedia tentang implementasi Direct Form I dan II .

Bentuk langsung saya memerlukan lebih banyak memori, tetapi merupakan strategi yang agak sederhana, dan kecil kemungkinannya memiliki masalah pembulatan dan resonansi.

Bentuk langsung II membutuhkan lebih sedikit memori, tetapi memiliki potensi untuk interaksi yang tidak biasa, jumlah yang lebih besar, dan kesalahan pembulatan yang lebih banyak. Banyak dari hal ini dapat dikurangi dengan mengalirkan filter yang lebih kecil, terutama filter urutan kedua.

PearsonArtPhoto
sumber
2
Dalam kedua kasus, Anda harus membuat bagian orde kedua.
Oliver Charlesworth
1
Jadi, singkatnya, apakah memory vs round-off error trade-off?
anasimtiaz
2
IMO jawaban super lemah. Secara teknis itu menjawab pertanyaan ... tetapi hanya "secara teknis". Saya ingin melihat beberapa kode sumber dalam suatu bahasa. Saya tahu cara menerapkan filter FIR yang mudah. Mari kita lihat kode sumber IIR.
Trevor Boyd Smith
2
Juga, dalam hal operasi matematika yang dilakukan per sampel, yang merupakan implementasi I atau II yang lebih baik?
anasimtiaz
1
saya tahu bagaimana melakukan penyaringan FIR. saya juga tahu apa bentuk langsung I / II / III / IV. Apa yang saya tidak punya pengalaman lakukan adalah IIR: desain atau implementasi. Komentar asli saya tidak terlalu konstruktif. Saya seharusnya mengatakan, "Saya mengerti apa bentuk langsung I-IV, bisakah Anda berbicara lebih banyak tentang bagaimana Anda merancang / mengimplementasikan filter IIR?"
Trevor Boyd Smith
9

Agak ketinggalan jaman tetapi mungkin pantas mendapatkan jawaban yang lebih komprehensif, terutama karena Direct Form II dapat membuat Anda mendapat banyak masalah. Pertama-tama, tidak ada "satu ukuran cocok untuk semua" dan pilihan terbaik tergantung pada aplikasi dan kendala spesifik Anda. Yang bisa Anda pertimbangkan adalah

  1. Memori: Direct Form II dan Transposed Form II mengambil sedikit memori keadaan kurang dari Direct Form I dan Transposed Form I tetapi dalam implementasi bagian orde dua bertingkat perbedaannya kecil
  2. MIPS: Dalam hal jumlah pengganda dan penambahan, keempat implementasi adalah sama. Namun tergantung pada set instruksi prosesor tertentu, mungkin ada perbedaan yang signifikan dalam efisiensi implementasi. Jadi "itu tergantung".
  3. Properti Fixed Point: Ini membuat perbedaan besar. Terutama Anda harus memastikan bahwa variabel keadaan Anda tidak meluap sehingga Anda perlu menganalisis fungsi transfer antara in / output dan variabel keadaan. Di sini Direct Form I dan Transposed Form II adalah pemenang yang jelas. Variabel status terikat ke + 106dB atau sekitar vs input dan output. Dalam Formulir II langsung misalnya, fungsi transfer dari input ke negara hanya diberikan oleh kutub. Saya telah melihat contoh dunia nyata di mana ini benar-benar dapat melebihi 100 dB gain. Ini mutlak tidak non untuk implementasi titik tetap.
  4. Noise: Dalam hal pemotongan dan kesalahan pembulatan, semua implementasi kira-kira sama. Masalah fungsi transfer variabel keadaan yang disebutkan dalam 3) juga memengaruhi hal ini hingga beberapa kali dan saya telah melihat masalah kebisingan yang dapat didengar dengan filter Direct Form II bahkan ketika menggunakan floating point 32-bit.

Jadi dalam ringkasan, Transposed Form II lebih sering daripada bukan pilihan terbaik. Dalam beberapa skenario titik tetap, terutama jika ada masalah kebisingan yang signifikan, Direct Form I lebih baik karena dapat lebih mudah ditambah dengan hal-hal seperti Error Spectrum Shaping, dll.

Hilmar
sumber
Ini adalah jawaban yang jauh lebih komprehensif dan lebih baik!
Lorem Ipsum
2
Saya menemukan hari ini - dengan cara yang jauh lebih sulit - mengapa Direct Form I adalah pilihan yang lebih baik untuk aplikasi saya. Terima kasih atas jawaban yang sangat bagus!
anasimtiaz
1

Kecuali jika Anda bekerja dengan sistem yang sangat langka sumber daya atau memiliki persyaratan ekstrem, dalam praktiknya tidak masalah apakah Anda memilih langsung formulir I atau II. Misalnya, jika Anda melakukan hal-hal di PC atau smartphone, itu sebenarnya tidak masalah. Secara pribadi, saya lebih suka Formulir I.

Masalah sebenarnya adalah MIPS dan jika Anda berencana untuk melakukan implementasi titik-tetap, hal-hal menjadi lebih rumit. Misalnya, pada ARM filter IIR Anda akan mengkonsumsi MIPS lebih banyak jika koefisien dan status filter 32-bit. 32 bit dalam status dan koefisien adalah persyaratan jika Anda perlu menerapkan misalnya filter low-pass dengan frekuensi cut-off yang sangat rendah. Dalam kasus tersebut, Anda dapat menggunakan tipe filter yang berbeda, seperti misalnya filter variabel-negara.

niaren
sumber
1

Selain perbedaan teknis seperti akurasi numerik, ada juga masalah stabilitas. Ketika filter digital memiliki pasangan kutub / nol yang saling berdekatan, respons frekuensi dapat menjadi tidak stabil di berbagai lokasi (biasanya mendekati Nyquist atau mendekati nol).

Ketika filter IIR digunakan untuk aplikasi musik, pilihan realisasi dapat memiliki efek mendalam pada stabilitas filter ketika parameter filter dimodulasi secara real time (misalnya, memvariasikan frekuensi cut-off pada low pass filter).

Saya memiliki aplikasi open source yang memungkinkan Anda mendengarkan perbedaan, sementara parameter yang bervariasi waktu seperti frekuensi cutoff atau gain puncak, dari masing-masing realisasi berikut:

  • Formulir Langsung I
  • Formulir Langsung II
  • Formulir Langsung Transposed I
  • Formulir Langsung Ditransformasikan II
  • Formulir Kisi
  • Variabel Status

Proyeknya ada di sini:

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Tangkapan layar

Vinnie Falco
sumber
1
Anda telah memposting ini beberapa kali, dan saya cenderung memberlakukan kebijakan spam kecuali jawaban Anda benar-benar disesuaikan dengan pertanyaan. Tak satu pun dari posting ini menjawab pertanyaan secara langsung, dan juga mempromosikan produk. Edit mereka untuk langsung menjawab pertanyaan atau mereka akan dihapus.
Telepon
0

Selain komentar di atas tentang memori, MIPS, kebisingan, dan stabilitas; ada faktor lain yang biasanya diabaikan. Faktor ini adalah kemampuan reset; yang kebetulan sangat penting dalam sebagian besar situasi saya.

Dengan implementasi Direct Form II, tidak ada status untuk output yang tertunda, oleh karena itu jika Anda "mengatur ulang" filter Direct Form II untuk mengatakan "5", output awalnya tidak akan menjadi 5. Saya merasa ini cukup berlawanan -intuitif yang telah menyebabkan beberapa frustrasi serius ketika menggunakan Simulink. Untuk alasan ini saya hampir selalu menggunakan implementasi Direct Form I. Sayangnya, Simulink hanya mendukung Direct Form I jika Anda memiliki kotak alat DSP, dan meskipun demikian ia tetap tidak membiarkan Anda mengatur kondisi awal dari sinyal input.

Kyle
sumber