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

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

Отправлено SM 08 сентября 2004 г. 12:25
В ответ на: Ответ: А можно подробнее? Если это действительно "две команды процессора" то это гениально! отправлено Victor Kalinichenko 08 сентября 2004 г. 12:03

Еще немного подготовительного...

Вариант №1 - 16-bit коэфф.


; 257-Tap symmetric FIR
FIR: .macro
mov #0,ac0
mov ac0,ac1 || rpt #127
mac *ar0+, *cdp+, ac0 :: mac *ar1-,*cdp+,ac1
add ac1,ac0
macm *ar0, *cdp, ac0
.endm

; ------------------
; ar0, ar1 in circular mode (with base and size of buffer with size 257 words)
mov @firptr,ar0 ; pointer in circ. buffer
amov #coeffs,xcdp ; coefficients
mov ac0<<#-16,*-ar0 ; put input sample into circ. buffer
mov ar0,@eqptr ; store new pointer
amov ar0,ar1 ; set ar1
amar *ar1- ; to end of circ. buffer
FIR

Это-же можно сделать с командами FIRSADD, FIRSSUB.

Вариант №2 - 32-бит коэфф, 257-tap


; cdp - pointer to coeffs
; ar0 - begin of circ. buffer (circular mode)
; ar1 - end of circ. buffer (circular mode)

DECFIR: .macro
mov #127,mmap(@BRC0)
mov #0,ac0
mov #0,ac1
mov #0,ac2
mov #0,ac3
|| rptblocal label?
mac *ar0 , *cdp+ , ac0 :: mac *ar1 , *cdp+ , ac1 ; Re, high
label?: mac *ar0+, uns(*cdp+) , ac2 :: mac *ar1- , uns(*cdp+), ac3 ; Re, low

bclr AR1LC
amar *cdp,xar1

macm *ar0, *ar1+, ac0
macm *ar0, uns(*ar1+), ac2

add ac2,ac3
add ac1,ac0
sfts ac0,#1
add ac3<<#-15,ac0

.endm

Итого при достаточно большой длине фильтра для 16-битных коэфф. имеем один такт на 2 тапа, для 32-битных - один такт на один тап.

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru