From 3a906d3fcca415c36784684a056dd5991207898c Mon Sep 17 00:00:00 2001 From: Boyu Fu Date: Tue, 16 May 2023 17:11:08 +0200 Subject: [PATCH] DFT fini --- soft/PjtKEIL_DFT_Signal_Reel/Src/DFT.s | 45 ++++++++++++++------------ soft/PjtKEIL_StepDFT/Src/DFT.s | 31 ++++++++++-------- soft/PjtKEIL_StepDFT/StepDFT.uvoptx | 9 ++++-- 3 files changed, 48 insertions(+), 37 deletions(-) diff --git a/soft/PjtKEIL_DFT_Signal_Reel/Src/DFT.s b/soft/PjtKEIL_DFT_Signal_Reel/Src/DFT.s index 4c4fbf1..a97462a 100644 --- a/soft/PjtKEIL_DFT_Signal_Reel/Src/DFT.s +++ b/soft/PjtKEIL_DFT_Signal_Reel/Src/DFT.s @@ -23,36 +23,39 @@ export DFT_ModuleAuCarre +;for i in 0...63 +;signal[i]*Cos[k*i] + 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 ; - mov r4, #0 ; - ldr r5, =TabCos - ldr r6, =TabSin + 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] ; - ldrsh r9, [r5, r7, lsl #1] ; - ldrsh r10,[r6, r7, lsl #1] - smull r9, r8, r8, r9 - smull r10, r8, r8, r10 - add r3, r3, r9 - add r2, r2, r10 - add r7, r1 ; + 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 + cmp r4, #64 ; bcc SumLoop ; if n < 64 refaire - mov r0, r3 ; partie reelle comme resultat - mov r1, r2 - - ;abs - cmp r3, #0 - movge r0, r3 - neglt r0, r3 - + 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 diff --git a/soft/PjtKEIL_StepDFT/Src/DFT.s b/soft/PjtKEIL_StepDFT/Src/DFT.s index 7ba5f72..a97462a 100644 --- a/soft/PjtKEIL_StepDFT/Src/DFT.s +++ b/soft/PjtKEIL_StepDFT/Src/DFT.s @@ -23,35 +23,38 @@ export DFT_ModuleAuCarre +;for i in 0...63 +;signal[i]*Cos[k*i] + 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 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] ; - ldrsh r10,[r6, r7, lsl #1] ; - smull r9, r8, 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). - smull r10, r8, r8, r10 ; + 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 ; - add r7, r1 ; + add r2, r2, r10 + + mul r7, r4, r1 ; i*k + and r7, #0x3F ; mod 64 add r4, #1 ; ++n cmp r4, #64 ; bcc SumLoop ; if n < 64 refaire - ;mov r0, r3 ; partie reelle comme resultat - mov r1, r2 - - ;abs - cmp r3, #0 ; Calcul de la valeur absolue du résultat en stockant le maximum entre "r3" et 0 dans "r0". - movge r0, r3 - neglt r0, r3 + 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 diff --git a/soft/PjtKEIL_StepDFT/StepDFT.uvoptx b/soft/PjtKEIL_StepDFT/StepDFT.uvoptx index 4e5d14b..c58527a 100644 --- a/soft/PjtKEIL_StepDFT/StepDFT.uvoptx +++ b/soft/PjtKEIL_StepDFT/StepDFT.uvoptx @@ -160,6 +160,11 @@ 1 test + + 1 + 1 + test[k] + @@ -175,7 +180,7 @@ 0 1 - 1 + 0 0 0 0 @@ -189,7 +194,7 @@ 0 0 0 - 1 + 0 0 0 0