|
Как маштабируем результат фильтра ?, Результат 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. Писавших и отдельно друг от друга, как и Рабинер с Гоулдом, кстати. Их нужно читать.
|
|
|
|
|
Jun 6 2007, 10:09
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(-=ВН=- @ Jun 6 2007, 13:40)  Почему неправильно? Правильно. Только потери лишние. Да и зачем, если Вы все равно потом во флоат преобразуете? Посчитайте формат реультата (в фиксированной точке), который у Вас получается. Его и преобразуйте. Я Вам про другое писал - сначала нужно выбрать, как масштабировать к-ты и данные при заданной разрядности аккумулятора. И как это сделать. Не нужно мне никаких сканов. Я же Вам написал теор. обоснование - оно вытекает из одного из критериев устойчивости фильтров. Это в теории цифровой обработки ( в данном случае) нужно смотреть. По цифровой обработке, кстати, есть классические книги и классические авторы. Самая классическая - Л. Рабинер, Б. Гоулд. Теория и применение цифровой обработки сигналов. В оргинале: L.R. Rabiner and B. Gold. Theory and Application of Digital Signal Processing. Оппенгейм, Шафер - еще одна пара классиков. A. V. Oppenheim, R.V. Schafer. Писавших и отдельно друг от друга, как и Рабинер с Гоулдом, кстати. Их нужно читать. ОК, гляну еще раз насчет критериев в книге. Значит, имея 32-битный аккумулятор (31 разряд, 32ой - знак) и ежели сумма модулей коеффициентов равна скажем 2.5, получаем один доп. разряд требуемый результату Т.е. на сигнал и на коефф. по максимуму отойдет 30 разрядов. Для запаса, можно наверно брать скажем, 15 бит на сигнал, 12 бит на коефф. (в сумме получаем 28 бит), затем как результат брать 16 старших бит из 28..так ? Насчет книги, да Оппенгем и Шафер - классика, как и Боаза Пората. Вы видимо о ней не в курсе, а она как и Оппенгейма идет как книга курса во многих западных универах и наряду и Оппенгеймом/Шафером является настольной DSP bible у многих инженеров, большинство из вещей там весьма доходчиво поясняются. Я бы заранее не пренебрегал тем о чем просто не знаю....
|
|
|
|
|
Jun 6 2007, 11:39
|
Местный
  
Группа: Новичок
Сообщений: 210
Регистрация: 3-11-06
Пользователь №: 21 936

|
Цитата(Саша Z @ Jun 6 2007, 14:09)  Вы видимо о ней не в курсе, а она как и Оппенгейма идет как книга курса во многих западных универах и наряду и Оппенгеймом/Шафером является настольной DSP bible у многих инженеров, большинство из вещей там весьма доходчиво поясняются. Я бы заранее не пренебрегал тем о чем просто не знаю.... Да я то как раз знаю, что это за книга. Потому и написал, что читать нужно классиков. Но это Ваши проблемы, кого хотите, того и читайте. Забыл. При 32-х разрядном аккумуляторе и сумме 2.5 оставляйте 3 разряда на целую часть, включая знак и 29 на дробную. Потому что -2.5 (минус 2.5) представляются как -3 + 0.5. -3 не влезут в 2 разряда целой части. Только в 3 разряда. Соответсвенно к-ты можно взять 16 разрядными, т.е. умножить их на 32768. На данные 14, если умножитель использовать в integer режиме, и 13, если умножитель во fractional.
Сообщение отредактировал -=ВН=- - Jun 6 2007, 11:53
|
|
|
|
Сообщений в этой теме
Саша 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, 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
|
|
|