1 #include "MISCF16.h" 2 #include <stdio.h> 3 #include "Error.h" 4 #include "Test.h" 5 6 #define SNR_THRESHOLD 60 7 /* 8 9 Reference patterns are generated with 10 a double precision computation. 11 12 */ 13 #define REL_ERROR (1.0e-4) 14 #define ABS_ERROR (1.0e-3) 15 16 /* 17 18 For tests of the error value of the Levinson Durbin algorithm 19 20 */ 21 #define SNR_LD_THRESHOLD 52 22 #define REL_LD_ERROR (1.0e-3) 23 #define ABS_LD_ERROR (1.0e-3) 24 test_levinson_durbin_f16()25 void MISCF16::test_levinson_durbin_f16() 26 { 27 const float16_t *inpA=inputA.ptr(); 28 const float16_t *errs=inputB.ptr(); 29 float16_t *outp=output.ptr(); 30 float16_t err; 31 32 float16_t refError=errs[this->errOffset]; 33 34 arm_levinson_durbin_f16(inpA,outp,&err,this->nba); 35 36 ASSERT_EMPTY_TAIL(output); 37 ASSERT_SNR(ref,output,(float16_t)SNR_LD_THRESHOLD); 38 ASSERT_CLOSE_ERROR(ref,output,ABS_LD_ERROR,REL_LD_ERROR); 39 40 41 ASSERT_CLOSE_ERROR(refError,err,ABS_LD_ERROR,REL_LD_ERROR); 42 43 } 44 test_correlate_f16()45 void MISCF16::test_correlate_f16() 46 { 47 const float16_t *inpA=inputA.ptr(); 48 const float16_t *inpB=inputB.ptr(); 49 float16_t *outp=output.ptr(); 50 51 arm_correlate_f16(inpA, inputA.nbSamples(), 52 inpB, inputB.nbSamples(), 53 outp); 54 55 ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD); 56 ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR); 57 58 } 59 60 /* 61 void MISCF16::test_conv_f16() 62 { 63 const float16_t *inpA=inputA.ptr(); 64 const float16_t *inpB=inputB.ptr(); 65 float16_t *outp=output.ptr(); 66 67 arm_conv_f16(inpA, inputA.nbSamples(), 68 inpB, inputB.nbSamples(), 69 outp); 70 71 ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD); 72 ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR); 73 74 } 75 */ 76 77 78 79 setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)80 void MISCF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) 81 { 82 (void)paramsArgs; 83 switch(id) 84 { 85 86 case MISCF16::TEST_CORRELATE_F16_1: 87 { 88 this->nba = 4; 89 this->nbb = 1; 90 ref.reload(MISCF16::REF1_F16_ID,mgr); 91 } 92 break; 93 94 case MISCF16::TEST_CORRELATE_F16_2: 95 { 96 this->nba = 4; 97 this->nbb = 2; 98 ref.reload(MISCF16::REF2_F16_ID,mgr); 99 } 100 break; 101 102 case MISCF16::TEST_CORRELATE_F16_3: 103 { 104 this->nba = 4; 105 this->nbb = 3; 106 ref.reload(MISCF16::REF3_F16_ID,mgr); 107 } 108 break; 109 110 case MISCF16::TEST_CORRELATE_F16_4: 111 { 112 this->nba = 4; 113 this->nbb = 8; 114 ref.reload(MISCF16::REF4_F16_ID,mgr); 115 } 116 break; 117 118 case MISCF16::TEST_CORRELATE_F16_5: 119 { 120 this->nba = 4; 121 this->nbb = 11; 122 ref.reload(MISCF16::REF5_F16_ID,mgr); 123 } 124 break; 125 126 case MISCF16::TEST_CORRELATE_F16_6: 127 { 128 this->nba = 5; 129 this->nbb = 1; 130 ref.reload(MISCF16::REF6_F16_ID,mgr); 131 } 132 break; 133 134 case MISCF16::TEST_CORRELATE_F16_7: 135 { 136 this->nba = 5; 137 this->nbb = 2; 138 ref.reload(MISCF16::REF7_F16_ID,mgr); 139 } 140 break; 141 142 case MISCF16::TEST_CORRELATE_F16_8: 143 { 144 this->nba = 5; 145 this->nbb = 3; 146 ref.reload(MISCF16::REF8_F16_ID,mgr); 147 } 148 break; 149 150 case MISCF16::TEST_CORRELATE_F16_9: 151 { 152 this->nba = 5; 153 this->nbb = 8; 154 ref.reload(MISCF16::REF9_F16_ID,mgr); 155 } 156 break; 157 158 case MISCF16::TEST_CORRELATE_F16_10: 159 { 160 this->nba = 5; 161 this->nbb = 11; 162 ref.reload(MISCF16::REF10_F16_ID,mgr); 163 } 164 break; 165 166 case MISCF16::TEST_CORRELATE_F16_11: 167 { 168 this->nba = 6; 169 this->nbb = 1; 170 ref.reload(MISCF16::REF11_F16_ID,mgr); 171 } 172 break; 173 174 case MISCF16::TEST_CORRELATE_F16_12: 175 { 176 this->nba = 6; 177 this->nbb = 2; 178 ref.reload(MISCF16::REF12_F16_ID,mgr); 179 } 180 break; 181 182 case MISCF16::TEST_CORRELATE_F16_13: 183 { 184 this->nba = 6; 185 this->nbb = 3; 186 ref.reload(MISCF16::REF13_F16_ID,mgr); 187 } 188 break; 189 190 case MISCF16::TEST_CORRELATE_F16_14: 191 { 192 this->nba = 6; 193 this->nbb = 8; 194 ref.reload(MISCF16::REF14_F16_ID,mgr); 195 } 196 break; 197 198 case MISCF16::TEST_CORRELATE_F16_15: 199 { 200 this->nba = 6; 201 this->nbb = 11; 202 ref.reload(MISCF16::REF15_F16_ID,mgr); 203 } 204 break; 205 206 case MISCF16::TEST_CORRELATE_F16_16: 207 { 208 this->nba = 9; 209 this->nbb = 1; 210 ref.reload(MISCF16::REF16_F16_ID,mgr); 211 } 212 break; 213 214 case MISCF16::TEST_CORRELATE_F16_17: 215 { 216 this->nba = 9; 217 this->nbb = 2; 218 ref.reload(MISCF16::REF17_F16_ID,mgr); 219 } 220 break; 221 222 case MISCF16::TEST_CORRELATE_F16_18: 223 { 224 this->nba = 9; 225 this->nbb = 3; 226 ref.reload(MISCF16::REF18_F16_ID,mgr); 227 } 228 break; 229 230 case MISCF16::TEST_CORRELATE_F16_19: 231 { 232 this->nba = 9; 233 this->nbb = 8; 234 ref.reload(MISCF16::REF19_F16_ID,mgr); 235 } 236 break; 237 238 case MISCF16::TEST_CORRELATE_F16_20: 239 { 240 this->nba = 9; 241 this->nbb = 11; 242 ref.reload(MISCF16::REF20_F16_ID,mgr); 243 } 244 break; 245 246 case MISCF16::TEST_CORRELATE_F16_21: 247 { 248 this->nba = 10; 249 this->nbb = 1; 250 ref.reload(MISCF16::REF21_F16_ID,mgr); 251 } 252 break; 253 254 case MISCF16::TEST_CORRELATE_F16_22: 255 { 256 this->nba = 10; 257 this->nbb = 2; 258 ref.reload(MISCF16::REF22_F16_ID,mgr); 259 } 260 break; 261 262 case MISCF16::TEST_CORRELATE_F16_23: 263 { 264 this->nba = 10; 265 this->nbb = 3; 266 ref.reload(MISCF16::REF23_F16_ID,mgr); 267 } 268 break; 269 270 case MISCF16::TEST_CORRELATE_F16_24: 271 { 272 this->nba = 10; 273 this->nbb = 8; 274 ref.reload(MISCF16::REF24_F16_ID,mgr); 275 } 276 break; 277 278 case MISCF16::TEST_CORRELATE_F16_25: 279 { 280 this->nba = 10; 281 this->nbb = 11; 282 ref.reload(MISCF16::REF25_F16_ID,mgr); 283 } 284 break; 285 286 case MISCF16::TEST_CORRELATE_F16_26: 287 { 288 this->nba = 11; 289 this->nbb = 1; 290 ref.reload(MISCF16::REF26_F16_ID,mgr); 291 } 292 break; 293 294 case MISCF16::TEST_CORRELATE_F16_27: 295 { 296 this->nba = 11; 297 this->nbb = 2; 298 ref.reload(MISCF16::REF27_F16_ID,mgr); 299 } 300 break; 301 302 case MISCF16::TEST_CORRELATE_F16_28: 303 { 304 this->nba = 11; 305 this->nbb = 3; 306 ref.reload(MISCF16::REF28_F16_ID,mgr); 307 } 308 break; 309 310 case MISCF16::TEST_CORRELATE_F16_29: 311 { 312 this->nba = 11; 313 this->nbb = 8; 314 ref.reload(MISCF16::REF29_F16_ID,mgr); 315 } 316 break; 317 318 case MISCF16::TEST_CORRELATE_F16_30: 319 { 320 this->nba = 11; 321 this->nbb = 11; 322 ref.reload(MISCF16::REF30_F16_ID,mgr); 323 } 324 break; 325 326 case MISCF16::TEST_CORRELATE_F16_31: 327 { 328 this->nba = 12; 329 this->nbb = 1; 330 ref.reload(MISCF16::REF31_F16_ID,mgr); 331 } 332 break; 333 334 case MISCF16::TEST_CORRELATE_F16_32: 335 { 336 this->nba = 12; 337 this->nbb = 2; 338 ref.reload(MISCF16::REF32_F16_ID,mgr); 339 } 340 break; 341 342 case MISCF16::TEST_CORRELATE_F16_33: 343 { 344 this->nba = 12; 345 this->nbb = 3; 346 ref.reload(MISCF16::REF33_F16_ID,mgr); 347 } 348 break; 349 350 case MISCF16::TEST_CORRELATE_F16_34: 351 { 352 this->nba = 12; 353 this->nbb = 8; 354 ref.reload(MISCF16::REF34_F16_ID,mgr); 355 } 356 break; 357 358 case MISCF16::TEST_CORRELATE_F16_35: 359 { 360 this->nba = 12; 361 this->nbb = 11; 362 ref.reload(MISCF16::REF35_F16_ID,mgr); 363 } 364 break; 365 366 case MISCF16::TEST_CORRELATE_F16_36: 367 { 368 this->nba = 13; 369 this->nbb = 1; 370 ref.reload(MISCF16::REF36_F16_ID,mgr); 371 } 372 break; 373 374 case MISCF16::TEST_CORRELATE_F16_37: 375 { 376 this->nba = 13; 377 this->nbb = 2; 378 ref.reload(MISCF16::REF37_F16_ID,mgr); 379 } 380 break; 381 382 case MISCF16::TEST_CORRELATE_F16_38: 383 { 384 this->nba = 13; 385 this->nbb = 3; 386 ref.reload(MISCF16::REF38_F16_ID,mgr); 387 } 388 break; 389 390 case MISCF16::TEST_CORRELATE_F16_39: 391 { 392 this->nba = 13; 393 this->nbb = 8; 394 ref.reload(MISCF16::REF39_F16_ID,mgr); 395 } 396 break; 397 398 case MISCF16::TEST_CORRELATE_F16_40: 399 { 400 this->nba = 13; 401 this->nbb = 11; 402 ref.reload(MISCF16::REF40_F16_ID,mgr); 403 } 404 break; 405 406 #if 0 407 case MISCF16::TEST_CONV_F16_41: 408 { 409 this->nba = 4; 410 this->nbb = 1; 411 ref.reload(MISCF16::REF41_F16_ID,mgr); 412 } 413 break; 414 415 case MISCF16::TEST_CONV_F16_42: 416 { 417 this->nba = 4; 418 this->nbb = 2; 419 ref.reload(MISCF16::REF42_F16_ID,mgr); 420 } 421 break; 422 423 case MISCF16::TEST_CONV_F16_43: 424 { 425 this->nba = 4; 426 this->nbb = 3; 427 ref.reload(MISCF16::REF43_F16_ID,mgr); 428 } 429 break; 430 431 case MISCF16::TEST_CONV_F16_44: 432 { 433 this->nba = 4; 434 this->nbb = 8; 435 ref.reload(MISCF16::REF44_F16_ID,mgr); 436 } 437 break; 438 439 case MISCF16::TEST_CONV_F16_45: 440 { 441 this->nba = 4; 442 this->nbb = 11; 443 ref.reload(MISCF16::REF45_F16_ID,mgr); 444 } 445 break; 446 447 case MISCF16::TEST_CONV_F16_46: 448 { 449 this->nba = 5; 450 this->nbb = 1; 451 ref.reload(MISCF16::REF46_F16_ID,mgr); 452 } 453 break; 454 455 case MISCF16::TEST_CONV_F16_47: 456 { 457 this->nba = 5; 458 this->nbb = 2; 459 ref.reload(MISCF16::REF47_F16_ID,mgr); 460 } 461 break; 462 463 case MISCF16::TEST_CONV_F16_48: 464 { 465 this->nba = 5; 466 this->nbb = 3; 467 ref.reload(MISCF16::REF48_F16_ID,mgr); 468 } 469 break; 470 471 case MISCF16::TEST_CONV_F16_49: 472 { 473 this->nba = 5; 474 this->nbb = 8; 475 ref.reload(MISCF16::REF49_F16_ID,mgr); 476 } 477 break; 478 479 case MISCF16::TEST_CONV_F16_50: 480 { 481 this->nba = 5; 482 this->nbb = 11; 483 ref.reload(MISCF16::REF50_F16_ID,mgr); 484 } 485 break; 486 487 case MISCF16::TEST_CONV_F16_51: 488 { 489 this->nba = 6; 490 this->nbb = 1; 491 ref.reload(MISCF16::REF51_F16_ID,mgr); 492 } 493 break; 494 495 case MISCF16::TEST_CONV_F16_52: 496 { 497 this->nba = 6; 498 this->nbb = 2; 499 ref.reload(MISCF16::REF52_F16_ID,mgr); 500 } 501 break; 502 503 case MISCF16::TEST_CONV_F16_53: 504 { 505 this->nba = 6; 506 this->nbb = 3; 507 ref.reload(MISCF16::REF53_F16_ID,mgr); 508 } 509 break; 510 511 case MISCF16::TEST_CONV_F16_54: 512 { 513 this->nba = 6; 514 this->nbb = 8; 515 ref.reload(MISCF16::REF54_F16_ID,mgr); 516 } 517 break; 518 519 case MISCF16::TEST_CONV_F16_55: 520 { 521 this->nba = 6; 522 this->nbb = 11; 523 ref.reload(MISCF16::REF55_F16_ID,mgr); 524 } 525 break; 526 527 case MISCF16::TEST_CONV_F16_56: 528 { 529 this->nba = 9; 530 this->nbb = 1; 531 ref.reload(MISCF16::REF56_F16_ID,mgr); 532 } 533 break; 534 535 case MISCF16::TEST_CONV_F16_57: 536 { 537 this->nba = 9; 538 this->nbb = 2; 539 ref.reload(MISCF16::REF57_F16_ID,mgr); 540 } 541 break; 542 543 case MISCF16::TEST_CONV_F16_58: 544 { 545 this->nba = 9; 546 this->nbb = 3; 547 ref.reload(MISCF16::REF58_F16_ID,mgr); 548 } 549 break; 550 551 case MISCF16::TEST_CONV_F16_59: 552 { 553 this->nba = 9; 554 this->nbb = 8; 555 ref.reload(MISCF16::REF59_F16_ID,mgr); 556 } 557 break; 558 559 case MISCF16::TEST_CONV_F16_60: 560 { 561 this->nba = 9; 562 this->nbb = 11; 563 ref.reload(MISCF16::REF60_F16_ID,mgr); 564 } 565 break; 566 567 case MISCF16::TEST_CONV_F16_61: 568 { 569 this->nba = 10; 570 this->nbb = 1; 571 ref.reload(MISCF16::REF61_F16_ID,mgr); 572 } 573 break; 574 575 case MISCF16::TEST_CONV_F16_62: 576 { 577 this->nba = 10; 578 this->nbb = 2; 579 ref.reload(MISCF16::REF62_F16_ID,mgr); 580 } 581 break; 582 583 case MISCF16::TEST_CONV_F16_63: 584 { 585 this->nba = 10; 586 this->nbb = 3; 587 ref.reload(MISCF16::REF63_F16_ID,mgr); 588 } 589 break; 590 591 case MISCF16::TEST_CONV_F16_64: 592 { 593 this->nba = 10; 594 this->nbb = 8; 595 ref.reload(MISCF16::REF64_F16_ID,mgr); 596 } 597 break; 598 599 case MISCF16::TEST_CONV_F16_65: 600 { 601 this->nba = 10; 602 this->nbb = 11; 603 ref.reload(MISCF16::REF65_F16_ID,mgr); 604 } 605 break; 606 607 case MISCF16::TEST_CONV_F16_66: 608 { 609 this->nba = 11; 610 this->nbb = 1; 611 ref.reload(MISCF16::REF66_F16_ID,mgr); 612 } 613 break; 614 615 case MISCF16::TEST_CONV_F16_67: 616 { 617 this->nba = 11; 618 this->nbb = 2; 619 ref.reload(MISCF16::REF67_F16_ID,mgr); 620 } 621 break; 622 623 case MISCF16::TEST_CONV_F16_68: 624 { 625 this->nba = 11; 626 this->nbb = 3; 627 ref.reload(MISCF16::REF68_F16_ID,mgr); 628 } 629 break; 630 631 case MISCF16::TEST_CONV_F16_69: 632 { 633 this->nba = 11; 634 this->nbb = 8; 635 ref.reload(MISCF16::REF69_F16_ID,mgr); 636 } 637 break; 638 639 case MISCF16::TEST_CONV_F16_70: 640 { 641 this->nba = 11; 642 this->nbb = 11; 643 ref.reload(MISCF16::REF70_F16_ID,mgr); 644 } 645 break; 646 647 case MISCF16::TEST_CONV_F16_71: 648 { 649 this->nba = 12; 650 this->nbb = 1; 651 ref.reload(MISCF16::REF71_F16_ID,mgr); 652 } 653 break; 654 655 case MISCF16::TEST_CONV_F16_72: 656 { 657 this->nba = 12; 658 this->nbb = 2; 659 ref.reload(MISCF16::REF72_F16_ID,mgr); 660 } 661 break; 662 663 case MISCF16::TEST_CONV_F16_73: 664 { 665 this->nba = 12; 666 this->nbb = 3; 667 ref.reload(MISCF16::REF73_F16_ID,mgr); 668 } 669 break; 670 671 case MISCF16::TEST_CONV_F16_74: 672 { 673 this->nba = 12; 674 this->nbb = 8; 675 ref.reload(MISCF16::REF74_F16_ID,mgr); 676 } 677 break; 678 679 case MISCF16::TEST_CONV_F16_75: 680 { 681 this->nba = 12; 682 this->nbb = 11; 683 ref.reload(MISCF16::REF75_F16_ID,mgr); 684 } 685 break; 686 687 case MISCF16::TEST_CONV_F16_76: 688 { 689 this->nba = 13; 690 this->nbb = 1; 691 ref.reload(MISCF16::REF76_F16_ID,mgr); 692 } 693 break; 694 695 case MISCF16::TEST_CONV_F16_77: 696 { 697 this->nba = 13; 698 this->nbb = 2; 699 ref.reload(MISCF16::REF77_F16_ID,mgr); 700 } 701 break; 702 703 case MISCF16::TEST_CONV_F16_78: 704 { 705 this->nba = 13; 706 this->nbb = 3; 707 ref.reload(MISCF16::REF78_F16_ID,mgr); 708 } 709 break; 710 711 case MISCF16::TEST_CONV_F16_79: 712 { 713 this->nba = 13; 714 this->nbb = 8; 715 ref.reload(MISCF16::REF79_F16_ID,mgr); 716 } 717 break; 718 719 case MISCF16::TEST_CONV_F16_80: 720 { 721 this->nba = 13; 722 this->nbb = 11; 723 ref.reload(MISCF16::REF80_F16_ID,mgr); 724 } 725 break; 726 #endif 727 728 case MISCF16::TEST_LEVINSON_DURBIN_F16_41: 729 { 730 this->nba = 7; 731 inputA.reload(MISCF16::INPUTPHI_A_F16_ID,mgr); 732 733 this->errOffset=0; 734 inputB.reload(MISCF16::INPUT_ERRORS_F16_ID,mgr); 735 ref.reload(MISCF16::REF81_F16_ID,mgr); 736 } 737 break; 738 739 case MISCF16::TEST_LEVINSON_DURBIN_F16_42: 740 { 741 this->nba = 16; 742 inputA.reload(MISCF16::INPUTPHI_B_F16_ID,mgr); 743 744 this->errOffset=1; 745 inputB.reload(MISCF16::INPUT_ERRORS_F16_ID,mgr); 746 ref.reload(MISCF16::REF82_F16_ID,mgr); 747 } 748 break; 749 750 case MISCF16::TEST_LEVINSON_DURBIN_F16_43: 751 { 752 this->nba = 23; 753 inputA.reload(MISCF16::INPUTPHI_C_F16_ID,mgr); 754 755 this->errOffset=2; 756 inputB.reload(MISCF16::INPUT_ERRORS_F16_ID,mgr); 757 ref.reload(MISCF16::REF83_F16_ID,mgr); 758 } 759 break; 760 761 } 762 763 if (id < TEST_LEVINSON_DURBIN_F16_41) 764 { 765 inputA.reload(MISCF16::INPUTA_F16_ID,mgr,nba); 766 inputB.reload(MISCF16::INPUTB_F16_ID,mgr,nbb); 767 } 768 769 output.create(ref.nbSamples(),MISCF16::OUT_F16_ID,mgr); 770 771 } 772 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)773 void MISCF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 774 { 775 (void)id; 776 output.dump(mgr); 777 778 } 779