1 #include "TransformCQ15.h"
2 #include <stdio.h>
3 #include "Error.h"
4 #include "Test.h"
5 
6 #define SNR_THRESHOLD 30
7 
test_cfft_q15()8     void TransformCQ15::test_cfft_q15()
9     {
10        const q15_t *inp = input.ptr();
11 
12        q15_t *outfftp = outputfft.ptr();
13 
14        memcpy(outfftp,inp,sizeof(q15_t)*input.nbSamples());
15 
16        arm_cfft_q15(
17              &(this->instCfftQ15),
18              outfftp,
19              this->ifft,
20              1);
21 
22         ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD);
23         ASSERT_EMPTY_TAIL(outputfft);
24 
25 
26     }
27 
test_cifft_q15()28     void TransformCQ15::test_cifft_q15()
29     {
30        const q15_t *inp = input.ptr();
31 
32        q15_t *outfftp = outputfft.ptr();
33        q15_t *refp = ref.ptr();
34 
35         memcpy(outfftp,inp,sizeof(q15_t)*input.nbSamples());
36 
37         arm_cfft_q15(
38              &(this->instCfftQ15),
39              outfftp,
40              this->ifft,
41              1);
42 
43         for(unsigned long i=0; i < outputfft.nbSamples();i++)
44         {
45           refp[i] >>= this->scaling;
46         }
47 
48         ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD);
49         ASSERT_EMPTY_TAIL(outputfft);
50 
51 
52 
53     }
54 
55 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)56     void TransformCQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
57     {
58 
59 
60        (void)paramsArgs;
61 
62        switch(id)
63        {
64           case TransformCQ15::TEST_CFFT_Q15_1:
65 
66             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_16_Q15_ID,mgr);
67             ref.reload(  TransformCQ15::REF_CFFT_NOISY_16_Q15_ID,mgr);
68 
69             status=arm_cfft_init_q15(&instCfftQ15,16);
70 
71             this->ifft=0;
72 
73           break;
74 
75           case TransformCQ15::TEST_CIFFT_Q15_19:
76 
77             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_16_Q15_ID,mgr);
78             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_16_Q15_ID,mgr);
79 
80             status=arm_cfft_init_q15(&instCfftQ15,16);
81 
82             this->ifft=1;
83             this->scaling = 4;
84 
85           break;
86 
87           case TransformCQ15::TEST_CFFT_Q15_2:
88 
89             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_32_Q15_ID,mgr);
90             ref.reload(  TransformCQ15::REF_CFFT_NOISY_32_Q15_ID,mgr);
91 
92             status=arm_cfft_init_q15(&instCfftQ15,32);
93 
94             this->ifft=0;
95 
96           break;
97 
98           case TransformCQ15::TEST_CIFFT_Q15_20:
99 
100             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_32_Q15_ID,mgr);
101             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_32_Q15_ID,mgr);
102 
103             status=arm_cfft_init_q15(&instCfftQ15,32);
104 
105             this->ifft=1;
106             this->scaling = 5;
107 
108           break;
109 
110           case TransformCQ15::TEST_CFFT_Q15_3:
111 
112             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_64_Q15_ID,mgr);
113             ref.reload(  TransformCQ15::REF_CFFT_NOISY_64_Q15_ID,mgr);
114 
115            status=arm_cfft_init_q15(&instCfftQ15,64);
116 
117             this->ifft=0;
118 
119 
120           break;
121 
122           case TransformCQ15::TEST_CIFFT_Q15_21:
123 
124             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_64_Q15_ID,mgr);
125             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_64_Q15_ID,mgr);
126 
127             status=arm_cfft_init_q15(&instCfftQ15,64);
128 
129             this->ifft=1;
130             this->scaling=6;
131 
132           break;
133 
134           case TransformCQ15::TEST_CFFT_Q15_4:
135 
136             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_128_Q15_ID,mgr);
137             ref.reload(  TransformCQ15::REF_CFFT_NOISY_128_Q15_ID,mgr);
138 
139             status=arm_cfft_init_q15(&instCfftQ15,128);
140 
141             this->ifft=0;
142 
143           break;
144 
145           case TransformCQ15::TEST_CIFFT_Q15_22:
146 
147             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_128_Q15_ID,mgr);
148             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_128_Q15_ID,mgr);
149 
150             status=arm_cfft_init_q15(&instCfftQ15,128);
151 
152             this->ifft=1;
153             this->scaling=7;
154 
155           break;
156 
157           case TransformCQ15::TEST_CFFT_Q15_5:
158 
159             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_256_Q15_ID,mgr);
160             ref.reload(  TransformCQ15::REF_CFFT_NOISY_256_Q15_ID,mgr);
161 
162             status=arm_cfft_init_q15(&instCfftQ15,256);
163 
164             this->ifft=0;
165 
166           break;
167 
168           case TransformCQ15::TEST_CIFFT_Q15_23:
169 
170             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_256_Q15_ID,mgr);
171             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_256_Q15_ID,mgr);
172 
173             status=arm_cfft_init_q15(&instCfftQ15,256);
174 
175             this->ifft=1;
176             this->scaling=8;
177 
178           break;
179 
180           case TransformCQ15::TEST_CFFT_Q15_6:
181 
182             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_512_Q15_ID,mgr);
183             ref.reload(  TransformCQ15::REF_CFFT_NOISY_512_Q15_ID,mgr);
184 
185             status=arm_cfft_init_q15(&instCfftQ15,512);
186 
187             this->ifft=0;
188 
189 
190           break;
191 
192           case TransformCQ15::TEST_CIFFT_Q15_24:
193 
194             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_512_Q15_ID,mgr);
195             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_512_Q15_ID,mgr);
196 
197             status=arm_cfft_init_q15(&instCfftQ15,512);
198 
199             this->ifft=1;
200             this->scaling=9;
201 
202 
203           break;
204 
205           case TransformCQ15::TEST_CFFT_Q15_7:
206 
207             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_1024_Q15_ID,mgr);
208             ref.reload(  TransformCQ15::REF_CFFT_NOISY_1024_Q15_ID,mgr);
209 
210             status=arm_cfft_init_q15(&instCfftQ15,1024);
211 
212             this->ifft=0;
213 
214           break;
215 
216           case TransformCQ15::TEST_CIFFT_Q15_25:
217 
218             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_1024_Q15_ID,mgr);
219             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_1024_Q15_ID,mgr);
220 
221             status=arm_cfft_init_q15(&instCfftQ15,1024);
222 
223             this->ifft=1;
224             this->scaling=10;
225 
226           break;
227 
228           case TransformCQ15::TEST_CFFT_Q15_8:
229 
230             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_2048_Q15_ID,mgr);
231             ref.reload(  TransformCQ15::REF_CFFT_NOISY_2048_Q15_ID,mgr);
232 
233             status=arm_cfft_init_q15(&instCfftQ15,2048);
234 
235             this->ifft=0;
236 
237           break;
238 
239           case TransformCQ15::TEST_CIFFT_Q15_26:
240 
241             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_2048_Q15_ID,mgr);
242             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_2048_Q15_ID,mgr);
243 
244             status=arm_cfft_init_q15(&instCfftQ15,2048);
245 
246             this->ifft=1;
247             this->scaling=11;
248 
249           break;
250 
251           case TransformCQ15::TEST_CFFT_Q15_9:
252 
253             input.reload(TransformCQ15::INPUTS_CFFT_NOISY_4096_Q15_ID,mgr);
254             ref.reload(  TransformCQ15::REF_CFFT_NOISY_4096_Q15_ID,mgr);
255 
256             status=arm_cfft_init_q15(&instCfftQ15,4096);
257 
258             this->ifft=0;
259 
260           break;
261 
262           case TransformCQ15::TEST_CIFFT_Q15_27:
263 
264             input.reload(TransformCQ15::INPUTS_CIFFT_NOISY_4096_Q15_ID,mgr);
265             ref.reload(  TransformCQ15::INPUTS_CFFT_NOISY_4096_Q15_ID,mgr);
266 
267             status=arm_cfft_init_q15(&instCfftQ15,4096);
268 
269             this->ifft=1;
270             this->scaling=12;
271 
272           break;
273 
274           /* STEP FUNCTIONS */
275 
276           case TransformCQ15::TEST_CFFT_Q15_10:
277 
278             input.reload(TransformCQ15::INPUTS_CFFT_STEP_16_Q15_ID,mgr);
279             ref.reload(  TransformCQ15::REF_CFFT_STEP_16_Q15_ID,mgr);
280 
281             status=arm_cfft_init_q15(&instCfftQ15,16);
282 
283             this->ifft=0;
284 
285           break;
286 
287           case TransformCQ15::TEST_CIFFT_Q15_28:
288 
289             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_16_Q15_ID,mgr);
290             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_16_Q15_ID,mgr);
291 
292             status=arm_cfft_init_q15(&instCfftQ15,16);
293 
294             this->ifft=1;
295             this->scaling=4;
296 
297           break;
298 
299           case TransformCQ15::TEST_CFFT_Q15_11:
300 
301             input.reload(TransformCQ15::INPUTS_CFFT_STEP_32_Q15_ID,mgr);
302             ref.reload(  TransformCQ15::REF_CFFT_STEP_32_Q15_ID,mgr);
303 
304             status=arm_cfft_init_q15(&instCfftQ15,32);
305 
306             this->ifft=0;
307 
308           break;
309 
310           case TransformCQ15::TEST_CIFFT_Q15_29:
311 
312             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_32_Q15_ID,mgr);
313             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_32_Q15_ID,mgr);
314 
315             status=arm_cfft_init_q15(&instCfftQ15,32);
316 
317             this->ifft=1;
318             this->scaling=5;
319 
320           break;
321 
322           case TransformCQ15::TEST_CFFT_Q15_12:
323 
324             input.reload(TransformCQ15::INPUTS_CFFT_STEP_64_Q15_ID,mgr);
325             ref.reload(  TransformCQ15::REF_CFFT_STEP_64_Q15_ID,mgr);
326 
327             status=arm_cfft_init_q15(&instCfftQ15,64);
328 
329             this->ifft=0;
330 
331           break;
332 
333           case TransformCQ15::TEST_CIFFT_Q15_30:
334 
335             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_64_Q15_ID,mgr);
336             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_64_Q15_ID,mgr);
337 
338             status=arm_cfft_init_q15(&instCfftQ15,64);
339 
340             this->ifft=1;
341             this->scaling=6;
342 
343           break;
344 
345           case TransformCQ15::TEST_CFFT_Q15_13:
346 
347             input.reload(TransformCQ15::INPUTS_CFFT_STEP_128_Q15_ID,mgr);
348             ref.reload(  TransformCQ15::REF_CFFT_STEP_128_Q15_ID,mgr);
349 
350             status=arm_cfft_init_q15(&instCfftQ15,128);
351 
352             this->ifft=0;
353 
354           break;
355 
356           case TransformCQ15::TEST_CIFFT_Q15_31:
357 
358             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_128_Q15_ID,mgr);
359             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_128_Q15_ID,mgr);
360 
361             status=arm_cfft_init_q15(&instCfftQ15,128);
362 
363             this->ifft=1;
364             this->scaling=7;
365 
366           break;
367 
368           case TransformCQ15::TEST_CFFT_Q15_14:
369 
370             input.reload(TransformCQ15::INPUTS_CFFT_STEP_256_Q15_ID,mgr);
371             ref.reload(  TransformCQ15::REF_CFFT_STEP_256_Q15_ID,mgr);
372 
373             status=arm_cfft_init_q15(&instCfftQ15,256);
374 
375             this->ifft=0;
376 
377           break;
378 
379           case TransformCQ15::TEST_CIFFT_Q15_32:
380 
381             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_256_Q15_ID,mgr);
382             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_256_Q15_ID,mgr);
383 
384             status=arm_cfft_init_q15(&instCfftQ15,256);
385 
386             this->ifft=1;
387             this->scaling=8;
388 
389           break;
390 
391           case TransformCQ15::TEST_CFFT_Q15_15:
392 
393             input.reload(TransformCQ15::INPUTS_CFFT_STEP_512_Q15_ID,mgr);
394             ref.reload(  TransformCQ15::REF_CFFT_STEP_512_Q15_ID,mgr);
395 
396             status=arm_cfft_init_q15(&instCfftQ15,512);
397 
398             this->ifft=0;
399 
400           break;
401 
402           case TransformCQ15::TEST_CIFFT_Q15_33:
403 
404             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_512_Q15_ID,mgr);
405             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_512_Q15_ID,mgr);
406 
407             status=arm_cfft_init_q15(&instCfftQ15,512);
408 
409             this->ifft=1;
410             this->scaling=9;
411 
412           break;
413 
414           case TransformCQ15::TEST_CFFT_Q15_16:
415 
416             input.reload(TransformCQ15::INPUTS_CFFT_STEP_1024_Q15_ID,mgr);
417             ref.reload(  TransformCQ15::REF_CFFT_STEP_1024_Q15_ID,mgr);
418 
419             status=arm_cfft_init_q15(&instCfftQ15,1024);
420 
421             this->ifft=0;
422 
423           break;
424 
425           case TransformCQ15::TEST_CIFFT_Q15_34:
426 
427             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_1024_Q15_ID,mgr);
428             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_1024_Q15_ID,mgr);
429 
430             status=arm_cfft_init_q15(&instCfftQ15,1024);
431 
432             this->ifft=1;
433             this->scaling=10;
434 
435           break;
436 
437           case TransformCQ15::TEST_CFFT_Q15_17:
438 
439             input.reload(TransformCQ15::INPUTS_CFFT_STEP_2048_Q15_ID,mgr);
440             ref.reload(  TransformCQ15::REF_CFFT_STEP_2048_Q15_ID,mgr);
441 
442             status=arm_cfft_init_q15(&instCfftQ15,2048);
443 
444             this->ifft=0;
445 
446           break;
447 
448           case TransformCQ15::TEST_CIFFT_Q15_35:
449 
450             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_2048_Q15_ID,mgr);
451             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_2048_Q15_ID,mgr);
452 
453             status=arm_cfft_init_q15(&instCfftQ15,2048);
454 
455             this->ifft=1;
456             this->scaling=11;
457 
458           break;
459 
460           case TransformCQ15::TEST_CFFT_Q15_18:
461 
462             input.reload(TransformCQ15::INPUTS_CFFT_STEP_4096_Q15_ID,mgr);
463             ref.reload(  TransformCQ15::REF_CFFT_STEP_4096_Q15_ID,mgr);
464 
465             status=arm_cfft_init_q15(&instCfftQ15,4096);
466 
467             this->ifft=0;
468 
469           break;
470 
471           case TransformCQ15::TEST_CIFFT_Q15_36:
472 
473             input.reload(TransformCQ15::INPUTS_CIFFT_STEP_4096_Q15_ID,mgr);
474             ref.reload(  TransformCQ15::INPUTS_CFFT_STEP_4096_Q15_ID,mgr);
475 
476             status=arm_cfft_init_q15(&instCfftQ15,4096);
477 
478             this->ifft=1;
479             this->scaling=12;
480 
481           break;
482 
483        }
484 
485        outputfft.create(ref.nbSamples(),TransformCQ15::OUTPUT_CFFT_Q15_ID,mgr);
486 
487 
488     }
489 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)490     void TransformCQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
491     {
492         (void)id;
493         outputfft.dump(mgr);
494     }
495