forked from acco/chti23
DFT fini
This commit is contained in:
parent
efe2996a78
commit
3a906d3fcc
3 changed files with 48 additions and 37 deletions
|
@ -23,36 +23,39 @@
|
||||||
|
|
||||||
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
|
||||||
endp
|
endp
|
||||||
|
|
|
@ -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 ; 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
|
mov r4, #0 ; compteur pour parcourir le signal d'entrée
|
||||||
ldr r5, =TabCos ; les adresses du tableau "TabCos"
|
ldr r5, =TabCos ; les adresses du tableau "TabCos"
|
||||||
ldr r6, =TabSin ; les adresses du tableau "TabSin"
|
ldr r6, =TabSin ; les adresses du tableau "TabSin"
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue