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?
filters
infinite-impulse-response
anasimtiaz
sumber
sumber
Jawaban:
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.
sumber
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
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.
sumber
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.
sumber
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:
Proyeknya ada di sini:
https://github.com/vinniefalco/DSPFiltersDemo.git
https://github.com/vinniefalco/DSPFilters.git
sumber
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.
sumber