thumb AREA moncode, code, readonly export dft N equ 64 ; vitesse initiale : 1726 ; vitesse actuelle : 1119 dft proc ; r0 = x (signal), r1 = k push {r4, r5, r6, r7, r8, r9} ldr r2, =TabCos ldr r3, =TabSin mov r4, #0 ; r4 = i mov r5, #0 ; r5 = ik mov r9, #0 ; r9 = résultat réel mov r12, #0 ; r10 = résultat imaginaire deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets | format 4.12 ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15 ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15 mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27 mla r12, r6, r8, r12 ; r10 += x[i] * sin[ik%n] | format 5.27 add r5, r1 ; r5 = (i-1)k + k and r5, #N-1 ; r5 = r5 % 64 add r4, #1 ; on incrémente i cmp r4, #N ; bne deb_somme ; etat des registres : r0 = x, r1 = k, r9 = Re, r10 = Im, autres libres smull r2, r0, r9, r9 ; (r2,r0) = Re(k)² | format : 10.54 smlal r2, r0, r12, r12 ; (r2,r0) = Re(k)² + Im(k)² | format : 10.54 pop {r4, r5, r6, r7, r8, r9} bx lr endp AREA Signal, DATA, READONLY export TabSig ; Fnor1 = 23.000 ; Ph1 = -26.565 ; A1 = 62.000 env. 50mV/3300mV ; Fnor2 = 24.000 ; Ph2 = -116.565 ; A2 = 1024.000 ; valeurs attendues pour k = 23 : ; Re 0x0378FDBD ; Im 0x01BAD0C5 env 0.5 * Re, car tan(26.565) ~= 0.5 ; M2 0x000F0D16 986390 ; ; valeurs attendues pour k = 24 : ; Re 0xE36136DD env -0.447 * 2^30 ; Im 0x393E61CA env -2 * Re, car tan(116.565) ~= 2.0 ; M2 0x0FFFF53C env 2^28 ; ; pour les autres valeurs de k sauf les alias de 23 et 24 : ; M2 < 0x0000000F TabSig DCW 1646 ; 0 0x066e 0.40186 DCW 3006 ; 1 0x0bbe 0.73389 DCW 1094 ; 2 0x0446 0.26709 DCW 2434 ; 3 0x0982 0.59424 DCW 2465 ; 4 0x09a1 0.60181 DCW 1066 ; 5 0x042a 0.26025 DCW 3018 ; 6 0x0bca 0.73682 DCW 1666 ; 7 0x0682 0.40674 DCW 1610 ; 8 0x064a 0.39307 DCW 3052 ; 9 0x0bec 0.74512 DCW 1071 ; 10 0x042f 0.26147 DCW 2417 ; 11 0x0971 0.59009 DCW 2510 ; 12 0x09ce 0.61279 DCW 1026 ; 13 0x0402 0.25049 DCW 3024 ; 14 0x0bd0 0.73828 DCW 1699 ; 15 0x06a3 0.41479 DCW 1562 ; 16 0x061a 0.38135 DCW 3080 ; 17 0x0c08 0.75195 DCW 1083 ; 18 0x043b 0.26440 DCW 2374 ; 19 0x0946 0.57959 DCW 2553 ; 20 0x09f9 0.62329 DCW 1015 ; 21 0x03f7 0.24780 DCW 2995 ; 22 0x0bb3 0.73120 DCW 1746 ; 23 0x06d2 0.42627 DCW 1531 ; 24 0x05fb 0.37378 DCW 3072 ; 25 0x0c00 0.75000 DCW 1124 ; 26 0x0464 0.27441 DCW 2329 ; 27 0x0919 0.56860 DCW 2568 ; 28 0x0a08 0.62695 DCW 1041 ; 29 0x0411 0.25415 DCW 2948 ; 30 0x0b84 0.71973 DCW 1781 ; 31 0x06f5 0.43481 DCW 1535 ; 32 0x05ff 0.37476 DCW 3033 ; 33 0x0bd9 0.74048 DCW 1170 ; 34 0x0492 0.28564 DCW 2310 ; 35 0x0906 0.56396 DCW 2547 ; 36 0x09f3 0.62183 DCW 1087 ; 37 0x043f 0.26538 DCW 2910 ; 38 0x0b5e 0.71045 DCW 1782 ; 39 0x06f6 0.43506 DCW 1570 ; 40 0x0622 0.38330 DCW 2986 ; 41 0x0baa 0.72900 DCW 1194 ; 42 0x04aa 0.29150 DCW 2327 ; 43 0x0917 0.56812 DCW 2502 ; 44 0x09c6 0.61084 DCW 1127 ; 45 0x0467 0.27515 DCW 2904 ; 46 0x0b58 0.70898 DCW 1749 ; 47 0x06d5 0.42700 DCW 1618 ; 48 0x0652 0.39502 DCW 2959 ; 49 0x0b8f 0.72241 DCW 1181 ; 50 0x049d 0.28833 DCW 2370 ; 51 0x0942 0.57861 DCW 2459 ; 52 0x099b 0.60034 DCW 1138 ; 53 0x0472 0.27783 DCW 2933 ; 54 0x0b75 0.71606 DCW 1702 ; 55 0x06a6 0.41553 DCW 1649 ; 56 0x0671 0.40259 DCW 2967 ; 57 0x0b97 0.72437 DCW 1140 ; 58 0x0474 0.27832 DCW 2414 ; 59 0x096e 0.58936 DCW 2444 ; 60 0x098c 0.59668 DCW 1112 ; 61 0x0458 0.27148 DCW 2980 ; 62 0x0ba4 0.72754 DCW 1668 ; 63 0x0684 0.40723 AREA Trigo, DATA, READONLY export TabSin export TabCos TabCos DCW 32767 ; 0 0x7fff 0.99997 DCW 32610 ; 1 0x7f62 0.99518 DCW 32138 ; 2 0x7d8a 0.98077 DCW 31357 ; 3 0x7a7d 0.95694 DCW 30274 ; 4 0x7642 0.92389 DCW 28899 ; 5 0x70e3 0.88193 DCW 27246 ; 6 0x6a6e 0.83148 DCW 25330 ; 7 0x62f2 0.77301 DCW 23170 ; 8 0x5a82 0.70709 DCW 20788 ; 9 0x5134 0.63440 DCW 18205 ; 10 0x471d 0.55557 DCW 15447 ; 11 0x3c57 0.47141 DCW 12540 ; 12 0x30fc 0.38269 DCW 9512 ; 13 0x2528 0.29028 DCW 6393 ; 14 0x18f9 0.19510 DCW 3212 ; 15 0x0c8c 0.09802 DCW 0 ; 16 0x0000 0.00000 DCW -3212 ; 17 0xf374 -0.09802 DCW -6393 ; 18 0xe707 -0.19510 DCW -9512 ; 19 0xdad8 -0.29028 DCW -12540 ; 20 0xcf04 -0.38269 DCW -15447 ; 21 0xc3a9 -0.47141 DCW -18205 ; 22 0xb8e3 -0.55557 DCW -20788 ; 23 0xaecc -0.63440 DCW -23170 ; 24 0xa57e -0.70709 DCW -25330 ; 25 0x9d0e -0.77301 DCW -27246 ; 26 0x9592 -0.83148 DCW -28899 ; 27 0x8f1d -0.88193 DCW -30274 ; 28 0x89be -0.92389 DCW -31357 ; 29 0x8583 -0.95694 DCW -32138 ; 30 0x8276 -0.98077 DCW -32610 ; 31 0x809e -0.99518 DCW -32768 ; 32 0x8000 -1.00000 DCW -32610 ; 33 0x809e -0.99518 DCW -32138 ; 34 0x8276 -0.98077 DCW -31357 ; 35 0x8583 -0.95694 DCW -30274 ; 36 0x89be -0.92389 DCW -28899 ; 37 0x8f1d -0.88193 DCW -27246 ; 38 0x9592 -0.83148 DCW -25330 ; 39 0x9d0e -0.77301 DCW -23170 ; 40 0xa57e -0.70709 DCW -20788 ; 41 0xaecc -0.63440 DCW -18205 ; 42 0xb8e3 -0.55557 DCW -15447 ; 43 0xc3a9 -0.47141 DCW -12540 ; 44 0xcf04 -0.38269 DCW -9512 ; 45 0xdad8 -0.29028 DCW -6393 ; 46 0xe707 -0.19510 DCW -3212 ; 47 0xf374 -0.09802 DCW 0 ; 48 0x0000 0.00000 DCW 3212 ; 49 0x0c8c 0.09802 DCW 6393 ; 50 0x18f9 0.19510 DCW 9512 ; 51 0x2528 0.29028 DCW 12540 ; 52 0x30fc 0.38269 DCW 15447 ; 53 0x3c57 0.47141 DCW 18205 ; 54 0x471d 0.55557 DCW 20788 ; 55 0x5134 0.63440 DCW 23170 ; 56 0x5a82 0.70709 DCW 25330 ; 57 0x62f2 0.77301 DCW 27246 ; 58 0x6a6e 0.83148 DCW 28899 ; 59 0x70e3 0.88193 DCW 30274 ; 60 0x7642 0.92389 DCW 31357 ; 61 0x7a7d 0.95694 DCW 32138 ; 62 0x7d8a 0.98077 DCW 32610 ; 63 0x7f62 0.99518 TabSin DCW 0 ; 0 0x0000 0.00000 DCW 3212 ; 1 0x0c8c 0.09802 DCW 6393 ; 2 0x18f9 0.19510 DCW 9512 ; 3 0x2528 0.29028 DCW 12540 ; 4 0x30fc 0.38269 DCW 15447 ; 5 0x3c57 0.47141 DCW 18205 ; 6 0x471d 0.55557 DCW 20788 ; 7 0x5134 0.63440 DCW 23170 ; 8 0x5a82 0.70709 DCW 25330 ; 9 0x62f2 0.77301 DCW 27246 ; 10 0x6a6e 0.83148 DCW 28899 ; 11 0x70e3 0.88193 DCW 30274 ; 12 0x7642 0.92389 DCW 31357 ; 13 0x7a7d 0.95694 DCW 32138 ; 14 0x7d8a 0.98077 DCW 32610 ; 15 0x7f62 0.99518 DCW 32767 ; 16 0x7fff 0.99997 DCW 32610 ; 17 0x7f62 0.99518 DCW 32138 ; 18 0x7d8a 0.98077 DCW 31357 ; 19 0x7a7d 0.95694 DCW 30274 ; 20 0x7642 0.92389 DCW 28899 ; 21 0x70e3 0.88193 DCW 27246 ; 22 0x6a6e 0.83148 DCW 25330 ; 23 0x62f2 0.77301 DCW 23170 ; 24 0x5a82 0.70709 DCW 20788 ; 25 0x5134 0.63440 DCW 18205 ; 26 0x471d 0.55557 DCW 15447 ; 27 0x3c57 0.47141 DCW 12540 ; 28 0x30fc 0.38269 DCW 9512 ; 29 0x2528 0.29028 DCW 6393 ; 30 0x18f9 0.19510 DCW 3212 ; 31 0x0c8c 0.09802 DCW 0 ; 32 0x0000 0.00000 DCW -3212 ; 33 0xf374 -0.09802 DCW -6393 ; 34 0xe707 -0.19510 DCW -9512 ; 35 0xdad8 -0.29028 DCW -12540 ; 36 0xcf04 -0.38269 DCW -15447 ; 37 0xc3a9 -0.47141 DCW -18205 ; 38 0xb8e3 -0.55557 DCW -20788 ; 39 0xaecc -0.63440 DCW -23170 ; 40 0xa57e -0.70709 DCW -25330 ; 41 0x9d0e -0.77301 DCW -27246 ; 42 0x9592 -0.83148 DCW -28899 ; 43 0x8f1d -0.88193 DCW -30274 ; 44 0x89be -0.92389 DCW -31357 ; 45 0x8583 -0.95694 DCW -32138 ; 46 0x8276 -0.98077 DCW -32610 ; 47 0x809e -0.99518 DCW -32768 ; 48 0x8000 -1.00000 DCW -32610 ; 49 0x809e -0.99518 DCW -32138 ; 50 0x8276 -0.98077 DCW -31357 ; 51 0x8583 -0.95694 DCW -30274 ; 52 0x89be -0.92389 DCW -28899 ; 53 0x8f1d -0.88193 DCW -27246 ; 54 0x9592 -0.83148 DCW -25330 ; 55 0x9d0e -0.77301 DCW -23170 ; 56 0xa57e -0.70709 DCW -20788 ; 57 0xaecc -0.63440 DCW -18205 ; 58 0xb8e3 -0.55557 DCW -15447 ; 59 0xc3a9 -0.47141 DCW -12540 ; 60 0xcf04 -0.38269 DCW -9512 ; 61 0xdad8 -0.29028 DCW -6393 ; 62 0xe707 -0.19510 DCW -3212 ; 63 0xf374 -0.09802 END