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

 
 
> Как маштабируем результат фильтра ?, Результат 16-битной рутины фильтра в Acc
Саша Z
сообщение Jun 3 2007, 22:00
Сообщение #1


Знающий
****

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



Не могу сообразить что-то: есть FIR в ассемблере 16-битного процессора (fixed point), результат каждого последующего sample записывается в аккумуляторе который скажем 32 бит, из которого его нужно сохраняет в буфер результатов. Не догоняю как правильно маштабировать результат, т.е. как брать только старшие знАчимые 16 бит. Нужно-ли определять или старшие 16 бит аккумулятора = 0, то брать нижнее слово, если-же есть значимые биты в старшем слове аккумулятора то сдвигат его влево пока старший знАчимый бит не станет битом 31 и затем брать старшее слово из аккумлятора ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
-=ВН=-
сообщение Jun 5 2007, 11:36
Сообщение #2


Местный
***

Группа: Новичок
Сообщений: 210
Регистрация: 3-11-06
Пользователь №: 21 936



Цитата(Саша Z @ Jun 4 2007, 02:00) *
Не могу сообразить что-то: есть FIR в ассемблере 16-битного процессора (fixed point), результат каждого последующего sample записывается в аккумуляторе который скажем 32 бит, из которого его нужно сохраняет в буфер результатов. Не догоняю как правильно маштабировать результат, т.е. как брать только старшие знАчимые 16 бит. Нужно-ли определять или старшие 16 бит аккумулятора = 0, то брать нижнее слово, если-же есть значимые биты в старшем слове аккумулятора то сдвигат его влево пока старший знАчимый бит не станет битом 31 и затем брать старшее слово из аккумлятора ?

Ведь объяснял же Вам. Суммируете модули коэффициентов и сравнивайте результат с 1. Из этого элементарно определяется разрядность аккумулятора, гарантирующая непереполнение. Старшие разряды и сохраняете. Все.
В приложении к Вашим 10 разрядным к-там и данным единица занимает 20 разрядов (умножитель в режиме fractional, к-ты имеют формат 1.9, данные 1.9, результат умножения 1.19). Получите сумму меньшую единицы - значит 20 разрядов Вам хватит. Сохраняйте старшие из этих 20 разрядов. Получите сумму большую единицы - ее двоичный логарифм округленный вверх до ближайшего целого даст Вам число дополнительных, свыше 20, разрядов. Сохраняйте старшие разряды уже из этого числа разрядов.
Совершенно необязательно дополнительные 8 разрядов при длине фильтра 150.
При длине 150 и 10 р. к-тах и данных Вы до 32-х разрядной границы аккумулятора просто никогда не доберетесь. Сумма модулей и покажет Вам, до какой границы Вы доберетесь, сколько останется до 32-х разрядов. Остаток можете смело добавить на разрядность к-тов.
Сумма модулей отсчетов импульсной характеристики цифрового фильтра является критерием устойчивости этого самого фильтра. Любого, и КИХ (FIR) и БИХ (IIR). Если сумма меньше 1, то фильтр устойчив. Из чего и следует, что для КИХ фильтра, который устойчив всегда, эта сумма модулей есть просто напроосто максимально возможное число на выходе фильтра. Поэтому она и может быть использована для расчета выходной, "непереполняющейся", разрядности, или для определения разрядности к-тов и/или данных, гарантирующей неперпеолнение при выбранной разрядности аккумулятора.
Вычислять сумму модулей - все равно, что подать на вход фильтра сигнал, являющийся знаком импульсной характеристики. Т.е. сигнал по знаку повтояет импульсную характеристику.
Для БИХ фильтров более удобный критерий устойчивости - положение его полюсов.
Вот для устойчивого БИХ-фильтра, кстати, сумма модулей импульсной характеристики может быть использована для того же самого - определение разрядности аккумулятора.
Подать ему на вход единичный импульс (дельта-импульс) и записать отклик до тех пор, пока он не спадет до малого уровня. Это отрезок импульсной характеристики. Ее начало. Вот найти сумму ее модулей, взять запас, поскольку это только отрезок, хотя и несущий основную энергию, но все же не вся ИХ. И сравнить с 1.
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Jun 6 2007, 08:59
Сообщение #3


