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

|
Цитата(-=ВН=- @ Jun 6 2007, 15:39)  Да я то как раз знаю, что это за книга. Потому и написал, что читать нужно классиков. Но это Ваши проблемы, кого хотите, того и читайте. Во первых, спасибо насчет фильтра - переверну порядок коеффициентов для общей правильности. У меня-то вообще натура тугодума - медленно падает в мозги (приходилось брать и головой и в не меньшей манере задницей), но зато ежели пришло понимание - это железно ...но у читься никогда не стыдно. ;) Насчет книги, в мне знакомых кругах - он классика наряду с Оппенгеймом/Шафером, и круги эти включают весьма достойные мозги и универы. Оппенгейм конечно "отец" (скажем вместе с Рабинером) DSP, что отнюдь не умаляет достоинтсв мною упомянутой книги. Проблемой это вообще не вижу. Мое недопонимание совершенно не имеет отношения к уровню/качеству данной книги (хотя она мне черезвычайно помогла в универском курсе DSP - по ней толком и учил, лектор хоть сам по себе и толковый был, но объяснял хреново, все по слайдам из то-же книги. В результате купил ее (не дешова) что меня и спасло в результате (60% с потока завалило экзамен с первой попытки). Но вам благодарен за помощь (хоть иногда и в не очень тактичной форме ;) , ну да ладно).
|
|
|
|
|
Jun 6 2007, 12:03
|
Местный
  
Группа: Новичок
Сообщений: 210
Регистрация: 3-11-06
Пользователь №: 21 936

|
Цитата(Саша Z @ Jun 6 2007, 16:00)  Во первых, спасибо насчет фильтра - переверну порядок коеффициентов для общей правильности. У меня-то вообще натура тугодума - медленно падает в мозги (приходилось брать и головой и в не меньшей манере задницей), но зато ежели пришло понимание - это железно ...но у читься никогда не стыдно. Насчет книги, в мне знакомых кругах - он классика наряду с Оппенгеймом/Шафером, и круги эти включают весьма достойные мозги и универы. Оппенгейм конечно "отец" (скажем вместе с Рабинером) DSP, что отнюдь не умаляет достоинтсв мною упомянутой книги. Проблемой это вообще не вижу. Мое недопонимание совершенно не имеет отношения к уровню/качеству данной книги (хотя она мне черезвычайно помогла в универском курсе DSP - по ней толком и учил, лектор хоть сам по себе и толковый был, но объяснял хреново, все по слайдам из то-же книги. В результате купил ее (не дешова) что меня и спасло в результате (60% с потока завалило экзамен с первой попытки). Но вам благодарен за помощь (хоть иногда и в не очень тактичной форме  , ну да ладно). За нетактичность прошу прощения. А читать - читайте Пората, если Вам нравится, что с Вами сделаешь
|
|
|
|
|
Jun 7 2007, 06:34
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(-=ВН=- @ Jun 6 2007, 16:03)  За нетактичность прошу прощения. А читать - читайте Пората, если Вам нравится, что с Вами сделаешь  Но и Оппенгеймом не побрезгую... А кстати, если не секрет, что именно вам не нравиться в Порате ? Мне интересно еще один опытный взгляд на его изложение. Какие темы ? что именно в них ? Цитата(-=ВН=- @ Jun 5 2007, 15:36)  Для БИХ фильтров более удобный критерий устойчивости - положение его полюсов. Вот для устойчивого БИХ-фильтра, кстати, сумма модулей импульсной характеристики может быть использована для того же самого - определение разрядности аккумулятора. Подать ему на вход единичный импульс (дельта-импульс) и записать отклик до тех пор, пока он не спадет до малого уровня. Это отрезок импульсной характеристики. Ее начало. Вот найти сумму ее модулей, взять запас, поскольку это только отрезок, хотя и несущий основную энергию, но все же не вся ИХ. И сравнить с 1. Вот как раз, окончив FIR подошел к IIRам (у меня их там 15 штук, узкополсные bandpass). Хотелось-бы уточнить пару вещей: Вы говорите "для устойчивиги IIRa..." - так ведь реально проэктируются то IIRа-то устойчивые, зачем кому-нить вообще делать неустойчивый IIR ? Если так, то вами упомянутый метод оценки разрядности можно всегда использовать и с IIRами, так ?
|
|
|
|
|
Jun 8 2007, 02:45
|
Местный
  
Группа: Новичок
Сообщений: 210
Регистрация: 3-11-06
Пользователь №: 21 936

|
Цитата(Саша Z @ Jun 7 2007, 10:34)  Но и Оппенгеймом не побрезгую... А кстати, если не секрет, что именно вам не нравиться в Порате ? Мне интересно еще один опытный взгляд на его изложение. Какие темы ? что именно в них ? Вы говорите "для устойчивиги IIRa..." - так ведь реально проэктируются то IIRа-то устойчивые, зачем кому-нить вообще делать неустойчивый IIR ? Если так, то вами упомянутый метод оценки разрядности можно всегда использовать и с IIRами, так ? Общий уровень. Почти так. Дается оценка верхней границы выходных результатов в ИИР.
|
|
|
|
Сообщений в этой теме
Саша 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 5 2007, 11:58 Саша Z ОК, после короткого перерыва вернулись к теме....
... Jun 11 2007, 15:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|