реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Нижнее насыщение gains IIRов в fixed point, Избегание обнуления gainа при переводе в fixed point
Саша Z
сообщение Jun 2 2007, 12:06
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



У меня в системе банка фильтров есть 15 коротких IIRов (второго порядка), transfer function каждого содержит в числителе только число (скажем gain). В алгоритме динамически играюсь IIR gain factors т.е. варьирую это gainы (не суть важно как именно - это - определяется в алгоритме), т.е. на каждом определенном этапе алгоритм вырабатывает 15 gain factors которые являются числителями каждого соотв. IIRа.
В Матлабе работает нормально, перевожу в имплементацию (16 бит fixed point). Грубо конвертирую полученные в Матлабе gain factors в 16 бит fixed point:

gain = int16(round(1024*gain)), получаю целочисленные факторы в 16-битном размере.

В оригинале (из Матлаба) все факторы меньше 1 (в диапазоне 0 - 1) и могут отличаться более чем на 3 порядка. Это приводит к тому что когда фактор меньше скажем 0.0005 - в результате вышеуказанной операции получаю 0, что фактически обнуляет конкретный фильтр.

Посему видимо нужна какая-то защита от обнуления когда реальный коеффициент ниже порога квантизации. Можно например вместо round использовать celing:

gain = int16(ceiling(1024*gain)), но тогда уравниваются например факторы в 2х смежных диапазонах (например все между 0.0001 и 0.001 идет в 1), что полуается весьма грубо.

Единственый вариант более правдоподобного разпределения после квантизации вижу в квантизации на большую разрядность, например 2^15:

gain = int16(round(2^15*gain)), но в таком случае мне кажется увеличивается вероятность переполнения промеж. результатов в процессе IIR фильтрации...


Что посоветуете ?
Go to the top of the page
 
+Quote Post
Misa
сообщение Jun 2 2007, 12:27
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 25-04-06
Пользователь №: 16 458



Если правильно построить алгоритм вычисления, то никаких переполненй не будет, и это не зависит от колличества разрядов gain factor. В вашем случае можно использовать и 2^15 и 2^31 ( что будет еще точнее ).
Для 2^15 gain factor шаг его квантования = 1/32767.
Для 2^31 gain factor шаг его квантования = 1/2147483648.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 20:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016