Знающий
****

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



Цитата(-=ВН=- @ Jun 5 2007, 15:36) *
Ведь объяснял же Вам. Суммируете модули коэффициентов и сравнивайте результат с 1. Из этого элементарно определяется разрядность аккумулятора, гарантирующая непереполнение. Старшие разряды и сохраняете. Все.
В приложении к Вашим 10 разрядным к-там и данным единица занимает 20 разрядов (умножитель в режиме fractional, к-ты имеют формат 1.9, данные 1.9, результат умножения 1.19). Получите сумму меньшую единицы - значит 20 разрядов Вам хватит. Сохраняйте старшие из этих 20 разрядов. Получите сумму большую единицы - ее двоичный логарифм округленный вверх до ближайшего целого даст Вам число дополнительных, свыше 20, разрядов. Сохраняйте старшие разряды уже из этого числа разрядов.
Совершенно необязательно дополнительные 8 разрядов при длине фильтра 150.
При длине 150 и 10 р. к-тах и данных Вы до 32-х разрядной границы аккумулятора просто никогда не доберетесь. Сумма модулей и покажет Вам, до какой границы Вы доберетесь, сколько останется до 32-х разрядов. Остаток можете смело добавить на разрядность к-тов.
Сумма модулей отсчетов импульсной характеристики цифрового фильтра является критерием устойчивости этого самого фильтра. Любого, и КИХ (FIR) и БИХ (IIR). Если сумма меньше 1, то фильтр устойчив. Из чего и следует, что для КИХ фильтра, который устойчив всегда, эта сумма модулей есть просто напроосто максимально возможное число на выходе фильтра. Поэтому она и может быть использована для расчета выходной, "непереполняющейся", разрядности, или для определения разрядности к-тов и/или данных, гарантирующей неперпеолнение при выбранной разрядности аккумулятора.
Вычислять сумму модулей - все равно, что подать на вход фильтра сигнал, являющийся знаком импульсной характеристики. Т.е. сигнал по знаку повтояет импульсную характеристику.
Для БИХ фильтров более удобный критерий устойчивости - положение его полюсов.
Вот для устойчивого БИХ-фильтра, кстати, сумма модулей импульсной характеристики может быть использована для того же самого - определение разрядности аккумулятора.
Подать ему на вход единичный импульс (дельта-импульс) и записать отклик до тех пор, пока он не спадет до малого уровня. Это отрезок импульсной характеристики. Ее начало. Вот найти сумму ее модулей, взять запас, поскольку это только отрезок, хотя и несущий основную энергию, но все же не вся ИХ. И сравнить с 1.



А кстати (сорри, а кажется начинаю идти по кругу... cranky.gif ), если учесть тот факт что в плане маштабирования входного сигнала я его умножаю, скажем на 2^12 после чего делаю round (в fixed point), коефф. умножаю на 2^10 и round, почему будет не правильно просто результат каждого цикла (т.е. выходной samlpe) в аккумуляторе делить на 2^10 (сдвиг на 10 разрядов вправо) - компенсация мштабирования коеффицеинтов, брать нижнее слово (нижние 16 бит) и затем при компоновке сигнала обратно в исходный формат (flоаting) делить результат на 2^12 (компенсация маштабирования входнго сигнала) ? Я говорю только о FIRе на данный момент.

Вами пердложенный метод - тоже рассматриваю, но вначале хочу понять его теоретическое обоснование (т.е. почему сумма коефициентов есть показатель, и т.д.)
Мне кажется оно как-то отчасти перекликается с теорией scaling в fixed point (но могу ошибаться) в разделе Sclaing in Fixed Point Arithmetics книги A Course in Digital Signal Processing by Boaz Porat. Могу вам выслать сканы (4 страницы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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