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