TransformCQ15.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. #include "TransformCQ15.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. #define SNR_THRESHOLD 30
  6. void TransformCQ15::test_cfft_q15()
  7. {
  8. const q15_t *inp = input.ptr();
  9. q15_t *outfftp = outputfft.ptr();
  10. memcpy(outfftp,inp,sizeof(q15_t)*input.nbSamples());
  11. arm_cfft_q15(
  12. &(this->instCfftQ15),
  13. outfftp,
  14. this->ifft,
  15. 1);
  16. ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD);
  17. ASSERT_EMPTY_TAIL(outputfft);
  18. }
  19. void TransformCQ15::test_cifft_q15()
  20. {
  21. const q15_t *inp = input.ptr();
  22. q15_t *outfftp = outputfft.ptr();
  23. q15_t *refp = ref.ptr();
  24. memcpy(outfftp,inp,sizeof(q15_t)*input.nbSamples());
  25. arm_cfft_q15(
  26. &(this->instCfftQ15),
  27. outfftp,
  28. this->ifft,
  29. 1);
  30. for(unsigned long i=0; i < outputfft.nbSamples();i++)
  31. {
  32. refp[i] >>= this->scaling;
  33. }
  34. ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD);
  35. ASSERT_EMPTY_TAIL(outputfft);
  36. }
  37. void TransformCQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  38. {
  39. (void)paramsArgs;
  40. switch(id)
  41. {
  42. case TransformCQ15::TEST_CFFT_Q15_1:
  43. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_16_Q15_ID,mgr);
  44. ref.reload( TransformCQ15::REF_CFFT_NOISY_16_Q15_ID,mgr);
  45. status=arm_cfft_init_q15(&instCfftQ15,16);
  46. this->ifft=0;
  47. break;
  48. case TransformCQ15::TEST_CIFFT_Q15_19:
  49. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_16_Q15_ID,mgr);
  50. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_16_Q15_ID,mgr);
  51. status=arm_cfft_init_q15(&instCfftQ15,16);
  52. this->ifft=1;
  53. this->scaling = 4;
  54. break;
  55. case TransformCQ15::TEST_CFFT_Q15_2:
  56. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_32_Q15_ID,mgr);
  57. ref.reload( TransformCQ15::REF_CFFT_NOISY_32_Q15_ID,mgr);
  58. status=arm_cfft_init_q15(&instCfftQ15,32);
  59. this->ifft=0;
  60. break;
  61. case TransformCQ15::TEST_CIFFT_Q15_20:
  62. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_32_Q15_ID,mgr);
  63. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_32_Q15_ID,mgr);
  64. status=arm_cfft_init_q15(&instCfftQ15,32);
  65. this->ifft=1;
  66. this->scaling = 5;
  67. break;
  68. case TransformCQ15::TEST_CFFT_Q15_3:
  69. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_64_Q15_ID,mgr);
  70. ref.reload( TransformCQ15::REF_CFFT_NOISY_64_Q15_ID,mgr);
  71. status=arm_cfft_init_q15(&instCfftQ15,64);
  72. this->ifft=0;
  73. break;
  74. case TransformCQ15::TEST_CIFFT_Q15_21:
  75. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_64_Q15_ID,mgr);
  76. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_64_Q15_ID,mgr);
  77. status=arm_cfft_init_q15(&instCfftQ15,64);
  78. this->ifft=1;
  79. this->scaling=6;
  80. break;
  81. case TransformCQ15::TEST_CFFT_Q15_4:
  82. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_128_Q15_ID,mgr);
  83. ref.reload( TransformCQ15::REF_CFFT_NOISY_128_Q15_ID,mgr);
  84. status=arm_cfft_init_q15(&instCfftQ15,128);
  85. this->ifft=0;
  86. break;
  87. case TransformCQ15::TEST_CIFFT_Q15_22:
  88. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_128_Q15_ID,mgr);
  89. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_128_Q15_ID,mgr);
  90. status=arm_cfft_init_q15(&instCfftQ15,128);
  91. this->ifft=1;
  92. this->scaling=7;
  93. break;
  94. case TransformCQ15::TEST_CFFT_Q15_5:
  95. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_256_Q15_ID,mgr);
  96. ref.reload( TransformCQ15::REF_CFFT_NOISY_256_Q15_ID,mgr);
  97. status=arm_cfft_init_q15(&instCfftQ15,256);
  98. this->ifft=0;
  99. break;
  100. case TransformCQ15::TEST_CIFFT_Q15_23:
  101. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_256_Q15_ID,mgr);
  102. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_256_Q15_ID,mgr);
  103. status=arm_cfft_init_q15(&instCfftQ15,256);
  104. this->ifft=1;
  105. this->scaling=8;
  106. break;
  107. case TransformCQ15::TEST_CFFT_Q15_6:
  108. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_512_Q15_ID,mgr);
  109. ref.reload( TransformCQ15::REF_CFFT_NOISY_512_Q15_ID,mgr);
  110. status=arm_cfft_init_q15(&instCfftQ15,512);
  111. this->ifft=0;
  112. break;
  113. case TransformCQ15::TEST_CIFFT_Q15_24:
  114. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_512_Q15_ID,mgr);
  115. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_512_Q15_ID,mgr);
  116. status=arm_cfft_init_q15(&instCfftQ15,512);
  117. this->ifft=1;
  118. this->scaling=9;
  119. break;
  120. case TransformCQ15::TEST_CFFT_Q15_7:
  121. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_1024_Q15_ID,mgr);
  122. ref.reload( TransformCQ15::REF_CFFT_NOISY_1024_Q15_ID,mgr);
  123. status=arm_cfft_init_q15(&instCfftQ15,1024);
  124. this->ifft=0;
  125. break;
  126. case TransformCQ15::TEST_CIFFT_Q15_25:
  127. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_1024_Q15_ID,mgr);
  128. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_1024_Q15_ID,mgr);
  129. status=arm_cfft_init_q15(&instCfftQ15,1024);
  130. this->ifft=1;
  131. this->scaling=10;
  132. break;
  133. case TransformCQ15::TEST_CFFT_Q15_8:
  134. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_2048_Q15_ID,mgr);
  135. ref.reload( TransformCQ15::REF_CFFT_NOISY_2048_Q15_ID,mgr);
  136. status=arm_cfft_init_q15(&instCfftQ15,2048);
  137. this->ifft=0;
  138. break;
  139. case TransformCQ15::TEST_CIFFT_Q15_26:
  140. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_2048_Q15_ID,mgr);
  141. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_2048_Q15_ID,mgr);
  142. status=arm_cfft_init_q15(&instCfftQ15,2048);
  143. this->ifft=1;
  144. this->scaling=11;
  145. break;
  146. case TransformCQ15::TEST_CFFT_Q15_9:
  147. input.reload(TransformCQ15::INPUTS_CFFT_NOISY_4096_Q15_ID,mgr);
  148. ref.reload( TransformCQ15::REF_CFFT_NOISY_4096_Q15_ID,mgr);
  149. status=arm_cfft_init_q15(&instCfftQ15,4096);
  150. this->ifft=0;
  151. break;
  152. case TransformCQ15::TEST_CIFFT_Q15_27:
  153. input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_4096_Q15_ID,mgr);
  154. ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_4096_Q15_ID,mgr);
  155. status=arm_cfft_init_q15(&instCfftQ15,4096);
  156. this->ifft=1;
  157. this->scaling=12;
  158. break;
  159. /* STEP FUNCTIONS */
  160. case TransformCQ15::TEST_CFFT_Q15_10:
  161. input.reload(TransformCQ15::INPUTS_CFFT_STEP_16_Q15_ID,mgr);
  162. ref.reload( TransformCQ15::REF_CFFT_STEP_16_Q15_ID,mgr);
  163. status=arm_cfft_init_q15(&instCfftQ15,16);
  164. this->ifft=0;
  165. break;
  166. case TransformCQ15::TEST_CIFFT_Q15_28:
  167. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_16_Q15_ID,mgr);
  168. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_16_Q15_ID,mgr);
  169. status=arm_cfft_init_q15(&instCfftQ15,16);
  170. this->ifft=1;
  171. this->scaling=4;
  172. break;
  173. case TransformCQ15::TEST_CFFT_Q15_11:
  174. input.reload(TransformCQ15::INPUTS_CFFT_STEP_32_Q15_ID,mgr);
  175. ref.reload( TransformCQ15::REF_CFFT_STEP_32_Q15_ID,mgr);
  176. status=arm_cfft_init_q15(&instCfftQ15,32);
  177. this->ifft=0;
  178. break;
  179. case TransformCQ15::TEST_CIFFT_Q15_29:
  180. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_32_Q15_ID,mgr);
  181. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_32_Q15_ID,mgr);
  182. status=arm_cfft_init_q15(&instCfftQ15,32);
  183. this->ifft=1;
  184. this->scaling=5;
  185. break;
  186. case TransformCQ15::TEST_CFFT_Q15_12:
  187. input.reload(TransformCQ15::INPUTS_CFFT_STEP_64_Q15_ID,mgr);
  188. ref.reload( TransformCQ15::REF_CFFT_STEP_64_Q15_ID,mgr);
  189. status=arm_cfft_init_q15(&instCfftQ15,64);
  190. this->ifft=0;
  191. break;
  192. case TransformCQ15::TEST_CIFFT_Q15_30:
  193. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_64_Q15_ID,mgr);
  194. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_64_Q15_ID,mgr);
  195. status=arm_cfft_init_q15(&instCfftQ15,64);
  196. this->ifft=1;
  197. this->scaling=6;
  198. break;
  199. case TransformCQ15::TEST_CFFT_Q15_13:
  200. input.reload(TransformCQ15::INPUTS_CFFT_STEP_128_Q15_ID,mgr);
  201. ref.reload( TransformCQ15::REF_CFFT_STEP_128_Q15_ID,mgr);
  202. status=arm_cfft_init_q15(&instCfftQ15,128);
  203. this->ifft=0;
  204. break;
  205. case TransformCQ15::TEST_CIFFT_Q15_31:
  206. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_128_Q15_ID,mgr);
  207. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_128_Q15_ID,mgr);
  208. status=arm_cfft_init_q15(&instCfftQ15,128);
  209. this->ifft=1;
  210. this->scaling=7;
  211. break;
  212. case TransformCQ15::TEST_CFFT_Q15_14:
  213. input.reload(TransformCQ15::INPUTS_CFFT_STEP_256_Q15_ID,mgr);
  214. ref.reload( TransformCQ15::REF_CFFT_STEP_256_Q15_ID,mgr);
  215. status=arm_cfft_init_q15(&instCfftQ15,256);
  216. this->ifft=0;
  217. break;
  218. case TransformCQ15::TEST_CIFFT_Q15_32:
  219. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_256_Q15_ID,mgr);
  220. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_256_Q15_ID,mgr);
  221. status=arm_cfft_init_q15(&instCfftQ15,256);
  222. this->ifft=1;
  223. this->scaling=8;
  224. break;
  225. case TransformCQ15::TEST_CFFT_Q15_15:
  226. input.reload(TransformCQ15::INPUTS_CFFT_STEP_512_Q15_ID,mgr);
  227. ref.reload( TransformCQ15::REF_CFFT_STEP_512_Q15_ID,mgr);
  228. status=arm_cfft_init_q15(&instCfftQ15,512);
  229. this->ifft=0;
  230. break;
  231. case TransformCQ15::TEST_CIFFT_Q15_33:
  232. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_512_Q15_ID,mgr);
  233. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_512_Q15_ID,mgr);
  234. status=arm_cfft_init_q15(&instCfftQ15,512);
  235. this->ifft=1;
  236. this->scaling=9;
  237. break;
  238. case TransformCQ15::TEST_CFFT_Q15_16:
  239. input.reload(TransformCQ15::INPUTS_CFFT_STEP_1024_Q15_ID,mgr);
  240. ref.reload( TransformCQ15::REF_CFFT_STEP_1024_Q15_ID,mgr);
  241. status=arm_cfft_init_q15(&instCfftQ15,1024);
  242. this->ifft=0;
  243. break;
  244. case TransformCQ15::TEST_CIFFT_Q15_34:
  245. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_1024_Q15_ID,mgr);
  246. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_1024_Q15_ID,mgr);
  247. status=arm_cfft_init_q15(&instCfftQ15,1024);
  248. this->ifft=1;
  249. this->scaling=10;
  250. break;
  251. case TransformCQ15::TEST_CFFT_Q15_17:
  252. input.reload(TransformCQ15::INPUTS_CFFT_STEP_2048_Q15_ID,mgr);
  253. ref.reload( TransformCQ15::REF_CFFT_STEP_2048_Q15_ID,mgr);
  254. status=arm_cfft_init_q15(&instCfftQ15,2048);
  255. this->ifft=0;
  256. break;
  257. case TransformCQ15::TEST_CIFFT_Q15_35:
  258. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_2048_Q15_ID,mgr);
  259. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_2048_Q15_ID,mgr);
  260. status=arm_cfft_init_q15(&instCfftQ15,2048);
  261. this->ifft=1;
  262. this->scaling=11;
  263. break;
  264. case TransformCQ15::TEST_CFFT_Q15_18:
  265. input.reload(TransformCQ15::INPUTS_CFFT_STEP_4096_Q15_ID,mgr);
  266. ref.reload( TransformCQ15::REF_CFFT_STEP_4096_Q15_ID,mgr);
  267. status=arm_cfft_init_q15(&instCfftQ15,4096);
  268. this->ifft=0;
  269. break;
  270. case TransformCQ15::TEST_CIFFT_Q15_36:
  271. input.reload(TransformCQ15::INPUTS_CIFFT_STEP_4096_Q15_ID,mgr);
  272. ref.reload( TransformCQ15::INPUTS_CFFT_STEP_4096_Q15_ID,mgr);
  273. status=arm_cfft_init_q15(&instCfftQ15,4096);
  274. this->ifft=1;
  275. this->scaling=12;
  276. break;
  277. }
  278. outputfft.create(ref.nbSamples(),TransformCQ15::OUTPUT_CFFT_Q15_ID,mgr);
  279. }
  280. void TransformCQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  281. {
  282. (void)id;
  283. outputfft.dump(mgr);
  284. }