|
Как маштабируем результат фильтра ?, Результат 16-битной рутины фильтра в Acc |
|
|
|
 |
Ответов
|
Jun 5 2007, 11:36
|
Местный
  
Группа: Новичок
Сообщений: 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.
|
|
|
|
|
Jun 6 2007, 08:59
|
Знающий
   
Группа: Свой
Сообщений: 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. А кстати (сорри, а кажется начинаю идти по кругу...  ), если учесть тот факт что в плане маштабирования входного сигнала я его умножаю, скажем на 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 страницы)
|
|
|
|
|
Jun 6 2007, 09:40
|
Местный
  
Группа: Новичок
Сообщений: 210
Регистрация: 3-11-06
Пользователь №: 21 936

|
Цитата(Саша Z @ Jun 6 2007, 12:59)  А кстати (сорри, а кажется начинаю идти по кругу...  ), если учесть тот факт что в плане маштабирования входного сигнала я его умножаю, скажем на 2^12 после чего делаю round (в fixed point), коефф. умножаю на 2^10 и round, почему будет не правильно просто результат каждого цикла (т.е. выходной samlpe) в аккумуляторе делить на 2^10 (сдвиг на 10 разрядов вправо) - компенсация мштабирования коеффицеинтов, брать нижнее слово (нижние 16 бит) и затем при компоновке сигнала обратно в исходный формат (flоаting) делить результат на 2^12 (компенсация маштабирования входнго сигнала) ? Я говорю только о FIRе на данный момент. Почему неправильно? Правильно. Только потери лишние. Да и зачем, если Вы все равно потом во флоат преобразуете? Посчитайте формат реультата (в фиксированной точке), который у Вас получается. Его и преобразуйте. Я Вам про другое писал - сначала нужно выбрать, как масштабировать к-ты и данные при заданной разрядности аккумулятора. И как это сделать. Цитата(Саша Z @ Jun 6 2007, 12:59)  Вами пердложенный метод - тоже рассматриваю, но вначале хочу понять его теоретическое обоснование (т.е. почему сумма коефициентов есть показатель, и т.д.) Мне кажется оно как-то отчасти перекликается с теорией scaling в fixed point (но могу ошибаться) в разделе Sclaing in Fixed Point Arithmetics книги A Course in Digital Signal Processing by Boaz Porat. Могу вам выслать сканы (4 страницы) Не нужно мне никаких сканов. Я же Вам написал теор. обоснование - оно вытекает из одного из критериев устойчивости фильтров. Это в теории цифровой обработки ( в данном случае) нужно смотреть. По цифровой обработке, кстати, есть классические книги и классические авторы. Самая классическая - Л. Рабинер, Б. Гоулд. Теория и применение цифровой обработки сигналов. В оргинале: L.R. Rabiner and B. Gold. Theory and Application of Digital Signal Processing. Оппенгейм, Шафер - еще одна пара классиков. A. V. Oppenheim, R.V. Schafer. Писавших и отдельно друг от друга, как и Рабинер с Гоулдом, кстати. Их нужно читать.
|
|
|
|
Сообщений в этой теме
Саша Z Как маштабируем результат фильтра ? Jun 3 2007, 22:00 el34 если данные напр. 12бит коэфф. 12бит... произведен... Jun 3 2007, 22:29 Саша Z Цитата(el34 @ Jun 4 2007, 02:29) если дан... Jun 4 2007, 05:45 el34 Саша Z>Если это правильно, то нужно видимобрать... Jun 4 2007, 07:07   Саша Z Цитата(-=ВН=- @ Jun 6 2007, 13... Jun 6 2007, 10:09    -=ВН=- Цитата(Саша Z @ Jun 6 2007, 14:09) Вы вид... Jun 6 2007, 11:39     Саша Z Цитата(-=ВН=- @ Jun 6 2007, 15... Jun 6 2007, 12:00      -=ВН=- Цитата(Саша Z @ Jun 6 2007, 16:00) Во пер... Jun 6 2007, 12:03       Саша Z Цитата(-=ВН=- @ Jun 6 2007, 16... Jun 7 2007, 06:34        -=ВН=- Цитата(Саша Z @ Jun 7 2007, 10:34) Но и О... Jun 8 2007, 02:45 Саша Z Спасибо, будем кумекать, пробовать предложенные ва... Jun 5 2007, 11:58 Саша Z ОК, после короткого перерыва вернулись к теме....
... Jun 11 2007, 15:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|