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

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

Отправлено вычисляющий 31 октября 2003 г. 10:52
В ответ на: Подскажите про вычисления в 55xx ... отправлено вычисляющий 30 октября 2003 г. 08:23

Все в Q15

вычисляем вот это result=(1-x)^(4/3)
0по тейлору вот коэффициенты:

// a1 - split to 2 part
// calculation only up to power 8! - it is enought!
int const a_i[16+1] = {
+32767, //a0=+1 ну почти !
-21845, //a1= -21845.33 -1.333333333333333e+000/2 = -0.6666666666666665
+7282, //a2= +7281.78 +2.222222222222222e-001
+1618, //a3= +1618.17 +4.938271604938271e-002
+674, //a4= +674.24 +2.057613168724280e-002
+360, //a5= +359.59 +1.097393689986283e-002
+220, //a6= +219.75 +6.706294772138394e-003
+147, //a7= +146.50 +4.470863181425595e-003
+104, //a8= +103.77 +3.166861420176464e-003


а вот прога
T0=x
; --- tylor loop a8..a0---
mov #8-1-1,brc0 ; loop counter:
amov #_a_i+8,XAR0 ; xar0=&a_8 point to last coeff
mov *AR0- << #16,AC0 ; AC0 = a_8 ; AR0--
rptbLocal requantizeTylorLoop-1
mov *AR0- << #16,AC1 ; AC1 = a_i ; AR0--
mac AC0, T0, AC1, AC0 ; AC0=AC0*x+a_i
requantizeTylorLoop:
mpy T0,AC0 ; AC0=AC0*x
; a_1 - twice so +1 one time
mac AC1,T0,AC0,AC0 ; AC0=AC0+AC1*T0
; --- last 1 ---
add *AR0 << #16, AC0 ; AC0=AC0+a0
add #1 << #16, AC0 ; AC0=AC0+1 ????
add #7fffh, AC0 ; AC0=AC0+0.5 round up
; --- result --- ; ??? -0x7fff - it is not exactly 1 so last bit
mov Hi(AC0),T0


ошибка меньше млдашего бита на всем интервале x.

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru