diff --git a/soft/PjtKEIL_StepDFT/Src/DFT.s b/soft/PjtKEIL_StepDFT/Src/DFT.s index 3270886..edbeaf6 100644 --- a/soft/PjtKEIL_StepDFT/Src/DFT.s +++ b/soft/PjtKEIL_StepDFT/Src/DFT.s @@ -23,7 +23,7 @@ PRESERVE8 export DFT_ModuleAuCarre DFT_ModuleAuCarre proc - push{r4-r10}; sauvegarde des registres dans la pile + 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 @@ -37,25 +37,25 @@ Sommation 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]-->5.27 - mul r10, r8, r10 ; multiplication de LeSignal[n] par TabSin[n*k] -->5.27 - asr r9, #16 ; -->format 5.11 me probleme de debordement - asr r10,#16 ;-->format 5.11 - add r3,r3, r9 ;ajout de la partie réelle au résultat (conservation du format) -->11.11 - add r2,r2, r10 ;ajout de la partie imaginaire au résultat (conservation du format) -->11.11 a cause de 64 additions + 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 ; ajout de k à n*k ce qui fait p= (n+1)*k - and r7, 63 ;modulo 64 pour ne pas depasser la taille du tableau + 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 recommence la boucle + blt Sommation ; si n<64 on continue la boucle - asr r3, #6 ; décalage de 10 bits vers la droite pour rétablir le format --> 11.5 - mul r3, r3, r3 ; la partie relle au carre -->10.22 - asr r2, #6 ; décalage de 10 bits vers la droite pour rétablir le format -->11.5 - mul r2, r2, r2 ; la partie imaginaire au carre -->22.10 - mov r0, r3 ; copie de la partie rélle dans r0 - add r0, r0, r2 ; addition de la partie imaginaire dans r0 forme final--> 22.10 + 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