Цитата(Саша 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.