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,35 +23,38 @@
export DFT_ModuleAuCarre export DFT_ModuleAuCarre
;for i in 0...63
;signal[i]*Cos[k*i]
DFT_ModuleAuCarre proc DFT_ModuleAuCarre proc
push {r4, r5, r6, r8, r9, r10} ; push {r4, r5, r6, r8, r9, r10} ;
mov r2, #0 ; partie imaginaire = 0 mov r2, #0 ; partie imaginaire = 0
mov r3, #0 ; partie reelle = 0 mov r3, #0 ; partie reelle = 0
mov r7, #0 ; mov r7, #0 ; compteur pour parcourir les tableaux "TabCos" et "TabSin"
mov r4, #0 ; mov r4, #0 ; compteur pour parcourir le signal d'entrée
ldr r5, =TabCos ldr r5, =TabCos ; les adresses du tableau "TabCos"
ldr r6, =TabSin ldr r6, =TabSin ; les adresses du tableau "TabSin"
SumLoop SumLoop
ldrsh r8, [r0, r4, lsl #1] ; ldrsh r8, [r0, r4, lsl #1] ; Chargement des éléments du signal d'entrée
ldrsh r9, [r5, r7, lsl #1] ; ldrsh r9, [r5, r7, lsl #1] ;Cos
ldrsh r10,[r6, r7, lsl #1] ldrsh r10,[r6, r7, lsl #1] ;Sin
smull r9, r8, r8, r9 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).
smull r10, r8, r8, r10 mul r10, r8, r10
add r3, r3, r9 add r3, r3, r9 ; Mise à jour des parties réelles et imaginaires du résultat.
add r2, r2, r10 add r2, r2, r10
add r7, r1 ;
mul r7, r4, r1 ; i*k
and r7, #0x3F ; mod 64
add r4, #1 ; ++n add r4, #1 ; ++n
cmp r4, #64 cmp r4, #64 ;
bcc SumLoop ; if n < 64 refaire bcc SumLoop ; if n < 64 refaire
mov r0, r3 ; partie reelle comme resultat mov r0, r3 ; 5.27
mov r1, r2 smull r0, r9, r3, r3 ; reel*reel
mov r0, r9
;abs smull r0, r10, r2, r2 ; im*im
cmp r3, #0 add r0, r9, r10 ; 10.22
movge r0, r3
neglt r0, r3
pop {r4, r5, r6, r8, r9, r10} pop {r4, r5, r6, r8, r9, r10}
bx lr bx lr

View file

@ -23,6 +23,9 @@
export DFT_ModuleAuCarre export DFT_ModuleAuCarre
;for i in 0...63
;signal[i]*Cos[k*i]
DFT_ModuleAuCarre proc DFT_ModuleAuCarre proc
push {r4, r5, r6, r8, r9, r10} ; push {r4, r5, r6, r8, r9, r10} ;
mov r2, #0 ; partie imaginaire = 0 mov r2, #0 ; partie imaginaire = 0
@ -34,24 +37,24 @@ DFT_ModuleAuCarre proc
SumLoop SumLoop
ldrsh r8, [r0, r4, lsl #1] ; Chargement des éléments du signal d'entrée ldrsh r8, [r0, r4, lsl #1] ; Chargement des éléments du signal d'entrée
ldrsh r9, [r5, r7, lsl #1] ; ldrsh r9, [r5, r7, lsl #1] ;Cos
ldrsh r10,[r6, r7, lsl #1] ; ldrsh r10,[r6, r7, lsl #1] ;Sin
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). 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).
smull r10, r8, r8, r10 ; mul r10, r8, r10
add r3, r3, r9 ; Mise à jour des parties réelles et imaginaires du résultat. add r3, r3, r9 ; Mise à jour des parties réelles et imaginaires du résultat.
add r2, r2, r10 ; add r2, r2, r10
add r7, r1 ;
mul r7, r4, r1 ; i*k
and r7, #0x3F ; mod 64
add r4, #1 ; ++n add r4, #1 ; ++n
cmp r4, #64 ; cmp r4, #64 ;
bcc SumLoop ; if n < 64 refaire bcc SumLoop ; if n < 64 refaire
;mov r0, r3 ; partie reelle comme resultat mov r0, r3 ; 5.27
mov r1, r2 smull r0, r9, r3, r3 ; reel*reel
mov r0, r9
;abs smull r0, r10, r2, r2 ; im*im
cmp r3, #0 ; Calcul de la valeur absolue du résultat en stockant le maximum entre "r3" et 0 dans "r0". add r0, r9, r10 ; 10.22
movge r0, r3
neglt r0, r3
pop {r4, r5, r6, r8, r9, r10} pop {r4, r5, r6, r8, r9, r10}
bx lr bx lr

View file

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