1 #include "TransformCQ15.h" 2 #include <stdio.h> 3 #include "Error.h" 4 #include "Test.h" 5 6 #define SNR_THRESHOLD 30 7 test_cfft_q15()8 void TransformCQ15::test_cfft_q15() 9 { 10 const q15_t *inp = input.ptr(); 11 12 q15_t *outfftp = outputfft.ptr(); 13 14 memcpy(outfftp,inp,sizeof(q15_t)*input.nbSamples()); 15 16 arm_cfft_q15( 17 &(this->instCfftQ15), 18 outfftp, 19 this->ifft, 20 1); 21 22 ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD); 23 ASSERT_EMPTY_TAIL(outputfft); 24 25 26 } 27 test_cifft_q15()28 void TransformCQ15::test_cifft_q15() 29 { 30 const q15_t *inp = input.ptr(); 31 32 q15_t *outfftp = outputfft.ptr(); 33 q15_t *refp = ref.ptr(); 34 35 memcpy(outfftp,inp,sizeof(q15_t)*input.nbSamples()); 36 37 arm_cfft_q15( 38 &(this->instCfftQ15), 39 outfftp, 40 this->ifft, 41 1); 42 43 for(unsigned long i=0; i < outputfft.nbSamples();i++) 44 { 45 refp[i] >>= this->scaling; 46 } 47 48 ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD); 49 ASSERT_EMPTY_TAIL(outputfft); 50 51 52 53 } 54 55 setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)56 void TransformCQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) 57 { 58 59 60 (void)paramsArgs; 61 62 switch(id) 63 { 64 case TransformCQ15::TEST_CFFT_Q15_1: 65 66 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_16_Q15_ID,mgr); 67 ref.reload( TransformCQ15::REF_CFFT_NOISY_16_Q15_ID,mgr); 68 69 status=arm_cfft_init_q15(&instCfftQ15,16); 70 71 this->ifft=0; 72 73 break; 74 75 case TransformCQ15::TEST_CIFFT_Q15_19: 76 77 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_16_Q15_ID,mgr); 78 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_16_Q15_ID,mgr); 79 80 status=arm_cfft_init_q15(&instCfftQ15,16); 81 82 this->ifft=1; 83 this->scaling = 4; 84 85 break; 86 87 case TransformCQ15::TEST_CFFT_Q15_2: 88 89 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_32_Q15_ID,mgr); 90 ref.reload( TransformCQ15::REF_CFFT_NOISY_32_Q15_ID,mgr); 91 92 status=arm_cfft_init_q15(&instCfftQ15,32); 93 94 this->ifft=0; 95 96 break; 97 98 case TransformCQ15::TEST_CIFFT_Q15_20: 99 100 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_32_Q15_ID,mgr); 101 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_32_Q15_ID,mgr); 102 103 status=arm_cfft_init_q15(&instCfftQ15,32); 104 105 this->ifft=1; 106 this->scaling = 5; 107 108 break; 109 110 case TransformCQ15::TEST_CFFT_Q15_3: 111 112 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_64_Q15_ID,mgr); 113 ref.reload( TransformCQ15::REF_CFFT_NOISY_64_Q15_ID,mgr); 114 115 status=arm_cfft_init_q15(&instCfftQ15,64); 116 117 this->ifft=0; 118 119 120 break; 121 122 case TransformCQ15::TEST_CIFFT_Q15_21: 123 124 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_64_Q15_ID,mgr); 125 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_64_Q15_ID,mgr); 126 127 status=arm_cfft_init_q15(&instCfftQ15,64); 128 129 this->ifft=1; 130 this->scaling=6; 131 132 break; 133 134 case TransformCQ15::TEST_CFFT_Q15_4: 135 136 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_128_Q15_ID,mgr); 137 ref.reload( TransformCQ15::REF_CFFT_NOISY_128_Q15_ID,mgr); 138 139 status=arm_cfft_init_q15(&instCfftQ15,128); 140 141 this->ifft=0; 142 143 break; 144 145 case TransformCQ15::TEST_CIFFT_Q15_22: 146 147 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_128_Q15_ID,mgr); 148 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_128_Q15_ID,mgr); 149 150 status=arm_cfft_init_q15(&instCfftQ15,128); 151 152 this->ifft=1; 153 this->scaling=7; 154 155 break; 156 157 case TransformCQ15::TEST_CFFT_Q15_5: 158 159 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_256_Q15_ID,mgr); 160 ref.reload( TransformCQ15::REF_CFFT_NOISY_256_Q15_ID,mgr); 161 162 status=arm_cfft_init_q15(&instCfftQ15,256); 163 164 this->ifft=0; 165 166 break; 167 168 case TransformCQ15::TEST_CIFFT_Q15_23: 169 170 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_256_Q15_ID,mgr); 171 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_256_Q15_ID,mgr); 172 173 status=arm_cfft_init_q15(&instCfftQ15,256); 174 175 this->ifft=1; 176 this->scaling=8; 177 178 break; 179 180 case TransformCQ15::TEST_CFFT_Q15_6: 181 182 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_512_Q15_ID,mgr); 183 ref.reload( TransformCQ15::REF_CFFT_NOISY_512_Q15_ID,mgr); 184 185 status=arm_cfft_init_q15(&instCfftQ15,512); 186 187 this->ifft=0; 188 189 190 break; 191 192 case TransformCQ15::TEST_CIFFT_Q15_24: 193 194 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_512_Q15_ID,mgr); 195 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_512_Q15_ID,mgr); 196 197 status=arm_cfft_init_q15(&instCfftQ15,512); 198 199 this->ifft=1; 200 this->scaling=9; 201 202 203 break; 204 205 case TransformCQ15::TEST_CFFT_Q15_7: 206 207 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_1024_Q15_ID,mgr); 208 ref.reload( TransformCQ15::REF_CFFT_NOISY_1024_Q15_ID,mgr); 209 210 status=arm_cfft_init_q15(&instCfftQ15,1024); 211 212 this->ifft=0; 213 214 break; 215 216 case TransformCQ15::TEST_CIFFT_Q15_25: 217 218 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_1024_Q15_ID,mgr); 219 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_1024_Q15_ID,mgr); 220 221 status=arm_cfft_init_q15(&instCfftQ15,1024); 222 223 this->ifft=1; 224 this->scaling=10; 225 226 break; 227 228 case TransformCQ15::TEST_CFFT_Q15_8: 229 230 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_2048_Q15_ID,mgr); 231 ref.reload( TransformCQ15::REF_CFFT_NOISY_2048_Q15_ID,mgr); 232 233 status=arm_cfft_init_q15(&instCfftQ15,2048); 234 235 this->ifft=0; 236 237 break; 238 239 case TransformCQ15::TEST_CIFFT_Q15_26: 240 241 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_2048_Q15_ID,mgr); 242 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_2048_Q15_ID,mgr); 243 244 status=arm_cfft_init_q15(&instCfftQ15,2048); 245 246 this->ifft=1; 247 this->scaling=11; 248 249 break; 250 251 case TransformCQ15::TEST_CFFT_Q15_9: 252 253 input.reload(TransformCQ15::INPUTS_CFFT_NOISY_4096_Q15_ID,mgr); 254 ref.reload( TransformCQ15::REF_CFFT_NOISY_4096_Q15_ID,mgr); 255 256 status=arm_cfft_init_q15(&instCfftQ15,4096); 257 258 this->ifft=0; 259 260 break; 261 262 case TransformCQ15::TEST_CIFFT_Q15_27: 263 264 input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_4096_Q15_ID,mgr); 265 ref.reload( TransformCQ15::INPUTS_CFFT_NOISY_4096_Q15_ID,mgr); 266 267 status=arm_cfft_init_q15(&instCfftQ15,4096); 268 269 this->ifft=1; 270 this->scaling=12; 271 272 break; 273 274 /* STEP FUNCTIONS */ 275 276 case TransformCQ15::TEST_CFFT_Q15_10: 277 278 input.reload(TransformCQ15::INPUTS_CFFT_STEP_16_Q15_ID,mgr); 279 ref.reload( TransformCQ15::REF_CFFT_STEP_16_Q15_ID,mgr); 280 281 status=arm_cfft_init_q15(&instCfftQ15,16); 282 283 this->ifft=0; 284 285 break; 286 287 case TransformCQ15::TEST_CIFFT_Q15_28: 288 289 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_16_Q15_ID,mgr); 290 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_16_Q15_ID,mgr); 291 292 status=arm_cfft_init_q15(&instCfftQ15,16); 293 294 this->ifft=1; 295 this->scaling=4; 296 297 break; 298 299 case TransformCQ15::TEST_CFFT_Q15_11: 300 301 input.reload(TransformCQ15::INPUTS_CFFT_STEP_32_Q15_ID,mgr); 302 ref.reload( TransformCQ15::REF_CFFT_STEP_32_Q15_ID,mgr); 303 304 status=arm_cfft_init_q15(&instCfftQ15,32); 305 306 this->ifft=0; 307 308 break; 309 310 case TransformCQ15::TEST_CIFFT_Q15_29: 311 312 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_32_Q15_ID,mgr); 313 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_32_Q15_ID,mgr); 314 315 status=arm_cfft_init_q15(&instCfftQ15,32); 316 317 this->ifft=1; 318 this->scaling=5; 319 320 break; 321 322 case TransformCQ15::TEST_CFFT_Q15_12: 323 324 input.reload(TransformCQ15::INPUTS_CFFT_STEP_64_Q15_ID,mgr); 325 ref.reload( TransformCQ15::REF_CFFT_STEP_64_Q15_ID,mgr); 326 327 status=arm_cfft_init_q15(&instCfftQ15,64); 328 329 this->ifft=0; 330 331 break; 332 333 case TransformCQ15::TEST_CIFFT_Q15_30: 334 335 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_64_Q15_ID,mgr); 336 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_64_Q15_ID,mgr); 337 338 status=arm_cfft_init_q15(&instCfftQ15,64); 339 340 this->ifft=1; 341 this->scaling=6; 342 343 break; 344 345 case TransformCQ15::TEST_CFFT_Q15_13: 346 347 input.reload(TransformCQ15::INPUTS_CFFT_STEP_128_Q15_ID,mgr); 348 ref.reload( TransformCQ15::REF_CFFT_STEP_128_Q15_ID,mgr); 349 350 status=arm_cfft_init_q15(&instCfftQ15,128); 351 352 this->ifft=0; 353 354 break; 355 356 case TransformCQ15::TEST_CIFFT_Q15_31: 357 358 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_128_Q15_ID,mgr); 359 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_128_Q15_ID,mgr); 360 361 status=arm_cfft_init_q15(&instCfftQ15,128); 362 363 this->ifft=1; 364 this->scaling=7; 365 366 break; 367 368 case TransformCQ15::TEST_CFFT_Q15_14: 369 370 input.reload(TransformCQ15::INPUTS_CFFT_STEP_256_Q15_ID,mgr); 371 ref.reload( TransformCQ15::REF_CFFT_STEP_256_Q15_ID,mgr); 372 373 status=arm_cfft_init_q15(&instCfftQ15,256); 374 375 this->ifft=0; 376 377 break; 378 379 case TransformCQ15::TEST_CIFFT_Q15_32: 380 381 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_256_Q15_ID,mgr); 382 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_256_Q15_ID,mgr); 383 384 status=arm_cfft_init_q15(&instCfftQ15,256); 385 386 this->ifft=1; 387 this->scaling=8; 388 389 break; 390 391 case TransformCQ15::TEST_CFFT_Q15_15: 392 393 input.reload(TransformCQ15::INPUTS_CFFT_STEP_512_Q15_ID,mgr); 394 ref.reload( TransformCQ15::REF_CFFT_STEP_512_Q15_ID,mgr); 395 396 status=arm_cfft_init_q15(&instCfftQ15,512); 397 398 this->ifft=0; 399 400 break; 401 402 case TransformCQ15::TEST_CIFFT_Q15_33: 403 404 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_512_Q15_ID,mgr); 405 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_512_Q15_ID,mgr); 406 407 status=arm_cfft_init_q15(&instCfftQ15,512); 408 409 this->ifft=1; 410 this->scaling=9; 411 412 break; 413 414 case TransformCQ15::TEST_CFFT_Q15_16: 415 416 input.reload(TransformCQ15::INPUTS_CFFT_STEP_1024_Q15_ID,mgr); 417 ref.reload( TransformCQ15::REF_CFFT_STEP_1024_Q15_ID,mgr); 418 419 status=arm_cfft_init_q15(&instCfftQ15,1024); 420 421 this->ifft=0; 422 423 break; 424 425 case TransformCQ15::TEST_CIFFT_Q15_34: 426 427 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_1024_Q15_ID,mgr); 428 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_1024_Q15_ID,mgr); 429 430 status=arm_cfft_init_q15(&instCfftQ15,1024); 431 432 this->ifft=1; 433 this->scaling=10; 434 435 break; 436 437 case TransformCQ15::TEST_CFFT_Q15_17: 438 439 input.reload(TransformCQ15::INPUTS_CFFT_STEP_2048_Q15_ID,mgr); 440 ref.reload( TransformCQ15::REF_CFFT_STEP_2048_Q15_ID,mgr); 441 442 status=arm_cfft_init_q15(&instCfftQ15,2048); 443 444 this->ifft=0; 445 446 break; 447 448 case TransformCQ15::TEST_CIFFT_Q15_35: 449 450 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_2048_Q15_ID,mgr); 451 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_2048_Q15_ID,mgr); 452 453 status=arm_cfft_init_q15(&instCfftQ15,2048); 454 455 this->ifft=1; 456 this->scaling=11; 457 458 break; 459 460 case TransformCQ15::TEST_CFFT_Q15_18: 461 462 input.reload(TransformCQ15::INPUTS_CFFT_STEP_4096_Q15_ID,mgr); 463 ref.reload( TransformCQ15::REF_CFFT_STEP_4096_Q15_ID,mgr); 464 465 status=arm_cfft_init_q15(&instCfftQ15,4096); 466 467 this->ifft=0; 468 469 break; 470 471 case TransformCQ15::TEST_CIFFT_Q15_36: 472 473 input.reload(TransformCQ15::INPUTS_CIFFT_STEP_4096_Q15_ID,mgr); 474 ref.reload( TransformCQ15::INPUTS_CFFT_STEP_4096_Q15_ID,mgr); 475 476 status=arm_cfft_init_q15(&instCfftQ15,4096); 477 478 this->ifft=1; 479 this->scaling=12; 480 481 break; 482 483 } 484 485 outputfft.create(ref.nbSamples(),TransformCQ15::OUTPUT_CFFT_Q15_ID,mgr); 486 487 488 } 489 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)490 void TransformCQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 491 { 492 (void)id; 493 outputfft.dump(mgr); 494 } 495