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

Отправлено ВН 23 августа 2001 г. 15:56
В ответ на: Ответ: То ли лыжи не едут... отправлено Евгений 23 августа 2001 г. 13:41

Извините, но Вы, кажется, очень невнимательны. Как это у Вас получилось,что 5652=8192*0.69 записываются как 0000000010100=0x14? 5652=0x1614, а не 0x14, -> 3.69=0x7614 в 3.13, а не 0x6014.
Далее. Результат будет в формате 19.13=(16+3).(0+13), если ena m_mode. Если dis m_mode (а это просто сдвиг влево на 1 разряд) то формат результата будет 18.14 при учете только mr1,mr0; при учете и mr2 формат будет 19.14. Откуда 20.12 взяли?
Далее. Умножьте правильно записанные сомножители.
Пусть с dis m_mode. Получите: mr2=0,mr1=0x9,mr0=0x3990.
Возьмите мл. 14 разрядов mr0, это будет дробная часть ее код=0x3990
или 14736 в целочисленной дес. записи. 2 самых старших разряда mr0, весь mr1 и мл. разряд mr2 - это целая часть и ее код =0x24=36 десятичных.
Поделите 14736 на 16384=2^14 (14 разрядов дробной части), получите 0.899414062. Итого результат =36.899414062~36.9.
Вам результат нужно в 16-ти разрядах. Сдвиньте mr1,mr0 либо вправо на 5 разрядов, либо влево на 11. В обоих случаях получите формат 7.9.
Т.е. либо:
sr=ashift mr1 by 11(hi);
sr=sr or lshift mr0 by 11(lo);
dm(result)=sr1;
либо:
sr=ashift mr1 by -5(hi);
sr=sr or lshift mr0 by -5(lo);
dm(result)=sr0;
В обоих случаях dm(result)=0x49cc=36.8984375 в формате 7.9.
Тот же самый результат Вы получите, если 3.69 представите как и было в 3.13, а 10 в 5.11. Код 10 в этом случае будет 0x5000.
При dis m_mode и учете только mr1,mr0 формат результата будет 7.25 и
mr1=0x49cc, mr0=0x8000. Отбросив mr0 автоматом получите формат в mr1 7.9 (25-16=9). Если Вы к тому же сделаете умножение с rnd -
получите mr1=0x49cd, mr0=0. В mr1 опять же результат в 7.9, но равен он 36.900390625 (округление, однако).
В 6.10 Вы результат не переведете, если Вам нужен знак числа.
Поскольку целая часть результата=36 - это уже 6 разрядов. Если нужно знаковое представление чисел - на целую часть необходимо отвести 7 разрядов и, соответственно, 9 на дробную. Т.е. формат 7.9.
Если знаковое представление не требуется - замените число сдвигов на
-4 или +12 и получите. Либо представтье 10 и 3.69 в форматах 4.12 и 2.14 соответственно и используйте беззнаковое умножение с ena m_mode и сохраняйте только mr1.
Еще раз - в UM все есть.


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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru