Какие факторы следует учитывать при выборе реализации БИХ-фильтра?


16

БИХ-фильтры могут быть реализованы как прямые формы 1 или 2 . Но как вы решаете, какую форму использовать? Каковы плюсы и минусы каждого?


Более того, как лучше всего реализовать их на GPU.
Рой

2
@Drazick, GPU - это совсем другая игра. требующий другого квестона.
Тревор Бойд Смит

Ответы:


9

Прежде всего, немного из Википедии о Direct Form I и II .

Прямая форма I требует больше памяти, но является несколько более простой стратегией и с меньшей вероятностью будет иметь проблемы с округлением и резонансом.

Прямая форма II требует меньше памяти, но имеет потенциал для необычных взаимодействий, больших чисел и большей ошибки округления. Многое из этого может быть уменьшено путем каскадирования меньших фильтров, особенно фильтров 2-го порядка.


2
В любом случае вы должны каскадировать секции второго порядка.
Оливер Чарльзуорт,

1
Итак, короче говоря, это компромисс между памятью и ошибкой округления?
anasimtiaz

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

2
Кроме того, с точки зрения математических операций, выполняемых на выборку, что является лучшей реализацией I или II?
Анасимтиаз

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

9

Немного устаревший, но может заслуживать более подробного ответа, тем более что Direct Form II может доставить вам массу неприятностей. Прежде всего, не существует «одного размера для всех», и лучший выбор зависит от вашего конкретного приложения и ограничений. Что вы можете рассмотреть, так это

  1. Память: Direct Form II и Transposed Form II занимают немного меньше памяти, чем Direct Form I и Transposed Form I, но в каскадной реализации секций второго порядка разница незначительна
  2. MIPS: с точки зрения количества умножений и сложений, все четыре реализации одинаковы. Однако в зависимости от набора команд конкретного процессора могут быть значительные различия в эффективности реализации. Так что "это зависит".
  3. Свойства с фиксированной точкой: это имеет огромное значение. Прежде всего вы должны убедиться, что ваши переменные состояния не переполняются, поэтому вам нужно проанализировать функцию передачи между входными / выходными и переменными состояния. Здесь Direct Form I и Transposed Form II являются явными победителями. Переменные состояния связаны с +106 дБ или около этого по сравнению с вводом и выводом. Например, в прямой форме II передаточная функция от входа к состоянию дается только полюсами. Я видел примеры из реальной жизни, где это может превышать 100 дБ усиления. Это абсолютное нет для реализации с фиксированной запятой.
  4. Шум: с точки зрения ошибки усечения и округления все реализации примерно одинаковы. Проблема передаточной функции переменной состояния, упомянутая в 3), также в некоторой степени влияет на это, и я видел проблемы с слышимым шумом при использовании фильтров Direct Form II даже при использовании 32-битной плавающей запятой.

Таким образом, в итоге, Transposed Form II чаще всего не лучший выбор. В некоторых сценариях с фиксированной запятой, особенно если возникают значительные проблемы с шумом, лучше использовать Direct Form I, поскольку ее легче дополнить такими вещами, как Error Spectrum Shaping и т. Д.


Это гораздо более полный и лучший ответ!
Lorem Ipsum

2
Сегодня я понял - гораздо сложнее - почему Direct Form I - лучший выбор для моего приложения. Спасибо за действительно хороший ответ!
Анасимтиаз

1

Если вы не работаете с очень дефицитной системой или не имеете экстремальных требований, на практике не имеет значения, выберете ли вы прямую форму I или II. Например, если вы делаете что-то на ПК или смартфоне, это действительно не имеет значения. Лично я предпочитаю форму I.

Реальная проблема, как правило, в MIPS, и если вы планируете выполнять реализацию с фиксированной запятой, все усложняется. Например, в ARM ваш IIR-фильтр будет потреблять гораздо больше MIPS, если оба коэффициента и состояния фильтра 32-битные. 32 бита в состояниях и коэффициентах - это требование, если вам необходимо реализовать, например, фильтр нижних частот с очень низкой частотой среза. В этих случаях вы можете использовать другой тип фильтра, такой как, например, фильтр переменной состояния.


1

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

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

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

  • Прямая форма I
  • Прямая форма II
  • Транспонированная прямая форма I
  • Транспонированная прямая форма II
  • Форма решетки
  • Переменная состояния

Проект находится здесь:

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

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

Скриншот


1
Вы писали об этом несколько раз, и я склонен применять политику в отношении спама, если ваши ответы не соответствуют действительности. Ни один из этих постов не отвечает непосредственно на вопросы, а также не продвигает продукт. Отредактируйте их, чтобы напрямую ответить на вопросы, иначе они будут удалены.
Фонон

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.