1 #include "TransformCQ31.h" 2 #include <stdio.h> 3 #include "Error.h" 4 #include "Test.h" 5 6 #define SNR_THRESHOLD 90 7 test_cfft_q31()8 void TransformCQ31::test_cfft_q31() 9 { 10 const q31_t *inp = input.ptr(); 11 12 q31_t *outfftp = outputfft.ptr(); 13 14 memcpy(outfftp,inp,sizeof(q31_t)*input.nbSamples()); 15 16 ASSERT_TRUE(status == ARM_MATH_SUCCESS); 17 18 arm_cfft_q31( 19 &(this->instCfftQ31), 20 outfftp, 21 this->ifft, 22 1); 23 24 ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD); 25 ASSERT_NEAR_EQ(outputfft,ref,(q31_t)32); 26 ASSERT_EMPTY_TAIL(outputfft); 27 28 29 } 30 test_cifft_q31()31 void TransformCQ31::test_cifft_q31() 32 { 33 const q31_t *inp = input.ptr(); 34 35 q31_t *outfftp = outputfft.ptr(); 36 q31_t *refp = ref.ptr(); 37 38 memcpy(outfftp,inp,sizeof(q31_t)*input.nbSamples()); 39 40 ASSERT_TRUE(status == ARM_MATH_SUCCESS); 41 42 arm_cfft_q31( 43 &(this->instCfftQ31), 44 outfftp, 45 this->ifft, 46 1); 47 48 for(unsigned long i=0; i < outputfft.nbSamples();i++) 49 { 50 refp[i] >>= this->scaling; 51 } 52 53 ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD); 54 ASSERT_EMPTY_TAIL(outputfft); 55 56 57 58 } 59 60 setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)61 void TransformCQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) 62 { 63 64 65 (void)paramsArgs; 66 67 switch(id) 68 { 69 case TransformCQ31::TEST_CFFT_Q31_1: 70 71 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_16_Q31_ID,mgr); 72 ref.reload( TransformCQ31::REF_CFFT_NOISY_16_Q31_ID,mgr); 73 74 status=arm_cfft_init_q31(&instCfftQ31,16); 75 76 this->ifft=0; 77 78 break; 79 80 case TransformCQ31::TEST_CIFFT_Q31_19: 81 82 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_16_Q31_ID,mgr); 83 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_16_Q31_ID,mgr); 84 85 status=arm_cfft_init_q31(&instCfftQ31,16); 86 87 this->ifft=1; 88 this->scaling = 4; 89 90 break; 91 92 case TransformCQ31::TEST_CFFT_Q31_2: 93 94 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_32_Q31_ID,mgr); 95 ref.reload( TransformCQ31::REF_CFFT_NOISY_32_Q31_ID,mgr); 96 97 status=arm_cfft_init_q31(&instCfftQ31,32); 98 99 this->ifft=0; 100 101 break; 102 103 case TransformCQ31::TEST_CIFFT_Q31_20: 104 105 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_32_Q31_ID,mgr); 106 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_32_Q31_ID,mgr); 107 108 status=arm_cfft_init_q31(&instCfftQ31,32); 109 110 this->ifft=1; 111 this->scaling = 5; 112 113 break; 114 115 case TransformCQ31::TEST_CFFT_Q31_3: 116 117 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_64_Q31_ID,mgr); 118 ref.reload( TransformCQ31::REF_CFFT_NOISY_64_Q31_ID,mgr); 119 120 status=arm_cfft_init_q31(&instCfftQ31,64); 121 122 this->ifft=0; 123 124 125 break; 126 127 case TransformCQ31::TEST_CIFFT_Q31_21: 128 129 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_64_Q31_ID,mgr); 130 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_64_Q31_ID,mgr); 131 132 status=arm_cfft_init_q31(&instCfftQ31,64); 133 134 this->ifft=1; 135 this->scaling=6; 136 137 break; 138 139 case TransformCQ31::TEST_CFFT_Q31_4: 140 141 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_128_Q31_ID,mgr); 142 ref.reload( TransformCQ31::REF_CFFT_NOISY_128_Q31_ID,mgr); 143 144 status=arm_cfft_init_q31(&instCfftQ31,128); 145 146 this->ifft=0; 147 148 break; 149 150 case TransformCQ31::TEST_CIFFT_Q31_22: 151 152 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_128_Q31_ID,mgr); 153 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_128_Q31_ID,mgr); 154 155 status=arm_cfft_init_q31(&instCfftQ31,128); 156 157 this->ifft=1; 158 this->scaling=7; 159 160 break; 161 162 case TransformCQ31::TEST_CFFT_Q31_5: 163 164 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_256_Q31_ID,mgr); 165 ref.reload( TransformCQ31::REF_CFFT_NOISY_256_Q31_ID,mgr); 166 167 status=arm_cfft_init_q31(&instCfftQ31,256); 168 169 this->ifft=0; 170 171 break; 172 173 case TransformCQ31::TEST_CIFFT_Q31_23: 174 175 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_256_Q31_ID,mgr); 176 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_256_Q31_ID,mgr); 177 178 status=arm_cfft_init_q31(&instCfftQ31,256); 179 180 this->ifft=1; 181 this->scaling=8; 182 183 break; 184 185 case TransformCQ31::TEST_CFFT_Q31_6: 186 187 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_512_Q31_ID,mgr); 188 ref.reload( TransformCQ31::REF_CFFT_NOISY_512_Q31_ID,mgr); 189 190 status=arm_cfft_init_q31(&instCfftQ31,512); 191 192 this->ifft=0; 193 194 195 break; 196 197 case TransformCQ31::TEST_CIFFT_Q31_24: 198 199 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_512_Q31_ID,mgr); 200 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_512_Q31_ID,mgr); 201 202 status=arm_cfft_init_q31(&instCfftQ31,512); 203 204 this->ifft=1; 205 this->scaling=9; 206 207 208 break; 209 210 case TransformCQ31::TEST_CFFT_Q31_7: 211 212 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_1024_Q31_ID,mgr); 213 ref.reload( TransformCQ31::REF_CFFT_NOISY_1024_Q31_ID,mgr); 214 215 status=arm_cfft_init_q31(&instCfftQ31,1024); 216 217 this->ifft=0; 218 219 break; 220 221 case TransformCQ31::TEST_CIFFT_Q31_25: 222 223 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_1024_Q31_ID,mgr); 224 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_1024_Q31_ID,mgr); 225 226 status=arm_cfft_init_q31(&instCfftQ31,1024); 227 228 this->ifft=1; 229 this->scaling=10; 230 231 break; 232 233 case TransformCQ31::TEST_CFFT_Q31_8: 234 235 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_2048_Q31_ID,mgr); 236 ref.reload( TransformCQ31::REF_CFFT_NOISY_2048_Q31_ID,mgr); 237 238 status=arm_cfft_init_q31(&instCfftQ31,2048); 239 240 this->ifft=0; 241 242 break; 243 244 case TransformCQ31::TEST_CIFFT_Q31_26: 245 246 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_2048_Q31_ID,mgr); 247 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_2048_Q31_ID,mgr); 248 249 status=arm_cfft_init_q31(&instCfftQ31,2048); 250 251 this->ifft=1; 252 this->scaling=11; 253 254 break; 255 256 case TransformCQ31::TEST_CFFT_Q31_9: 257 258 input.reload(TransformCQ31::INPUTS_CFFT_NOISY_4096_Q31_ID,mgr); 259 ref.reload( TransformCQ31::REF_CFFT_NOISY_4096_Q31_ID,mgr); 260 261 status=arm_cfft_init_q31(&instCfftQ31,4096); 262 263 this->ifft=0; 264 265 break; 266 267 case TransformCQ31::TEST_CIFFT_Q31_27: 268 269 input.reload(TransformCQ31::INPUTS_CIFFT_NOISY_4096_Q31_ID,mgr); 270 ref.reload( TransformCQ31::INPUTS_CFFT_NOISY_4096_Q31_ID,mgr); 271 272 status=arm_cfft_init_q31(&instCfftQ31,4096); 273 274 this->ifft=1; 275 this->scaling=12; 276 277 break; 278 279 /* STEP FUNCTIONS */ 280 281 case TransformCQ31::TEST_CFFT_Q31_10: 282 283 input.reload(TransformCQ31::INPUTS_CFFT_STEP_16_Q31_ID,mgr); 284 ref.reload( TransformCQ31::REF_CFFT_STEP_16_Q31_ID,mgr); 285 286 status=arm_cfft_init_q31(&instCfftQ31,16); 287 288 this->ifft=0; 289 290 break; 291 292 case TransformCQ31::TEST_CIFFT_Q31_28: 293 294 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_16_Q31_ID,mgr); 295 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_16_Q31_ID,mgr); 296 297 status=arm_cfft_init_q31(&instCfftQ31,16); 298 299 this->ifft=1; 300 this->scaling=4; 301 302 break; 303 304 case TransformCQ31::TEST_CFFT_Q31_11: 305 306 input.reload(TransformCQ31::INPUTS_CFFT_STEP_32_Q31_ID,mgr); 307 ref.reload( TransformCQ31::REF_CFFT_STEP_32_Q31_ID,mgr); 308 309 status=arm_cfft_init_q31(&instCfftQ31,32); 310 311 this->ifft=0; 312 313 break; 314 315 case TransformCQ31::TEST_CIFFT_Q31_29: 316 317 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_32_Q31_ID,mgr); 318 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_32_Q31_ID,mgr); 319 320 status=arm_cfft_init_q31(&instCfftQ31,32); 321 322 this->ifft=1; 323 this->scaling=5; 324 325 break; 326 327 case TransformCQ31::TEST_CFFT_Q31_12: 328 329 input.reload(TransformCQ31::INPUTS_CFFT_STEP_64_Q31_ID,mgr); 330 ref.reload( TransformCQ31::REF_CFFT_STEP_64_Q31_ID,mgr); 331 332 status=arm_cfft_init_q31(&instCfftQ31,64); 333 334 this->ifft=0; 335 336 break; 337 338 case TransformCQ31::TEST_CIFFT_Q31_30: 339 340 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_64_Q31_ID,mgr); 341 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_64_Q31_ID,mgr); 342 343 status=arm_cfft_init_q31(&instCfftQ31,64); 344 345 this->ifft=1; 346 this->scaling=6; 347 348 break; 349 350 case TransformCQ31::TEST_CFFT_Q31_13: 351 352 input.reload(TransformCQ31::INPUTS_CFFT_STEP_128_Q31_ID,mgr); 353 ref.reload( TransformCQ31::REF_CFFT_STEP_128_Q31_ID,mgr); 354 355 status=arm_cfft_init_q31(&instCfftQ31,128); 356 357 this->ifft=0; 358 359 break; 360 361 case TransformCQ31::TEST_CIFFT_Q31_31: 362 363 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_128_Q31_ID,mgr); 364 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_128_Q31_ID,mgr); 365 366 status=arm_cfft_init_q31(&instCfftQ31,128); 367 368 this->ifft=1; 369 this->scaling=7; 370 371 break; 372 373 case TransformCQ31::TEST_CFFT_Q31_14: 374 375 input.reload(TransformCQ31::INPUTS_CFFT_STEP_256_Q31_ID,mgr); 376 ref.reload( TransformCQ31::REF_CFFT_STEP_256_Q31_ID,mgr); 377 378 status=arm_cfft_init_q31(&instCfftQ31,256); 379 380 this->ifft=0; 381 382 break; 383 384 case TransformCQ31::TEST_CIFFT_Q31_32: 385 386 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_256_Q31_ID,mgr); 387 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_256_Q31_ID,mgr); 388 389 status=arm_cfft_init_q31(&instCfftQ31,256); 390 391 this->ifft=1; 392 this->scaling=8; 393 394 break; 395 396 case TransformCQ31::TEST_CFFT_Q31_15: 397 398 input.reload(TransformCQ31::INPUTS_CFFT_STEP_512_Q31_ID,mgr); 399 ref.reload( TransformCQ31::REF_CFFT_STEP_512_Q31_ID,mgr); 400 401 status=arm_cfft_init_q31(&instCfftQ31,512); 402 403 this->ifft=0; 404 405 break; 406 407 case TransformCQ31::TEST_CIFFT_Q31_33: 408 409 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_512_Q31_ID,mgr); 410 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_512_Q31_ID,mgr); 411 412 status=arm_cfft_init_q31(&instCfftQ31,512); 413 414 this->ifft=1; 415 this->scaling=9; 416 417 break; 418 419 case TransformCQ31::TEST_CFFT_Q31_16: 420 421 input.reload(TransformCQ31::INPUTS_CFFT_STEP_1024_Q31_ID,mgr); 422 ref.reload( TransformCQ31::REF_CFFT_STEP_1024_Q31_ID,mgr); 423 424 status=arm_cfft_init_q31(&instCfftQ31,1024); 425 426 this->ifft=0; 427 428 break; 429 430 case TransformCQ31::TEST_CIFFT_Q31_34: 431 432 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_1024_Q31_ID,mgr); 433 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_1024_Q31_ID,mgr); 434 435 status=arm_cfft_init_q31(&instCfftQ31,1024); 436 437 this->ifft=1; 438 this->scaling=10; 439 440 break; 441 442 case TransformCQ31::TEST_CFFT_Q31_17: 443 444 input.reload(TransformCQ31::INPUTS_CFFT_STEP_2048_Q31_ID,mgr); 445 ref.reload( TransformCQ31::REF_CFFT_STEP_2048_Q31_ID,mgr); 446 447 status=arm_cfft_init_q31(&instCfftQ31,2048); 448 449 this->ifft=0; 450 451 break; 452 453 case TransformCQ31::TEST_CIFFT_Q31_35: 454 455 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_2048_Q31_ID,mgr); 456 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_2048_Q31_ID,mgr); 457 458 status=arm_cfft_init_q31(&instCfftQ31,2048); 459 460 this->ifft=1; 461 this->scaling=11; 462 463 break; 464 465 case TransformCQ31::TEST_CFFT_Q31_18: 466 467 input.reload(TransformCQ31::INPUTS_CFFT_STEP_4096_Q31_ID,mgr); 468 ref.reload( TransformCQ31::REF_CFFT_STEP_4096_Q31_ID,mgr); 469 470 status=arm_cfft_init_q31(&instCfftQ31,4096); 471 472 this->ifft=0; 473 474 break; 475 476 case TransformCQ31::TEST_CIFFT_Q31_36: 477 478 input.reload(TransformCQ31::INPUTS_CIFFT_STEP_4096_Q31_ID,mgr); 479 ref.reload( TransformCQ31::INPUTS_CFFT_STEP_4096_Q31_ID,mgr); 480 481 status=arm_cfft_init_q31(&instCfftQ31,4096); 482 483 this->ifft=1; 484 this->scaling=12; 485 486 break; 487 488 } 489 490 outputfft.create(ref.nbSamples(),TransformCQ31::OUTPUT_CFFT_Q31_ID,mgr); 491 492 493 } 494 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)495 void TransformCQ31::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 496 { 497 (void)id; 498 outputfft.dump(mgr); 499 } 500