1 #include "TransformRQ31.h" 2 #include <stdio.h> 3 #include "Error.h" 4 #include "Test.h" 5 6 7 #define SNR_THRESHOLD 90 8 9 10 test_rfft_q31()11 void TransformRQ31::test_rfft_q31() 12 { 13 q31_t *inp = input.ptr(); 14 15 q31_t *tmp = inputchanged.ptr(); 16 17 q31_t *outp = outputfft.ptr(); 18 q31_t *overoutp = overheadoutputfft.ptr(); 19 20 21 memcpy(tmp,inp,sizeof(q31_t)*input.nbSamples()); 22 23 arm_rfft_q31( 24 &this->instRfftQ31, 25 tmp, 26 overoutp); 27 28 if (this->ifft) 29 { 30 for(unsigned long i = 0;i < overheadoutputfft.nbSamples(); i++) 31 { 32 overoutp[i] = overoutp[i] << this->scaling; 33 } 34 } 35 36 37 memcpy(outp,overoutp,sizeof(q31_t)*outputfft.nbSamples()); 38 39 ASSERT_SNR(outputfft,ref,(q31_t)SNR_THRESHOLD); 40 ASSERT_EMPTY_TAIL(outputfft); 41 42 43 } 44 45 setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)46 void TransformRQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) 47 { 48 49 50 (void)paramsArgs; 51 52 switch(id) 53 { 54 55 case TransformRQ31::TEST_RFFT_Q31_1: 56 57 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_32_Q31_ID,mgr); 58 ref.reload( TransformRQ31::REF_RFFT_NOISY_32_Q31_ID,mgr); 59 60 arm_rfft_init_q31(&this->instRfftQ31 ,32,0,1); 61 62 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 63 64 this->ifft=0; 65 66 break; 67 68 case TransformRQ31::TEST_RFFT_Q31_17: 69 70 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_32_Q31_ID,mgr); 71 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_32_Q31_ID,mgr); 72 73 arm_rfft_init_q31(&this->instRfftQ31 ,32,1,1); 74 75 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 76 77 this->ifft=1; 78 this->scaling=5; 79 80 break; 81 82 case TransformRQ31::TEST_RFFT_Q31_2: 83 84 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_64_Q31_ID,mgr); 85 ref.reload( TransformRQ31::REF_RFFT_NOISY_64_Q31_ID,mgr); 86 87 arm_rfft_init_q31(&this->instRfftQ31 ,64,0,1); 88 89 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 90 91 this->ifft=0; 92 93 break; 94 95 case TransformRQ31::TEST_RFFT_Q31_18: 96 97 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_64_Q31_ID,mgr); 98 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_64_Q31_ID,mgr); 99 100 arm_rfft_init_q31(&this->instRfftQ31 ,64,1,1); 101 102 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 103 104 this->ifft=1; 105 this->scaling=6; 106 107 break; 108 109 case TransformRQ31::TEST_RFFT_Q31_3: 110 111 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_128_Q31_ID,mgr); 112 ref.reload( TransformRQ31::REF_RFFT_NOISY_128_Q31_ID,mgr); 113 114 arm_rfft_init_q31(&this->instRfftQ31 ,128,0,1); 115 116 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 117 118 this->ifft=0; 119 120 break; 121 122 case TransformRQ31::TEST_RFFT_Q31_19: 123 124 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_128_Q31_ID,mgr); 125 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_128_Q31_ID,mgr); 126 127 arm_rfft_init_q31(&this->instRfftQ31 ,128,1,1); 128 129 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 130 131 this->ifft=1; 132 this->scaling=7; 133 134 break; 135 136 case TransformRQ31::TEST_RFFT_Q31_4: 137 138 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_256_Q31_ID,mgr); 139 ref.reload( TransformRQ31::REF_RFFT_NOISY_256_Q31_ID,mgr); 140 141 arm_rfft_init_q31(&this->instRfftQ31 ,256,0,1); 142 143 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 144 145 this->ifft=0; 146 147 break; 148 149 case TransformRQ31::TEST_RFFT_Q31_20: 150 151 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_256_Q31_ID,mgr); 152 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_256_Q31_ID,mgr); 153 154 arm_rfft_init_q31(&this->instRfftQ31 ,256,1,1); 155 156 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 157 158 this->ifft=1; 159 this->scaling=8; 160 161 break; 162 163 case TransformRQ31::TEST_RFFT_Q31_5: 164 165 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_512_Q31_ID,mgr); 166 ref.reload( TransformRQ31::REF_RFFT_NOISY_512_Q31_ID,mgr); 167 168 arm_rfft_init_q31(&this->instRfftQ31 ,512,0,1); 169 170 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 171 172 this->ifft=0; 173 174 break; 175 176 case TransformRQ31::TEST_RFFT_Q31_21: 177 178 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_512_Q31_ID,mgr); 179 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_512_Q31_ID,mgr); 180 181 arm_rfft_init_q31(&this->instRfftQ31 ,512,1,1); 182 183 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 184 185 this->ifft=1; 186 this->scaling=9; 187 188 break; 189 190 case TransformRQ31::TEST_RFFT_Q31_6: 191 192 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_1024_Q31_ID,mgr); 193 ref.reload( TransformRQ31::REF_RFFT_NOISY_1024_Q31_ID,mgr); 194 195 arm_rfft_init_q31(&this->instRfftQ31 ,1024,0,1); 196 197 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 198 199 this->ifft=0; 200 201 break; 202 203 case TransformRQ31::TEST_RFFT_Q31_22: 204 205 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_1024_Q31_ID,mgr); 206 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_1024_Q31_ID,mgr); 207 208 arm_rfft_init_q31(&this->instRfftQ31 ,1024,1,1); 209 210 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 211 212 this->ifft=1; 213 this->scaling=10; 214 215 break; 216 217 case TransformRQ31::TEST_RFFT_Q31_7: 218 219 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_2048_Q31_ID,mgr); 220 ref.reload( TransformRQ31::REF_RFFT_NOISY_2048_Q31_ID,mgr); 221 222 arm_rfft_init_q31(&this->instRfftQ31 ,2048,0,1); 223 224 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 225 226 this->ifft=0; 227 228 break; 229 230 case TransformRQ31::TEST_RFFT_Q31_23: 231 232 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_2048_Q31_ID,mgr); 233 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_2048_Q31_ID,mgr); 234 235 arm_rfft_init_q31(&this->instRfftQ31 ,2048,1,1); 236 237 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 238 239 this->ifft=1; 240 this->scaling=11; 241 242 break; 243 244 case TransformRQ31::TEST_RFFT_Q31_8: 245 246 input.reload(TransformRQ31::INPUTS_RFFT_NOISY_4096_Q31_ID,mgr); 247 ref.reload( TransformRQ31::REF_RFFT_NOISY_4096_Q31_ID,mgr); 248 249 arm_rfft_init_q31(&this->instRfftQ31 ,4096,0,1); 250 251 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 252 253 this->ifft=0; 254 255 break; 256 257 case TransformRQ31::TEST_RFFT_Q31_24: 258 259 input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_4096_Q31_ID,mgr); 260 ref.reload( TransformRQ31::INPUTS_RFFT_NOISY_4096_Q31_ID,mgr); 261 262 arm_rfft_init_q31(&this->instRfftQ31 ,4096,1,1); 263 264 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 265 266 this->ifft=1; 267 this->scaling=12; 268 269 break; 270 271 /* STEP FUNCTIONS */ 272 273 case TransformRQ31::TEST_RFFT_Q31_9: 274 275 input.reload(TransformRQ31::INPUTS_RFFT_STEP_32_Q31_ID,mgr); 276 ref.reload( TransformRQ31::REF_RFFT_STEP_32_Q31_ID,mgr); 277 278 arm_rfft_init_q31(&this->instRfftQ31 ,32,0,1); 279 280 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 281 282 this->ifft=0; 283 284 break; 285 286 case TransformRQ31::TEST_RFFT_Q31_25: 287 288 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_32_Q31_ID,mgr); 289 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_32_Q31_ID,mgr); 290 291 arm_rfft_init_q31(&this->instRfftQ31 ,32,1,1); 292 293 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 294 295 this->ifft=1; 296 this->scaling=5; 297 298 break; 299 300 case TransformRQ31::TEST_RFFT_Q31_10: 301 302 input.reload(TransformRQ31::INPUTS_RFFT_STEP_64_Q31_ID,mgr); 303 ref.reload( TransformRQ31::REF_RFFT_STEP_64_Q31_ID,mgr); 304 305 arm_rfft_init_q31(&this->instRfftQ31 ,64,0,1); 306 307 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 308 309 this->ifft=0; 310 311 break; 312 313 case TransformRQ31::TEST_RFFT_Q31_26: 314 315 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_64_Q31_ID,mgr); 316 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_64_Q31_ID,mgr); 317 318 arm_rfft_init_q31(&this->instRfftQ31 ,64,1,1); 319 320 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 321 322 this->ifft=1; 323 this->scaling=6; 324 325 break; 326 327 case TransformRQ31::TEST_RFFT_Q31_11: 328 329 input.reload(TransformRQ31::INPUTS_RFFT_STEP_128_Q31_ID,mgr); 330 ref.reload( TransformRQ31::REF_RFFT_STEP_128_Q31_ID,mgr); 331 332 arm_rfft_init_q31(&this->instRfftQ31 ,128,0,1); 333 334 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 335 this->ifft=0; 336 337 break; 338 339 case TransformRQ31::TEST_RFFT_Q31_27: 340 341 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_128_Q31_ID,mgr); 342 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_128_Q31_ID,mgr); 343 344 arm_rfft_init_q31(&this->instRfftQ31 ,128,1,1); 345 346 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 347 348 this->ifft=1; 349 this->scaling=7; 350 351 break; 352 353 case TransformRQ31::TEST_RFFT_Q31_12: 354 355 input.reload(TransformRQ31::INPUTS_RFFT_STEP_256_Q31_ID,mgr); 356 ref.reload( TransformRQ31::REF_RFFT_STEP_256_Q31_ID,mgr); 357 358 arm_rfft_init_q31(&this->instRfftQ31 ,256,0,1); 359 360 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 361 362 this->ifft=0; 363 364 break; 365 366 case TransformRQ31::TEST_RFFT_Q31_28: 367 368 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_256_Q31_ID,mgr); 369 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_256_Q31_ID,mgr); 370 371 arm_rfft_init_q31(&this->instRfftQ31 ,256,1,1); 372 373 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 374 375 this->ifft=1; 376 this->scaling=8; 377 378 break; 379 380 case TransformRQ31::TEST_RFFT_Q31_13: 381 382 input.reload(TransformRQ31::INPUTS_RFFT_STEP_512_Q31_ID,mgr); 383 ref.reload( TransformRQ31::REF_RFFT_STEP_512_Q31_ID,mgr); 384 385 arm_rfft_init_q31(&this->instRfftQ31 ,512,0,1); 386 387 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 388 389 this->ifft=0; 390 391 break; 392 393 case TransformRQ31::TEST_RFFT_Q31_29: 394 395 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_512_Q31_ID,mgr); 396 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_512_Q31_ID,mgr); 397 398 arm_rfft_init_q31(&this->instRfftQ31 ,512,1,1); 399 400 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 401 402 this->ifft=1; 403 this->scaling=9; 404 405 break; 406 407 case TransformRQ31::TEST_RFFT_Q31_14: 408 409 input.reload(TransformRQ31::INPUTS_RFFT_STEP_1024_Q31_ID,mgr); 410 ref.reload( TransformRQ31::REF_RFFT_STEP_1024_Q31_ID,mgr); 411 412 arm_rfft_init_q31(&this->instRfftQ31 ,1024,0,1); 413 414 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 415 416 this->ifft=0; 417 418 break; 419 420 case TransformRQ31::TEST_RFFT_Q31_30: 421 422 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_1024_Q31_ID,mgr); 423 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_1024_Q31_ID,mgr); 424 425 arm_rfft_init_q31(&this->instRfftQ31 ,1024,1,1); 426 427 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 428 429 this->ifft=1; 430 this->scaling=10; 431 432 break; 433 434 case TransformRQ31::TEST_RFFT_Q31_15: 435 436 input.reload(TransformRQ31::INPUTS_RFFT_STEP_2048_Q31_ID,mgr); 437 ref.reload( TransformRQ31::REF_RFFT_STEP_2048_Q31_ID,mgr); 438 439 arm_rfft_init_q31(&this->instRfftQ31 ,2048,0,1); 440 441 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 442 443 this->ifft=0; 444 445 break; 446 447 case TransformRQ31::TEST_RFFT_Q31_31: 448 449 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_2048_Q31_ID,mgr); 450 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_2048_Q31_ID,mgr); 451 452 arm_rfft_init_q31(&this->instRfftQ31 ,2048,1,1); 453 454 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 455 456 this->ifft=1; 457 this->scaling=11; 458 459 break; 460 461 case TransformRQ31::TEST_RFFT_Q31_16: 462 463 input.reload(TransformRQ31::INPUTS_RFFT_STEP_4096_Q31_ID,mgr); 464 ref.reload( TransformRQ31::REF_RFFT_STEP_4096_Q31_ID,mgr); 465 466 arm_rfft_init_q31(&this->instRfftQ31 ,4096,0,1); 467 468 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 469 470 this->ifft=0; 471 472 break; 473 474 case TransformRQ31::TEST_RFFT_Q31_32: 475 476 input.reload(TransformRQ31::INPUTS_RIFFT_STEP_4096_Q31_ID,mgr); 477 ref.reload( TransformRQ31::INPUTS_RFFT_STEP_4096_Q31_ID,mgr); 478 479 arm_rfft_init_q31(&this->instRfftQ31 ,4096,1,1); 480 481 inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr); 482 483 this->ifft=1; 484 this->scaling=12; 485 486 break; 487 488 489 490 } 491 492 493 outputfft.create(ref.nbSamples(),TransformRQ31::OUTPUT_RFFT_Q31_ID,mgr); 494 /* 495 496 RFFT is writing more samples than it should. 497 This is a temporary buffer allowing the test to pass. 498 499 */ 500 overheadoutputfft.create(2*ref.nbSamples(),TransformRQ31::FULLOUTPUT_Q31_ID,mgr); 501 502 } 503 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)504 void TransformRQ31::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 505 { 506 (void)id; 507 outputfft.dump(mgr); 508 overheadoutputfft.dump(mgr); 509 } 510