This commit is contained in:
Boyu Fu 2023-05-16 17:11:08 +02:00
parent efe2996a78
commit 3a906d3fcc
3 changed files with 48 additions and 37 deletions

View file

@ -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

View file

@ -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

View file

@ -160,6 +160,11 @@
<WinNumber>1</WinNumber>
<ItemText>test</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>test[k]</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
@ -175,7 +180,7 @@
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
@ -189,7 +194,7 @@
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>1</aLa>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>