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