Correction du format + ajout de la constante N

This commit is contained in:
Yohan Simard 2020-03-31 16:55:48 +02:00
parent 4b88d9e615
commit 181edb6831

View file

@ -1,20 +1,20 @@
thumb thumb
AREA moncode, code, readonly AREA moncode, code, readonly
export dft export dft
extern N N equ 64
dft proc dft proc
push {lr, r4, r5, r0} ; empilage de l'adresse de retour push {lr, r4, r5, r0} ; empilage de l'adresse de retour
ldr r2, =TabCos ; on met l'addr de TabCos ldr r2, =TabCos ; on met l'addr de TabCos
bl cal_comp ; on calcule Re(k) bl cal_comp ; on calcule Re(k) | format : 5.28
smull r4, r5, r0, r0 ; r4r5 = Re(k)² | format : 2.30 smull r4, r5, r0, r0 ; (r4,r5) = Re(k)² | format : 10.54
pop {r0} pop {r0}
ldr r2, =TabSin ; on met l'addr de TabSin ldr r2, =TabSin ; on met l'addr de TabSin
bl cal_comp ; on calcule -Im(k) bl cal_comp ; on calcule -Im(k) | format : 5.28
smlal r4, r5, r0, r0 ; r4r5 = Re(k)² + Im(k)² | format : 2.30 smlal r4, r5, r0, r0 ; (r4,r5) = Re(k)² + Im(k)² | format : 10.54
mov r0, r5 ; On prend les 32 bits de poids fort pour revenir au format 1.15 mov r0, r5 ; On prend les 32 bits de poids fort pour convertir au format 10.22/3.29 ?
pop {pc, r4, r5} ; dépilage de l'adresse de retour pop {pc, r4, r5} ; dépilage de l'adresse de retour
endp endp
@ -26,18 +26,18 @@ cal_comp proc ; r0 = x (signal), r1 = k, r2 = sin ou cos
mov r5, #0 ; r5 = ik mov r5, #0 ; r5 = ik
mov r7, #0 ; r7 = 0 mov r7, #0 ; r7 = 0
deb_somme ldrh r4, [r0, r3, LSL #1] ; r4 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets deb_somme ldrh r4, [r0, r3, LSL #1] ; r4 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets | format 4.12
ldrsh r6, [r2, r5, LSL #1] ; r6 = cos ou sin [ik%N] ldrsh r6, [r2, r5, LSL #1] ; r6 = cos ou sin [ik%N] | format 1.15
mla r7, r4, r6, r7 ; r7 += x[i] * cos/sin[ik%n] mla r7, r4, r6, r7 ; r7 += x[i] * cos|sin[ik%n] | format 5.27
add r5, r1 ; r5 = (i-1)k + k add r5, r1 ; r5 = (i-1)k + k
and r5, #63 ; r5 = r5 % 64 and r5, #N-1 ; r5 = r5 % 64
add r3, #1 ; on incrémente i add r3, #1 ; on incrémente i
cmp r3, #64 ; on harcode la valeur ou on utilise N ? cmp r3, #N ;
bne deb_somme bne deb_somme
mov r0, r7 mov r0, r7
pop {r4, r5, r6, r7} pop {r4, r5, r6, r7}¿¿
bx lr bx lr
endp endp
@ -65,6 +65,7 @@ deb_somme ldrh r4, [r0, r3, LSL #1] ; r4 = x[i], LSL #1 pour faire
; pour les autres valeurs de k sauf les alias de 23 et 24 : ; pour les autres valeurs de k sauf les alias de 23 et 24 :
; M2 < 0x0000000F ; M2 < 0x0000000F
TabSig TabSig
DCW 1646 ; 0 0x066e 0.40186 DCW 1646 ; 0 0x066e 0.40186
DCW 3006 ; 1 0x0bbe 0.73389 DCW 3006 ; 1 0x0bbe 0.73389