forked from acco/chti23
Update 'soft/PjtKEIL_DFT_Signal_Reel/Src/DFT.s'
This commit is contained in:
parent
4d5df875ef
commit
5fad572de4
1 changed files with 41 additions and 40 deletions
|
@ -1,4 +1,4 @@
|
|||
PRESERVE8
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
|||
;Section RAM (read write):
|
||||
area maram,data,readwrite
|
||||
|
||||
|
||||
|
||||
|
||||
; ===============================================================================================
|
||||
|
||||
|
@ -19,46 +19,47 @@
|
|||
|
||||
;Section ROM code (read only) :
|
||||
area moncode,code,readonly
|
||||
; écrire le code ici
|
||||
|
||||
export DFT_ModuleAuCarre
|
||||
|
||||
;for i in 0...63
|
||||
;signal[i]*Cos[k*i]
|
||||
; écrire le code ici
|
||||
|
||||
export DFT_ModuleAuCarre
|
||||
DFT_ModuleAuCarre proc
|
||||
push {r4, r5, r6, r8, r9, r10} ;
|
||||
mov r2, #0 ; partie imaginaire = 0
|
||||
mov r3, #0 ; partie reelle = 0
|
||||
mov r7, #0 ; compteur pour parcourir les tableaux "TabCos" et "TabSin"
|
||||
mov r4, #0 ; compteur pour parcourir le signal d'entrée
|
||||
ldr r5, =TabCos ; les adresses du tableau "TabCos"
|
||||
ldr r6, =TabSin ; les adresses du tableau "TabSin"
|
||||
|
||||
SumLoop
|
||||
ldrsh r8, [r0, r4, lsl #1] ; Chargement des éléments du signal d'entrée
|
||||
ldrsh r9, [r5, r7, lsl #1] ;Cos
|
||||
ldrsh r10,[r6, r7, lsl #1] ;Sin
|
||||
mul r9, r8, r9 ; Multiplication de l'élément du signal d'entrée avec l'élément correspondant des tableaux "TabCos" et "TabSin" (en utilisant une multiplication longue pour éviter la saturation).
|
||||
mul r10, r8, r10
|
||||
add r3, r3, r9 ; Mise à jour des parties réelles et imaginaires du résultat.
|
||||
add r2, r2, r10
|
||||
|
||||
mul r7, r4, r1 ; i*k
|
||||
and r7, #0x3F ; mod 64
|
||||
add r4, #1 ; ++n
|
||||
cmp r4, #64 ;
|
||||
blt SumLoop ; if n < 64 refaire
|
||||
|
||||
mov r0, r3 ; 5.27
|
||||
smull r0, r9, r3, r3 ; reel*reel
|
||||
mov r0, r9
|
||||
smull r0, r10, r2, r2 ; im*im
|
||||
add r0, r9, r10 ; 10.22
|
||||
|
||||
pop {r4, r5, r6, r8, r9, r10}
|
||||
bx lr
|
||||
endp
|
||||
push{r4-r10}; Sauvegarde des registres r4 à r10 dans la pile
|
||||
mov r2, #0 ;initialisation de la partie imaginaire à zero
|
||||
mov r3, #0 ;initialisation de la partie relle à zero
|
||||
mov r7 ,#0 ;initialisation de p(=n*k) à zero
|
||||
mov r4 ,#0 ;initialisation de l'indice n à zero
|
||||
ldr r5, =TabCos ; chargement de l'adresse de TabCos dans r5
|
||||
ldr r6, =TabSin ; chargement de l'adresse de TabCos dans r5
|
||||
|
||||
|
||||
Sommation
|
||||
;Rsom += Signal[i] * TabCos[k*i]
|
||||
ldrsh r8,[r0, r4, lsl#1] ; chargement du LeSignal[n] dans r8
|
||||
ldrsh r9,[r5, r7, lsl #1] ; chargement de TabCos[p] dans r9
|
||||
ldrsh r10,[r6, r7, lsl #1] ; chargement de TabSin[p] dans r10
|
||||
mul r9, r8, r9 ; multiplication de LeSignal[n] par TabCos[n*k]--> Format 5.27
|
||||
mul r10, r8, r10 ; multiplication de LeSignal[n] par TabSin[n*k] --> Format 5.27
|
||||
asr r9, #16 ; Réduction du format pour éviter le débordement
|
||||
asr r10,#16 ; Réduction du format pour éviter le débordement
|
||||
add r3,r3, r9 ; ajout de la partie réelle au résultat (conservation du format) --> Format 11.11
|
||||
add r2,r2, r10 ; ajout de la partie imaginaire au résultat (conservation du format) --> Format 11.11
|
||||
|
||||
add r7, r1 ; Calcul de p = (n+1) * k
|
||||
and r7, 63 ; modulo 64 pour ne pas depasser la taille du tableau
|
||||
add r4, r4, #1 ; incrémentation de l'indice n
|
||||
cmp r4 ,#64 ; comparaison de n à 64
|
||||
blt Sommation ; si n<64 on continue la boucle
|
||||
|
||||
asr r3, #6 ; Réduction du format de la partie réelle pour le calcul au carré --> Format 11.5 (décalage 10 bits)
|
||||
mul r3, r3, r3 ; Calcul du carré de la partie réelle --> Format 10.22
|
||||
asr r2, #6 ; Réduction du format de la partie imaginaire pour le calcul au carré --> Format 11.5 (décalage 10 bits)
|
||||
mul r2, r2, r2 ; Calcul du carré de la partie réelle --> Format 22.10
|
||||
mov r0, r3 ; Copie de la partie réelle dans le registre r0
|
||||
add r0, r0, r2 ; Addition de la partie imaginaire dans r0 (résultat final) --> Format 22.10
|
||||
|
||||
pop{r4-r10} ; restauration des registres depuis la pile
|
||||
bx lr
|
||||
endp
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue