БИХ-фильтры могут быть реализованы как прямые формы 1 или 2 . Но как вы решаете, какую форму использовать? Каковы плюсы и минусы каждого?
filters
infinite-impulse-response
anasimtiaz
источник
источник
Ответы:
Прежде всего, немного из Википедии о Direct Form I и II .
Прямая форма I требует больше памяти, но является несколько более простой стратегией и с меньшей вероятностью будет иметь проблемы с округлением и резонансом.
Прямая форма II требует меньше памяти, но имеет потенциал для необычных взаимодействий, больших чисел и большей ошибки округления. Многое из этого может быть уменьшено путем каскадирования меньших фильтров, особенно фильтров 2-го порядка.
источник
Немного устаревший, но может заслуживать более подробного ответа, тем более что Direct Form II может доставить вам массу неприятностей. Прежде всего, не существует «одного размера для всех», и лучший выбор зависит от вашего конкретного приложения и ограничений. Что вы можете рассмотреть, так это
Таким образом, в итоге, Transposed Form II чаще всего не лучший выбор. В некоторых сценариях с фиксированной запятой, особенно если возникают значительные проблемы с шумом, лучше использовать Direct Form I, поскольку ее легче дополнить такими вещами, как Error Spectrum Shaping и т. Д.
источник
Если вы не работаете с очень дефицитной системой или не имеете экстремальных требований, на практике не имеет значения, выберете ли вы прямую форму I или II. Например, если вы делаете что-то на ПК или смартфоне, это действительно не имеет значения. Лично я предпочитаю форму I.
Реальная проблема, как правило, в MIPS, и если вы планируете выполнять реализацию с фиксированной запятой, все усложняется. Например, в ARM ваш IIR-фильтр будет потреблять гораздо больше MIPS, если оба коэффициента и состояния фильтра 32-битные. 32 бита в состояниях и коэффициентах - это требование, если вам необходимо реализовать, например, фильтр нижних частот с очень низкой частотой среза. В этих случаях вы можете использовать другой тип фильтра, такой как, например, фильтр переменной состояния.
источник
Помимо технических различий, таких как численная точность, существует также проблема стабильности. Когда цифровые фильтры имеют пары полюс / ноль, близкие друг к другу, частотная характеристика может стать нестабильной в различных местах (обычно приближается к Найквисту или приближается к нулю).
Когда БИХ-фильтры используются для музыкальных приложений, выбор реализации может оказать глубокое влияние на стабильность фильтра, когда параметры фильтра модулируются в режиме реального времени (например, изменение частоты среза на фильтре нижних частот).
У меня есть приложение с открытым исходным кодом, которое позволяет вам прослушивать различия, в то время как изменяющиеся во времени параметры, такие как частота среза или пиковое усиление, каждой из следующих реализаций:
Проект находится здесь:
https://github.com/vinniefalco/DSPFiltersDemo.git
https://github.com/vinniefalco/DSPFilters.git
источник
В дополнение к комментариям выше о памяти, MIPS, шуме и стабильности; есть еще один фактор, который обычно упускается из виду. Этот фактор - возможность сброса; что бывает очень важно в большинстве моих ситуаций.
В реализации Direct Form II нет никаких состояний для задержанных выходов, поэтому если вы «сбросите» фильтр Direct Form II, чтобы сказать «5», его начальный вывод не будет 5. Я считаю, что это довольно противоречиво -интуитивно понятный, который вызвал некоторые серьезные разочарования при использовании Simulink. По этой причине я почти всегда использую реализацию Direct Form I. К сожалению, Simulink поддерживает Direct Form I только в том случае, если у вас есть набор инструментов DSP, и даже тогда он по-прежнему не позволяет устанавливать начальные условия для входного сигнала.
источник