Фільтри IIR можуть бути реалізовані у вигляді прямої форми 1 або 2 . Але як ви вирішите, яку форму використовувати? Які плюси і мінуси кожного?
Фільтри IIR можуть бути реалізовані у вигляді прямої форми 1 або 2 . Але як ви вирішите, яку форму використовувати? Які плюси і мінуси кожного?
Відповіді:
Перш за все, трохи з вікіпедії про прямі форми I та II .
Пряма форма мені вимагає більше пам’яті, але це дещо простіша стратегія, і менша ймовірність мати проблеми з округленням та резонансом.
Пряма форма II вимагає менше пам’яті, але вона має потенціал для незвичайних взаємодій, більшої кількості та більшої помилки. Значну частину цього можна зменшити за допомогою каскадних менших фільтрів, особливо фільтрів другого порядку.
Трохи датований, але, можливо, заслуговує більш вичерпної відповіді, тим більше, що Direct Form II може доставити вам багато проблем. Перш за все, немає "одного розміру, який підходить усім", і найкращий вибір залежить від конкретного застосування та обмежень. Що ви можете врахувати, так це
Отже, підсумовуючи, Транспонована форма II найчастіше є найкращим вибором. У деяких сценаріях з фіксованою точкою, особливо якщо є значні проблеми із шумом, Direct Form I краще, оскільки він може легше доповнюватися такими речами, як Формування спектра помилок тощо.
Якщо ви працюєте з дуже дефіцитною системою або не маєте екстремальних вимог, на практиці не має значення, чи вибираєте ви пряму форму I або II. Наприклад, якщо ви робите речі на ПК або смартфоні, це насправді не має значення. Особисто я віддаю перевагу формі I.
Справжня проблема, як правило, MIPS, і якщо ви плануєте робити впровадження з фіксованою точкою, справи ускладнюються. Наприклад, на ARM ваш фільтр IIR буде споживати набагато більше MIPS, якщо і коефіцієнти, і стан фільтра 32-бітні. 32 біта в станах і коефіцієнтах є вимогою, якщо вам потрібно застосувати, наприклад, фільтр низьких частот з дуже низькою частотою відсічення. У цих випадках ви можете використовувати фільтр іншого типу, наприклад, фільтр зі змінним станом.
Крім технічних відмінностей, таких як числова точність, існує також питання стабільності. Коли цифрові фільтри мають полюс / нуль пар близькі один до одного, частотна характеристика може стати нестабільною в різних місцях (зазвичай наближається до Найквіста або наближається до нуля).
Коли для музичних застосувань використовуються фільтри IIR, вибір реалізації може мати глибокий вплив на стабільність фільтра, коли параметри фільтра модулюються в режимі реального часу (наприклад, змінюючи частоту відсічення на фільтрі низьких частот).
У мене є програма з відкритим кодом, яка дозволяє слухати відмінності, а параметри, що змінюються у часі, такі як частота відсікання або пікове посилення, кожної з наступних реалізацій:
Проект тут:
Окрім вищезазначених коментарів щодо пам'яті, MIPS, шуму та стабільності; є ще один фактор, який зазвичай ігнорують. Цей фактор є можливість скидання; що трапляється дуже важливо в більшості моїх ситуацій.
При реалізації Direct Form II немає станів для затримок виходів, для цього, якщо ви "скиньте" фільтр Direct Form II, щоб сказати "5", його вихідний вихід не буде 5. Я вважаю, що це досить протилежне - інтуїтивний, що спричинив серйозні розлади при використанні Simulink. З цієї причини я майже завжди використовую реалізацію Direct Form I. На жаль, Simulink підтримує лише Direct Form I, якщо у вас є панель інструментів DSP, і навіть тоді вона все ще не дозволяє встановити початкові умови з вхідного сигналу.