Code source pour le BE-CHTI de l'année 2020-2021
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DFT.s 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. PRESERVE8
  2. THUMB
  3. ; ====================== zone de réservation de données, ======================================
  4. ;Section RAM (read only) :
  5. area mesdata,data,readonly
  6. ;Section RAM (read write):
  7. area maram,data,readwrite
  8. export DFT_ModuleAuCarre
  9. ; ===============================================================================================
  10. ;Section ROM code (read only) :
  11. area moncode,code,readonly
  12. ; écrire le code ici
  13. DFT_ModuleAuCarre proc
  14. ; dans r0 On a l'adresse du départ du tableau du signal
  15. ; dans r1 on a le nombre k
  16. push {r4-r10}
  17. ; on utilise R2 pour stocker la somme des cosinus
  18. mov r2, #0;
  19. ; on utilise R7 pour stocker la somme des sinus
  20. mov r7, #0;
  21. ; on utilise r3 pour stocker n
  22. mov r3, #0;
  23. boucle
  24. ; on load la valeur du son signal[i]
  25. ; on utilise LDR mais que sur 16 bits car le chiffre est au format 1.15
  26. ; on charge depuis l'adresse r0 avec un décalage r3, on décale de 2^4 = 16 bits
  27. ldrh r4, [r0,r3,LSL #1]
  28. ; on fait k*n pour avoir p
  29. ; donc dans r6 on a p
  30. mul r6, r3, r1
  31. ; ensuite on fait le modulo 64
  32. ; ce qui revient à faire un masque sur les 2^6 premiers bits
  33. ; XXXXXXXXXXXXXXXX
  34. ; AND
  35. ; 0000000000111111 = 63 en binaire
  36. and r6, r6,#63
  37. ;on va chercher la valeur du cosinus
  38. ldr r5, =TabCos
  39. ldrsh r5, [r5, r6, LSL #1]
  40. ; on va chercher la valeur du sinus
  41. ldr r8, =TabSin
  42. ldrsh r8, [r8, r6, LSL #1]
  43. ; ATTENTION : on multiplie un format 1.12 avec un format 1.15 donc le résultat est au format 2.27
  44. ; DONC : on fait 16bits * 16 bits = 32 bits
  45. mul r5,r4 ; f(x) * cos(p)
  46. mul r8,r4 ; f(x) * sin(p)
  47. ; on est sûr que l'on a la partie entière qui ne peut pas être supérieure à 1
  48. ; donc on a pas de risque de débordement si on remasse en 1.15
  49. ; on repase en 1.12 en décalant de 15 bits à droite, mais on préserve le signe
  50. asr r5, #15
  51. asr r8, #15
  52. ; Attention, à force d'ajouter du 1.12 on peut facilement déborder en 6.12 car on peut potentiellement ajouter 1 à chaque itération ! (donc 64 = 2^6)
  53. add r2, r5
  54. add r7, r8
  55. ;on incrémente notre i
  56. add r3, #1
  57. cmp r3, #63
  58. bne boucle
  59. ; MISE AU CARRE : attention on a 6.12 * 6.12 = 12.24 donc 36 bits or le registre est sur 32 bits.
  60. ; Donc on réduit de 6.12 à 6.10 avec de pouvoir avoir : 6.10 * 6.10 = 12.20 = 32 bits.
  61. asr r2, #2
  62. asr r7, #2
  63. ; format 12.20
  64. mul r2,r2
  65. mul r7,r7
  66. ; la somme totale doit etre retournée dans r1
  67. ; sauf que 12.20 + 12.20 il y a risque de débordement
  68. ; donc on passe en 12.19 + 12.19 et le résultat sera en 13.19
  69. asr r2, #1
  70. asr r7, #1
  71. ; on les somme : on passe en 13.19
  72. add r2, r7
  73. ; on place le résultat dans r0
  74. mov r0, r2
  75. pop {r4-r10}
  76. bx lr
  77. endp
  78. ;Section ROM code (read only) :
  79. AREA Trigo, DATA, READONLY
  80. ; codage fractionnaire 1.15
  81. TabCos
  82. DCW 32767 ; 0 0x7fff 0.99997
  83. DCW 32610 ; 1 0x7f62 0.99518
  84. DCW 32138 ; 2 0x7d8a 0.98077
  85. DCW 31357 ; 3 0x7a7d 0.95694
  86. DCW 30274 ; 4 0x7642 0.92389
  87. DCW 28899 ; 5 0x70e3 0.88193
  88. DCW 27246 ; 6 0x6a6e 0.83148
  89. DCW 25330 ; 7 0x62f2 0.77301
  90. DCW 23170 ; 8 0x5a82 0.70709
  91. DCW 20788 ; 9 0x5134 0.63440
  92. DCW 18205 ; 10 0x471d 0.55557
  93. DCW 15447 ; 11 0x3c57 0.47141
  94. DCW 12540 ; 12 0x30fc 0.38269
  95. DCW 9512 ; 13 0x2528 0.29028
  96. DCW 6393 ; 14 0x18f9 0.19510
  97. DCW 3212 ; 15 0x0c8c 0.09802
  98. DCW 0 ; 16 0x0000 0.00000
  99. DCW -3212 ; 17 0xf374 -0.09802
  100. DCW -6393 ; 18 0xe707 -0.19510
  101. DCW -9512 ; 19 0xdad8 -0.29028
  102. DCW -12540 ; 20 0xcf04 -0.38269
  103. DCW -15447 ; 21 0xc3a9 -0.47141
  104. DCW -18205 ; 22 0xb8e3 -0.55557
  105. DCW -20788 ; 23 0xaecc -0.63440
  106. DCW -23170 ; 24 0xa57e -0.70709
  107. DCW -25330 ; 25 0x9d0e -0.77301
  108. DCW -27246 ; 26 0x9592 -0.83148
  109. DCW -28899 ; 27 0x8f1d -0.88193
  110. DCW -30274 ; 28 0x89be -0.92389
  111. DCW -31357 ; 29 0x8583 -0.95694
  112. DCW -32138 ; 30 0x8276 -0.98077
  113. DCW -32610 ; 31 0x809e -0.99518
  114. DCW -32768 ; 32 0x8000 -1.00000
  115. DCW -32610 ; 33 0x809e -0.99518
  116. DCW -32138 ; 34 0x8276 -0.98077
  117. DCW -31357 ; 35 0x8583 -0.95694
  118. DCW -30274 ; 36 0x89be -0.92389
  119. DCW -28899 ; 37 0x8f1d -0.88193
  120. DCW -27246 ; 38 0x9592 -0.83148
  121. DCW -25330 ; 39 0x9d0e -0.77301
  122. DCW -23170 ; 40 0xa57e -0.70709
  123. DCW -20788 ; 41 0xaecc -0.63440
  124. DCW -18205 ; 42 0xb8e3 -0.55557
  125. DCW -15447 ; 43 0xc3a9 -0.47141
  126. DCW -12540 ; 44 0xcf04 -0.38269
  127. DCW -9512 ; 45 0xdad8 -0.29028
  128. DCW -6393 ; 46 0xe707 -0.19510
  129. DCW -3212 ; 47 0xf374 -0.09802
  130. DCW 0 ; 48 0x0000 0.00000
  131. DCW 3212 ; 49 0x0c8c 0.09802
  132. DCW 6393 ; 50 0x18f9 0.19510
  133. DCW 9512 ; 51 0x2528 0.29028
  134. DCW 12540 ; 52 0x30fc 0.38269
  135. DCW 15447 ; 53 0x3c57 0.47141
  136. DCW 18205 ; 54 0x471d 0.55557
  137. DCW 20788 ; 55 0x5134 0.63440
  138. DCW 23170 ; 56 0x5a82 0.70709
  139. DCW 25330 ; 57 0x62f2 0.77301
  140. DCW 27246 ; 58 0x6a6e 0.83148
  141. DCW 28899 ; 59 0x70e3 0.88193
  142. DCW 30274 ; 60 0x7642 0.92389
  143. DCW 31357 ; 61 0x7a7d 0.95694
  144. DCW 32138 ; 62 0x7d8a 0.98077
  145. DCW 32610 ; 63 0x7f62 0.99518
  146. TabSin
  147. DCW 0 ; 0 0x0000 0.00000
  148. DCW 3212 ; 1 0x0c8c 0.09802
  149. DCW 6393 ; 2 0x18f9 0.19510
  150. DCW 9512 ; 3 0x2528 0.29028
  151. DCW 12540 ; 4 0x30fc 0.38269
  152. DCW 15447 ; 5 0x3c57 0.47141
  153. DCW 18205 ; 6 0x471d 0.55557
  154. DCW 20788 ; 7 0x5134 0.63440
  155. DCW 23170 ; 8 0x5a82 0.70709
  156. DCW 25330 ; 9 0x62f2 0.77301
  157. DCW 27246 ; 10 0x6a6e 0.83148
  158. DCW 28899 ; 11 0x70e3 0.88193
  159. DCW 30274 ; 12 0x7642 0.92389
  160. DCW 31357 ; 13 0x7a7d 0.95694
  161. DCW 32138 ; 14 0x7d8a 0.98077
  162. DCW 32610 ; 15 0x7f62 0.99518
  163. DCW 32767 ; 16 0x7fff 0.99997
  164. DCW 32610 ; 17 0x7f62 0.99518
  165. DCW 32138 ; 18 0x7d8a 0.98077
  166. DCW 31357 ; 19 0x7a7d 0.95694
  167. DCW 30274 ; 20 0x7642 0.92389
  168. DCW 28899 ; 21 0x70e3 0.88193
  169. DCW 27246 ; 22 0x6a6e 0.83148
  170. DCW 25330 ; 23 0x62f2 0.77301
  171. DCW 23170 ; 24 0x5a82 0.70709
  172. DCW 20788 ; 25 0x5134 0.63440
  173. DCW 18205 ; 26 0x471d 0.55557
  174. DCW 15447 ; 27 0x3c57 0.47141
  175. DCW 12540 ; 28 0x30fc 0.38269
  176. DCW 9512 ; 29 0x2528 0.29028
  177. DCW 6393 ; 30 0x18f9 0.19510
  178. DCW 3212 ; 31 0x0c8c 0.09802
  179. DCW 0 ; 32 0x0000 0.00000
  180. DCW -3212 ; 33 0xf374 -0.09802
  181. DCW -6393 ; 34 0xe707 -0.19510
  182. DCW -9512 ; 35 0xdad8 -0.29028
  183. DCW -12540 ; 36 0xcf04 -0.38269
  184. DCW -15447 ; 37 0xc3a9 -0.47141
  185. DCW -18205 ; 38 0xb8e3 -0.55557
  186. DCW -20788 ; 39 0xaecc -0.63440
  187. DCW -23170 ; 40 0xa57e -0.70709
  188. DCW -25330 ; 41 0x9d0e -0.77301
  189. DCW -27246 ; 42 0x9592 -0.83148
  190. DCW -28899 ; 43 0x8f1d -0.88193
  191. DCW -30274 ; 44 0x89be -0.92389
  192. DCW -31357 ; 45 0x8583 -0.95694
  193. DCW -32138 ; 46 0x8276 -0.98077
  194. DCW -32610 ; 47 0x809e -0.99518
  195. DCW -32768 ; 48 0x8000 -1.00000
  196. DCW -32610 ; 49 0x809e -0.99518
  197. DCW -32138 ; 50 0x8276 -0.98077
  198. DCW -31357 ; 51 0x8583 -0.95694
  199. DCW -30274 ; 52 0x89be -0.92389
  200. DCW -28899 ; 53 0x8f1d -0.88193
  201. DCW -27246 ; 54 0x9592 -0.83148
  202. DCW -25330 ; 55 0x9d0e -0.77301
  203. DCW -23170 ; 56 0xa57e -0.70709
  204. DCW -20788 ; 57 0xaecc -0.63440
  205. DCW -18205 ; 58 0xb8e3 -0.55557
  206. DCW -15447 ; 59 0xc3a9 -0.47141
  207. DCW -12540 ; 60 0xcf04 -0.38269
  208. DCW -9512 ; 61 0xdad8 -0.29028
  209. DCW -6393 ; 62 0xe707 -0.19510
  210. DCW -3212 ; 63 0xf374 -0.09802
  211. END