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