[an error occurred while processing this directive]
|
Как раз недавно с коллегой экспериментировали (пытались найти оптимальную по быстродействию реализацию для Блекфина) и на всякий случай поиграли даже с приведенной ниже структурой, привлекающей своей простотой. Однако лучше брать прямую форму:
y[n] = -a1*y[n-1]-a2*y[n-2]+b0*x[n]+b1*x[n-1]+b2*x[n-2].
Нормализовать числитель, вводя для многокаскадного случая общий для всех качкадов коэфиициент передачи, также для фиксированной точки не стоит, ибо шансы получить переполнение в каком-нибудь из каскадов, резко увеличиваются.
Есть еще альтернатива. Использовать нестандартную плавающую точку принимая во внимание, что внутренний аккумулятор обычно 48 и более бит (мантисса хранится в шестнадцати битах, порядок - в других шестнадцати битах, на порядок накладываем ограничения от -24 до +7, например, это для того, чтобы путем сдвига превратить наш флоатинг пойнт в фиксед пойнт прямо в длинном аккумуляторе). Тогда можно много экспериментов проделать и найти наилучшее решение. Кстати, в таком варианте переполнение практически исключено (исключение могут составлять лишь суперизвращенные фильтры. Например, режекторный фильтр на 10 Герц с Q-фактором порядка 12 или даже больше и при частоте дискретизации 44100).