Які фактори слід враховувати при виборі реалізації фільтра IIR?


16

Фільтри IIR можуть бути реалізовані у вигляді прямої форми 1 або 2 . Але як ви вирішите, яку форму використовувати? Які плюси і мінуси кожного?


Більше того, який найкращий спосіб реалізувати їх на GPU.
Рой

2
@Drazick, GPU - це зовсім інша гра. вимагаючи чергового анкета.
Тревор Бойд Сміт

Відповіді:


9

Перш за все, трохи з вікіпедії про прямі форми I та II .

Пряма форма мені вимагає більше пам’яті, але це дещо простіша стратегія, і менша ймовірність мати проблеми з округленням та резонансом.

Пряма форма II вимагає менше пам’яті, але вона має потенціал для незвичайних взаємодій, більшої кількості та більшої помилки. Значну частину цього можна зменшити за допомогою каскадних менших фільтрів, особливо фільтрів другого порядку.


2
В будь-якому випадку вам слід робити каскадні секції другого порядку.
Олівер Чарльзворт

1
Отже, коротше, чи це пам'ять проти обкрученої помилки?
anasimtiaz

2
Супер слабка відповідь ІМО. Технічно він відповідає на питання ... але лише "технічно". Я хотів би побачити якийсь вихідний код мовою. Я знаю, як запровадити фільтр FIR, що легко. Давайте подивимось вихідний код IIR.
Тревор Бойд Сміт

2
Також, з точки зору математичних операцій, проведених на вибірку, що є кращою реалізацією I або II?
anasimtiaz

1
Я знаю, як зробити фільтрацію FIR. Я також знаю, що є прямою формою I / II / III / IV. що я не маю досвіду робити - це IIR: розробка або реалізація. Мій оригінальний коментар був не дуже конструктивним. Я мав би сказати: "Я розумію, що таке пряма форма I-IV, чи не розкажете, будь ласка, більше про те, як ви розробляєте / реалізуєте фільтр IIR?"
Тревор Бойд Сміт

9

Трохи датований, але, можливо, заслуговує більш вичерпної відповіді, тим більше, що Direct Form II може доставити вам багато проблем. Перш за все, немає "одного розміру, який підходить усім", і найкращий вибір залежить від конкретного застосування та обмежень. Що ви можете врахувати, так це

  1. Пам'ять: Пряма форма II та Транспонована форма II займають трохи менше пам'яті стану, ніж пряма форма I та перенесена форма I, але в реалізації каскадного розділу другого порядку різниця незначна
  2. СВІДИ: Що стосується кількості множень та доповнень, усі чотири реалізації однакові. Однак залежно від набору інструкцій конкретного процесора можуть бути суттєві відмінності в ефективності впровадження. Тож "це залежить".
  3. Властивості фіксованої точки: це робить величезну різницю. Перш за все, ви повинні переконатися, що ваші змінні стану не переповнюються, тому вам потрібно проаналізувати функцію передачі між змінними вводу / виводу та стану. Тут Пряма форма І та Транспонована форма II є явними переможцями. Змінні стану прив’язані до + 106 дБ або відтак від введення та виводу. Наприклад, у прямій формі II, функція переходу з входу в стан задається лише полюсами. Я бачив приклади реального світу, де це фактично може перевищувати коефіцієнт посилення в 100 дБ. Це абсолютно не для впровадження фіксованої точки.
  4. Шум: Що стосується врізання та помилки округлення, всі реалізації приблизно однакові. Проблема функції передачі змінної стану, згадана в 3), також певною мірою впливає на це, і я бачив проблеми зі звуковим шумом із фільтрами Direct Form II навіть при використанні 32-бітової плаваючої точки.

Отже, підсумовуючи, Транспонована форма II найчастіше є найкращим вибором. У деяких сценаріях з фіксованою точкою, особливо якщо є значні проблеми із шумом, Direct Form I краще, оскільки він може легше доповнюватися такими речами, як Формування спектра помилок тощо.


Це набагато вичерпніша та краща відповідь!
Lorem Ipsum

2
Сьогодні я зрозумів - набагато важче - чому Direct Form I є кращим вибором для моєї програми. Дякую за дійсно гарну відповідь!
anasimtiaz

1

Якщо ви працюєте з дуже дефіцитною системою або не маєте екстремальних вимог, на практиці не має значення, чи вибираєте ви пряму форму I або II. Наприклад, якщо ви робите речі на ПК або смартфоні, це насправді не має значення. Особисто я віддаю перевагу формі I.

Справжня проблема, як правило, MIPS, і якщо ви плануєте робити впровадження з фіксованою точкою, справи ускладнюються. Наприклад, на ARM ваш фільтр IIR буде споживати набагато більше MIPS, якщо і коефіцієнти, і стан фільтра 32-бітні. 32 біта в станах і коефіцієнтах є вимогою, якщо вам потрібно застосувати, наприклад, фільтр низьких частот з дуже низькою частотою відсічення. У цих випадках ви можете використовувати фільтр іншого типу, наприклад, фільтр зі змінним станом.


1

Крім технічних відмінностей, таких як числова точність, існує також питання стабільності. Коли цифрові фільтри мають полюс / нуль пар близькі один до одного, частотна характеристика може стати нестабільною в різних місцях (зазвичай наближається до Найквіста або наближається до нуля).

Коли для музичних застосувань використовуються фільтри IIR, вибір реалізації може мати глибокий вплив на стабільність фільтра, коли параметри фільтра модулюються в режимі реального часу (наприклад, змінюючи частоту відсічення на фільтрі низьких частот).

У мене є програма з відкритим кодом, яка дозволяє слухати відмінності, а параметри, що змінюються у часі, такі як частота відсікання або пікове посилення, кожної з наступних реалізацій:

  • Пряма форма I
  • Пряма форма II
  • Транспонований прямий формуляр I
  • Перенесена пряма форма II
  • Решітна форма
  • Державна змінна

Проект тут:

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

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

Знімок екрана


1
Ви розміщували це кілька разів, і я схильний застосовувати політику щодо спаму, якщо ваші відповіді не підпадають під питання. Жодна з цих публікацій не відповідає безпосередньо на питання, а також рекламує продукт. Відредагуйте їх, щоб безпосередньо відповісти на питання, інакше вони будуть видалені.
Phonon

0

Окрім вищезазначених коментарів щодо пам'яті, MIPS, шуму та стабільності; є ще один фактор, який зазвичай ігнорують. Цей фактор є можливість скидання; що трапляється дуже важливо в більшості моїх ситуацій.

При реалізації Direct Form II немає станів для затримок виходів, для цього, якщо ви "скиньте" фільтр Direct Form II, щоб сказати "5", його вихідний вихід не буде 5. Я вважаю, що це досить протилежне - інтуїтивний, що спричинив серйозні розлади при використанні Simulink. З цієї причини я майже завжди використовую реалізацію Direct Form I. На жаль, Simulink підтримує лише Direct Form I, якщо у вас є панель інструментів DSP, і навіть тоді вона все ще не дозволяє встановити початкові умови з вхідного сигналу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.