1 #include "TransformRQ15.h" 2 #include <stdio.h> 3 #include "Error.h" 4 #include "Test.h" 5 6 7 #define SNR_THRESHOLD 40 8 9 #define RIFFT_SNR_THRESHOLD 25 10 11 test_rfft_q15()12 void TransformRQ15::test_rfft_q15() 13 { 14 q15_t *inp = input.ptr(); 15 16 q15_t *tmp = inputchanged.ptr(); 17 18 q15_t *outp = outputfft.ptr(); 19 q15_t *overoutp = overheadoutputfft.ptr(); 20 21 22 memcpy(tmp,inp,sizeof(q15_t)*input.nbSamples()); 23 24 arm_rfft_q15( 25 &this->instRfftQ15, 26 tmp, 27 overoutp); 28 29 if (this->ifft) 30 { 31 for(unsigned long i = 0;i < overheadoutputfft.nbSamples(); i++) 32 { 33 overoutp[i] = overoutp[i] << this->scaling; 34 } 35 } 36 37 38 memcpy(outp,overoutp,sizeof(q15_t)*outputfft.nbSamples()); 39 40 if (this->ifft) 41 { 42 ASSERT_SNR(outputfft,ref,(q15_t)RIFFT_SNR_THRESHOLD); 43 } 44 else 45 { 46 ASSERT_SNR(outputfft,ref,(q15_t)SNR_THRESHOLD); 47 } 48 ASSERT_EMPTY_TAIL(outputfft); 49 50 51 } 52 53 setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)54 void TransformRQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) 55 { 56 57 58 (void)paramsArgs; 59 60 switch(id) 61 { 62 63 case TransformRQ15::TEST_RFFT_Q15_1: 64 65 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_32_Q15_ID,mgr); 66 ref.reload( TransformRQ15::REF_RFFT_NOISY_32_Q15_ID,mgr); 67 68 arm_rfft_init_q15(&this->instRfftQ15 ,32,0,1); 69 70 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 71 72 this->ifft=0; 73 74 break; 75 76 case TransformRQ15::TEST_RFFT_Q15_17: 77 78 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_32_Q15_ID,mgr); 79 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_32_Q15_ID,mgr); 80 81 arm_rfft_init_q15(&this->instRfftQ15 ,32,1,1); 82 83 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 84 85 this->ifft=1; 86 this->scaling=5; 87 88 break; 89 90 case TransformRQ15::TEST_RFFT_Q15_2: 91 92 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_64_Q15_ID,mgr); 93 ref.reload( TransformRQ15::REF_RFFT_NOISY_64_Q15_ID,mgr); 94 95 arm_rfft_init_q15(&this->instRfftQ15 ,64,0,1); 96 97 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 98 99 this->ifft=0; 100 101 break; 102 103 case TransformRQ15::TEST_RFFT_Q15_18: 104 105 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_64_Q15_ID,mgr); 106 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_64_Q15_ID,mgr); 107 108 arm_rfft_init_q15(&this->instRfftQ15 ,64,1,1); 109 110 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 111 112 this->ifft=1; 113 this->scaling=6; 114 115 break; 116 117 case TransformRQ15::TEST_RFFT_Q15_3: 118 119 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_128_Q15_ID,mgr); 120 ref.reload( TransformRQ15::REF_RFFT_NOISY_128_Q15_ID,mgr); 121 122 arm_rfft_init_q15(&this->instRfftQ15 ,128,0,1); 123 124 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 125 126 this->ifft=0; 127 128 break; 129 130 case TransformRQ15::TEST_RFFT_Q15_19: 131 132 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_128_Q15_ID,mgr); 133 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_128_Q15_ID,mgr); 134 135 arm_rfft_init_q15(&this->instRfftQ15 ,128,1,1); 136 137 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 138 139 this->ifft=1; 140 this->scaling=7; 141 142 break; 143 144 case TransformRQ15::TEST_RFFT_Q15_4: 145 146 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_256_Q15_ID,mgr); 147 ref.reload( TransformRQ15::REF_RFFT_NOISY_256_Q15_ID,mgr); 148 149 arm_rfft_init_q15(&this->instRfftQ15 ,256,0,1); 150 151 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 152 153 this->ifft=0; 154 155 break; 156 157 case TransformRQ15::TEST_RFFT_Q15_20: 158 159 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_256_Q15_ID,mgr); 160 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_256_Q15_ID,mgr); 161 162 arm_rfft_init_q15(&this->instRfftQ15 ,256,1,1); 163 164 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 165 166 this->ifft=1; 167 this->scaling=8; 168 169 break; 170 171 case TransformRQ15::TEST_RFFT_Q15_5: 172 173 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_512_Q15_ID,mgr); 174 ref.reload( TransformRQ15::REF_RFFT_NOISY_512_Q15_ID,mgr); 175 176 arm_rfft_init_q15(&this->instRfftQ15 ,512,0,1); 177 178 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 179 180 this->ifft=0; 181 182 break; 183 184 case TransformRQ15::TEST_RFFT_Q15_21: 185 186 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_512_Q15_ID,mgr); 187 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_512_Q15_ID,mgr); 188 189 arm_rfft_init_q15(&this->instRfftQ15 ,512,1,1); 190 191 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 192 193 this->ifft=1; 194 this->scaling=9; 195 196 break; 197 198 case TransformRQ15::TEST_RFFT_Q15_6: 199 200 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_1024_Q15_ID,mgr); 201 ref.reload( TransformRQ15::REF_RFFT_NOISY_1024_Q15_ID,mgr); 202 203 arm_rfft_init_q15(&this->instRfftQ15 ,1024,0,1); 204 205 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 206 207 this->ifft=0; 208 209 break; 210 211 case TransformRQ15::TEST_RFFT_Q15_22: 212 213 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_1024_Q15_ID,mgr); 214 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_1024_Q15_ID,mgr); 215 216 arm_rfft_init_q15(&this->instRfftQ15 ,1024,1,1); 217 218 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 219 220 this->ifft=1; 221 this->scaling=10; 222 223 break; 224 225 case TransformRQ15::TEST_RFFT_Q15_7: 226 227 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_2048_Q15_ID,mgr); 228 ref.reload( TransformRQ15::REF_RFFT_NOISY_2048_Q15_ID,mgr); 229 230 arm_rfft_init_q15(&this->instRfftQ15 ,2048,0,1); 231 232 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 233 234 this->ifft=0; 235 236 break; 237 238 case TransformRQ15::TEST_RFFT_Q15_23: 239 240 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_2048_Q15_ID,mgr); 241 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_2048_Q15_ID,mgr); 242 243 arm_rfft_init_q15(&this->instRfftQ15 ,2048,1,1); 244 245 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 246 247 this->ifft=1; 248 this->scaling=11; 249 250 break; 251 252 case TransformRQ15::TEST_RFFT_Q15_8: 253 254 input.reload(TransformRQ15::INPUTS_RFFT_NOISY_4096_Q15_ID,mgr); 255 ref.reload( TransformRQ15::REF_RFFT_NOISY_4096_Q15_ID,mgr); 256 257 arm_rfft_init_q15(&this->instRfftQ15 ,4096,0,1); 258 259 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 260 261 this->ifft=0; 262 263 break; 264 265 case TransformRQ15::TEST_RFFT_Q15_24: 266 267 input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_4096_Q15_ID,mgr); 268 ref.reload( TransformRQ15::INPUTS_RFFT_NOISY_4096_Q15_ID,mgr); 269 270 arm_rfft_init_q15(&this->instRfftQ15 ,4096,1,1); 271 272 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 273 274 this->ifft=1; 275 this->scaling=12; 276 277 break; 278 279 /* STEP FUNCTIONS */ 280 281 case TransformRQ15::TEST_RFFT_Q15_9: 282 283 input.reload(TransformRQ15::INPUTS_RFFT_STEP_32_Q15_ID,mgr); 284 ref.reload( TransformRQ15::REF_RFFT_STEP_32_Q15_ID,mgr); 285 286 arm_rfft_init_q15(&this->instRfftQ15 ,32,0,1); 287 288 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 289 290 this->ifft=0; 291 292 break; 293 294 case TransformRQ15::TEST_RFFT_Q15_25: 295 296 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_32_Q15_ID,mgr); 297 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_32_Q15_ID,mgr); 298 299 arm_rfft_init_q15(&this->instRfftQ15 ,32,1,1); 300 301 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 302 303 this->ifft=1; 304 this->scaling=5; 305 306 break; 307 308 case TransformRQ15::TEST_RFFT_Q15_10: 309 310 input.reload(TransformRQ15::INPUTS_RFFT_STEP_64_Q15_ID,mgr); 311 ref.reload( TransformRQ15::REF_RFFT_STEP_64_Q15_ID,mgr); 312 313 arm_rfft_init_q15(&this->instRfftQ15 ,64,0,1); 314 315 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 316 317 this->ifft=0; 318 319 break; 320 321 case TransformRQ15::TEST_RFFT_Q15_26: 322 323 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_64_Q15_ID,mgr); 324 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_64_Q15_ID,mgr); 325 326 arm_rfft_init_q15(&this->instRfftQ15 ,64,1,1); 327 328 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 329 330 this->ifft=1; 331 this->scaling=6; 332 333 break; 334 335 case TransformRQ15::TEST_RFFT_Q15_11: 336 337 input.reload(TransformRQ15::INPUTS_RFFT_STEP_128_Q15_ID,mgr); 338 ref.reload( TransformRQ15::REF_RFFT_STEP_128_Q15_ID,mgr); 339 340 arm_rfft_init_q15(&this->instRfftQ15 ,128,0,1); 341 342 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 343 this->ifft=0; 344 345 break; 346 347 case TransformRQ15::TEST_RFFT_Q15_27: 348 349 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_128_Q15_ID,mgr); 350 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_128_Q15_ID,mgr); 351 352 arm_rfft_init_q15(&this->instRfftQ15 ,128,1,1); 353 354 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 355 356 this->ifft=1; 357 this->scaling=7; 358 359 break; 360 361 case TransformRQ15::TEST_RFFT_Q15_12: 362 363 input.reload(TransformRQ15::INPUTS_RFFT_STEP_256_Q15_ID,mgr); 364 ref.reload( TransformRQ15::REF_RFFT_STEP_256_Q15_ID,mgr); 365 366 arm_rfft_init_q15(&this->instRfftQ15 ,256,0,1); 367 368 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 369 370 this->ifft=0; 371 372 break; 373 374 case TransformRQ15::TEST_RFFT_Q15_28: 375 376 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_256_Q15_ID,mgr); 377 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_256_Q15_ID,mgr); 378 379 arm_rfft_init_q15(&this->instRfftQ15 ,256,1,1); 380 381 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 382 383 this->ifft=1; 384 this->scaling=8; 385 386 break; 387 388 case TransformRQ15::TEST_RFFT_Q15_13: 389 390 input.reload(TransformRQ15::INPUTS_RFFT_STEP_512_Q15_ID,mgr); 391 ref.reload( TransformRQ15::REF_RFFT_STEP_512_Q15_ID,mgr); 392 393 arm_rfft_init_q15(&this->instRfftQ15 ,512,0,1); 394 395 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 396 397 this->ifft=0; 398 399 break; 400 401 case TransformRQ15::TEST_RFFT_Q15_29: 402 403 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_512_Q15_ID,mgr); 404 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_512_Q15_ID,mgr); 405 406 arm_rfft_init_q15(&this->instRfftQ15 ,512,1,1); 407 408 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 409 410 this->ifft=1; 411 this->scaling=9; 412 413 break; 414 415 case TransformRQ15::TEST_RFFT_Q15_14: 416 417 input.reload(TransformRQ15::INPUTS_RFFT_STEP_1024_Q15_ID,mgr); 418 ref.reload( TransformRQ15::REF_RFFT_STEP_1024_Q15_ID,mgr); 419 420 arm_rfft_init_q15(&this->instRfftQ15 ,1024,0,1); 421 422 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 423 424 this->ifft=0; 425 426 break; 427 428 case TransformRQ15::TEST_RFFT_Q15_30: 429 430 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_1024_Q15_ID,mgr); 431 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_1024_Q15_ID,mgr); 432 433 arm_rfft_init_q15(&this->instRfftQ15 ,1024,1,1); 434 435 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 436 437 this->ifft=1; 438 this->scaling=10; 439 440 break; 441 442 case TransformRQ15::TEST_RFFT_Q15_15: 443 444 input.reload(TransformRQ15::INPUTS_RFFT_STEP_2048_Q15_ID,mgr); 445 ref.reload( TransformRQ15::REF_RFFT_STEP_2048_Q15_ID,mgr); 446 447 arm_rfft_init_q15(&this->instRfftQ15 ,2048,0,1); 448 449 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 450 451 this->ifft=0; 452 453 break; 454 455 case TransformRQ15::TEST_RFFT_Q15_31: 456 457 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_2048_Q15_ID,mgr); 458 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_2048_Q15_ID,mgr); 459 460 arm_rfft_init_q15(&this->instRfftQ15 ,2048,1,1); 461 462 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 463 464 this->ifft=1; 465 this->scaling=11; 466 467 break; 468 469 case TransformRQ15::TEST_RFFT_Q15_16: 470 471 input.reload(TransformRQ15::INPUTS_RFFT_STEP_4096_Q15_ID,mgr); 472 ref.reload( TransformRQ15::REF_RFFT_STEP_4096_Q15_ID,mgr); 473 474 arm_rfft_init_q15(&this->instRfftQ15 ,4096,0,1); 475 476 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 477 478 this->ifft=0; 479 480 break; 481 482 case TransformRQ15::TEST_RFFT_Q15_32: 483 484 input.reload(TransformRQ15::INPUTS_RIFFT_STEP_4096_Q15_ID,mgr); 485 ref.reload( TransformRQ15::INPUTS_RFFT_STEP_4096_Q15_ID,mgr); 486 487 arm_rfft_init_q15(&this->instRfftQ15 ,4096,1,1); 488 489 inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr); 490 491 this->ifft=1; 492 this->scaling=12; 493 494 break; 495 496 497 498 } 499 500 501 outputfft.create(ref.nbSamples(),TransformRQ15::OUTPUT_RFFT_Q15_ID,mgr); 502 /* 503 504 RFFT is writing more samples than it should. 505 This is a temporary buffer allowing the test to pass. 506 507 */ 508 overheadoutputfft.create(2*ref.nbSamples(),TransformRQ15::FULLOUTPUT_Q15_ID,mgr); 509 510 } 511 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)512 void TransformRQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 513 { 514 (void)id; 515 outputfft.dump(mgr); 516 overheadoutputfft.dump(mgr); 517 } 518