[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено -=ВН=- 21 марта 2004 г. 16:07
В ответ на: Ответ: отправлено pash 21 марта 2004 г. 14:41

А что у Вас переполняется? К-ты при квантовании?
Тут 2 эффекта есть.
1. Диапазон значений к-тов таков, что все к-ты не могут поместиться в выбранной разрядной сетке.
Например. Отношение макс. по модулю к-та к минимальному по модулю больше 32768, а у Вас выбрано 16 разрядов для представления к-тов
Выходов несколько. a) Увеличить разрядность к-тов. Вместо 16 например, сделать их 32-х разрядными. b) Разбить фильтр на секции меньшего порядка, вплоть до первого. Правда для действит. фильтра секции первого порядка комплексные и потому не рекомендуемы, в отличии от комплексного фильтра, но на что только не пойдешь... c) Комбинация a) и b). d) Когда перечисленное не помогает - снизить порядок фильтра, иногда использованием другой аппроксимации. Например вместо Баттерворта Чебышев или эллиптический. Не всегда, но бывает помогает. e) Плюнуть на целые числа и использовать пл.запятую.
2. Возможно дело в том, что некоторые к-ты по модулю больше 1 и Вы не знаете как их представить в выбранной разрядной сетке.
Пусть те же 16 разрядов. Если квантование к-тов происходит по типу
floor(k*32768+0.5), в 16-ти разрядах поместятся к-ты по модулю меньше равные единицы, к-ты большие единицы не влезут. Вышеописанное квантование переводит к-ты в формат 1.15. Т.е. один разряд на целую часть, он же знаковый. 15 на дробную.
Чтобы в 16 разрядов влезли и к-ты большие единицы нужно выбрать другой формат представления к-тов. Например макс. к-т по модулю меньше 2 (а для секций 2-го порядка это так для к-тов знаменателя), тогда можно выбрать формат представления к-тов например 2.14. 2 разряда на целую, из них знаковый самый старший. 14 на дробную. Квантовать floor(k*16384+0.5). Разноформатное умножение делается по обычным правилам. Дело в трактовке результата. Общее правило: (K.L)*(M.N)=(K+M).(L+N)
Т.е. L+N младших разрядов - дробная, K+M старших - целая.
Так что если данные в формате 1.15, а к-ты в формате 2.14, то умножение даст формат 3.29
Еще один способ впихивания к-тов - деление невпихиваемого к-та на какое-то целое - 2, 3, 4,... Так чтобы к-т деленный на выбранное число был меньше 1.
Для секций второго порядка делить нужно на 2, причем только один к-т, при y(n-1) в разностном ур-ии .
Компенсация деления вставкой дополнительных операций умножения.
На примере фильтра второго порядка.
y(n)=a*x(n)+b*y(n-1)+c*y(n-2).
Пусть b больше 1, но при этом он не может быть больше 2-х.
Делите его на 2. Разностное ур-е модифицируете:
y(n)=a*x(n)*(b/2)*y(n-1)+(b/2)*y(n-1)+c*y(n-2).

С к-тами в числителе, или при x, все обычно проще.
Но то же самое можно и с ними делать.



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru