1 #include "TransformRQ15.h"
2 #include <stdio.h>
3 #include "Error.h"
4 #include "Test.h"
5 
6 
7 #define SNR_THRESHOLD 40
8 
9 #define RIFFT_SNR_THRESHOLD 25
10 
11 
test_rfft_q15()12     void TransformRQ15::test_rfft_q15()
13     {
14        q15_t *inp = input.ptr();
15 
16        q15_t *tmp = inputchanged.ptr();
17 
18        q15_t *outp = outputfft.ptr();
19        q15_t *overoutp = overheadoutputfft.ptr();
20 
21 
22        memcpy(tmp,inp,sizeof(q15_t)*input.nbSamples());
23 
24        arm_rfft_q15(
25              &this->instRfftQ15,
26              tmp,
27              overoutp);
28 
29        if (this->ifft)
30        {
31           for(unsigned long i = 0;i < overheadoutputfft.nbSamples(); i++)
32           {
33               overoutp[i] = overoutp[i] << this->scaling;
34           }
35        }
36 
37 
38        memcpy(outp,overoutp,sizeof(q15_t)*outputfft.nbSamples());
39 
40        if (this->ifft)
41        {
42           ASSERT_SNR(outputfft,ref,(q15_t)RIFFT_SNR_THRESHOLD);
43        }
44        else
45        {
46          ASSERT_SNR(outputfft,ref,(q15_t)SNR_THRESHOLD);
47        }
48        ASSERT_EMPTY_TAIL(outputfft);
49 
50 
51     }
52 
53 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)54     void TransformRQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
55     {
56 
57 
58        (void)paramsArgs;
59 
60        switch(id)
61        {
62 
63           case TransformRQ15::TEST_RFFT_Q15_1:
64 
65             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_32_Q15_ID,mgr);
66             ref.reload(  TransformRQ15::REF_RFFT_NOISY_32_Q15_ID,mgr);
67 
68             arm_rfft_init_q15(&this->instRfftQ15 ,32,0,1);
69 
70             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
71 
72             this->ifft=0;
73 
74           break;
75 
76           case TransformRQ15::TEST_RFFT_Q15_17:
77 
78             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_32_Q15_ID,mgr);
79             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_32_Q15_ID,mgr);
80 
81             arm_rfft_init_q15(&this->instRfftQ15 ,32,1,1);
82 
83             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
84 
85             this->ifft=1;
86             this->scaling=5;
87 
88           break;
89 
90           case TransformRQ15::TEST_RFFT_Q15_2:
91 
92             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_64_Q15_ID,mgr);
93             ref.reload(  TransformRQ15::REF_RFFT_NOISY_64_Q15_ID,mgr);
94 
95             arm_rfft_init_q15(&this->instRfftQ15 ,64,0,1);
96 
97             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
98 
99             this->ifft=0;
100 
101           break;
102 
103           case TransformRQ15::TEST_RFFT_Q15_18:
104 
105             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_64_Q15_ID,mgr);
106             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_64_Q15_ID,mgr);
107 
108             arm_rfft_init_q15(&this->instRfftQ15 ,64,1,1);
109 
110             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
111 
112             this->ifft=1;
113             this->scaling=6;
114 
115           break;
116 
117           case TransformRQ15::TEST_RFFT_Q15_3:
118 
119             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_128_Q15_ID,mgr);
120             ref.reload(  TransformRQ15::REF_RFFT_NOISY_128_Q15_ID,mgr);
121 
122             arm_rfft_init_q15(&this->instRfftQ15 ,128,0,1);
123 
124             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
125 
126             this->ifft=0;
127 
128           break;
129 
130           case TransformRQ15::TEST_RFFT_Q15_19:
131 
132             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_128_Q15_ID,mgr);
133             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_128_Q15_ID,mgr);
134 
135             arm_rfft_init_q15(&this->instRfftQ15 ,128,1,1);
136 
137             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
138 
139             this->ifft=1;
140             this->scaling=7;
141 
142           break;
143 
144           case TransformRQ15::TEST_RFFT_Q15_4:
145 
146             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_256_Q15_ID,mgr);
147             ref.reload(  TransformRQ15::REF_RFFT_NOISY_256_Q15_ID,mgr);
148 
149             arm_rfft_init_q15(&this->instRfftQ15 ,256,0,1);
150 
151             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
152 
153             this->ifft=0;
154 
155           break;
156 
157           case TransformRQ15::TEST_RFFT_Q15_20:
158 
159             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_256_Q15_ID,mgr);
160             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_256_Q15_ID,mgr);
161 
162             arm_rfft_init_q15(&this->instRfftQ15 ,256,1,1);
163 
164             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
165 
166             this->ifft=1;
167             this->scaling=8;
168 
169           break;
170 
171           case TransformRQ15::TEST_RFFT_Q15_5:
172 
173             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_512_Q15_ID,mgr);
174             ref.reload(  TransformRQ15::REF_RFFT_NOISY_512_Q15_ID,mgr);
175 
176             arm_rfft_init_q15(&this->instRfftQ15 ,512,0,1);
177 
178             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
179 
180             this->ifft=0;
181 
182           break;
183 
184           case TransformRQ15::TEST_RFFT_Q15_21:
185 
186             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_512_Q15_ID,mgr);
187             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_512_Q15_ID,mgr);
188 
189             arm_rfft_init_q15(&this->instRfftQ15 ,512,1,1);
190 
191             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
192 
193             this->ifft=1;
194             this->scaling=9;
195 
196           break;
197 
198           case TransformRQ15::TEST_RFFT_Q15_6:
199 
200             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_1024_Q15_ID,mgr);
201             ref.reload(  TransformRQ15::REF_RFFT_NOISY_1024_Q15_ID,mgr);
202 
203             arm_rfft_init_q15(&this->instRfftQ15 ,1024,0,1);
204 
205             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
206 
207             this->ifft=0;
208 
209           break;
210 
211           case TransformRQ15::TEST_RFFT_Q15_22:
212 
213             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_1024_Q15_ID,mgr);
214             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_1024_Q15_ID,mgr);
215 
216             arm_rfft_init_q15(&this->instRfftQ15 ,1024,1,1);
217 
218             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
219 
220             this->ifft=1;
221             this->scaling=10;
222 
223           break;
224 
225           case TransformRQ15::TEST_RFFT_Q15_7:
226 
227             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_2048_Q15_ID,mgr);
228             ref.reload(  TransformRQ15::REF_RFFT_NOISY_2048_Q15_ID,mgr);
229 
230             arm_rfft_init_q15(&this->instRfftQ15 ,2048,0,1);
231 
232             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
233 
234             this->ifft=0;
235 
236           break;
237 
238           case TransformRQ15::TEST_RFFT_Q15_23:
239 
240             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_2048_Q15_ID,mgr);
241             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_2048_Q15_ID,mgr);
242 
243             arm_rfft_init_q15(&this->instRfftQ15 ,2048,1,1);
244 
245             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
246 
247             this->ifft=1;
248             this->scaling=11;
249 
250           break;
251 
252           case TransformRQ15::TEST_RFFT_Q15_8:
253 
254             input.reload(TransformRQ15::INPUTS_RFFT_NOISY_4096_Q15_ID,mgr);
255             ref.reload(  TransformRQ15::REF_RFFT_NOISY_4096_Q15_ID,mgr);
256 
257             arm_rfft_init_q15(&this->instRfftQ15 ,4096,0,1);
258 
259             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
260 
261             this->ifft=0;
262 
263           break;
264 
265           case TransformRQ15::TEST_RFFT_Q15_24:
266 
267             input.reload(TransformRQ15::INPUTS_RIFFT_NOISY_4096_Q15_ID,mgr);
268             ref.reload(  TransformRQ15::INPUTS_RFFT_NOISY_4096_Q15_ID,mgr);
269 
270             arm_rfft_init_q15(&this->instRfftQ15 ,4096,1,1);
271 
272             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
273 
274             this->ifft=1;
275             this->scaling=12;
276 
277           break;
278 
279           /* STEP FUNCTIONS */
280 
281           case TransformRQ15::TEST_RFFT_Q15_9:
282 
283             input.reload(TransformRQ15::INPUTS_RFFT_STEP_32_Q15_ID,mgr);
284             ref.reload(  TransformRQ15::REF_RFFT_STEP_32_Q15_ID,mgr);
285 
286             arm_rfft_init_q15(&this->instRfftQ15 ,32,0,1);
287 
288             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
289 
290             this->ifft=0;
291 
292           break;
293 
294           case TransformRQ15::TEST_RFFT_Q15_25:
295 
296             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_32_Q15_ID,mgr);
297             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_32_Q15_ID,mgr);
298 
299             arm_rfft_init_q15(&this->instRfftQ15 ,32,1,1);
300 
301             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
302 
303             this->ifft=1;
304             this->scaling=5;
305 
306           break;
307 
308           case TransformRQ15::TEST_RFFT_Q15_10:
309 
310             input.reload(TransformRQ15::INPUTS_RFFT_STEP_64_Q15_ID,mgr);
311             ref.reload(  TransformRQ15::REF_RFFT_STEP_64_Q15_ID,mgr);
312 
313             arm_rfft_init_q15(&this->instRfftQ15 ,64,0,1);
314 
315             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
316 
317             this->ifft=0;
318 
319           break;
320 
321           case TransformRQ15::TEST_RFFT_Q15_26:
322 
323             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_64_Q15_ID,mgr);
324             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_64_Q15_ID,mgr);
325 
326             arm_rfft_init_q15(&this->instRfftQ15 ,64,1,1);
327 
328             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
329 
330             this->ifft=1;
331             this->scaling=6;
332 
333           break;
334 
335           case TransformRQ15::TEST_RFFT_Q15_11:
336 
337             input.reload(TransformRQ15::INPUTS_RFFT_STEP_128_Q15_ID,mgr);
338             ref.reload(  TransformRQ15::REF_RFFT_STEP_128_Q15_ID,mgr);
339 
340             arm_rfft_init_q15(&this->instRfftQ15 ,128,0,1);
341 
342             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
343             this->ifft=0;
344 
345           break;
346 
347           case TransformRQ15::TEST_RFFT_Q15_27:
348 
349             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_128_Q15_ID,mgr);
350             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_128_Q15_ID,mgr);
351 
352             arm_rfft_init_q15(&this->instRfftQ15 ,128,1,1);
353 
354             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
355 
356             this->ifft=1;
357             this->scaling=7;
358 
359           break;
360 
361           case TransformRQ15::TEST_RFFT_Q15_12:
362 
363             input.reload(TransformRQ15::INPUTS_RFFT_STEP_256_Q15_ID,mgr);
364             ref.reload(  TransformRQ15::REF_RFFT_STEP_256_Q15_ID,mgr);
365 
366             arm_rfft_init_q15(&this->instRfftQ15 ,256,0,1);
367 
368             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
369 
370             this->ifft=0;
371 
372           break;
373 
374           case TransformRQ15::TEST_RFFT_Q15_28:
375 
376             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_256_Q15_ID,mgr);
377             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_256_Q15_ID,mgr);
378 
379             arm_rfft_init_q15(&this->instRfftQ15 ,256,1,1);
380 
381             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
382 
383             this->ifft=1;
384             this->scaling=8;
385 
386           break;
387 
388           case TransformRQ15::TEST_RFFT_Q15_13:
389 
390             input.reload(TransformRQ15::INPUTS_RFFT_STEP_512_Q15_ID,mgr);
391             ref.reload(  TransformRQ15::REF_RFFT_STEP_512_Q15_ID,mgr);
392 
393             arm_rfft_init_q15(&this->instRfftQ15 ,512,0,1);
394 
395             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
396 
397             this->ifft=0;
398 
399           break;
400 
401           case TransformRQ15::TEST_RFFT_Q15_29:
402 
403             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_512_Q15_ID,mgr);
404             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_512_Q15_ID,mgr);
405 
406             arm_rfft_init_q15(&this->instRfftQ15 ,512,1,1);
407 
408             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
409 
410             this->ifft=1;
411             this->scaling=9;
412 
413           break;
414 
415           case TransformRQ15::TEST_RFFT_Q15_14:
416 
417             input.reload(TransformRQ15::INPUTS_RFFT_STEP_1024_Q15_ID,mgr);
418             ref.reload(  TransformRQ15::REF_RFFT_STEP_1024_Q15_ID,mgr);
419 
420             arm_rfft_init_q15(&this->instRfftQ15 ,1024,0,1);
421 
422             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
423 
424             this->ifft=0;
425 
426           break;
427 
428           case TransformRQ15::TEST_RFFT_Q15_30:
429 
430             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_1024_Q15_ID,mgr);
431             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_1024_Q15_ID,mgr);
432 
433             arm_rfft_init_q15(&this->instRfftQ15 ,1024,1,1);
434 
435             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
436 
437             this->ifft=1;
438             this->scaling=10;
439 
440           break;
441 
442           case TransformRQ15::TEST_RFFT_Q15_15:
443 
444             input.reload(TransformRQ15::INPUTS_RFFT_STEP_2048_Q15_ID,mgr);
445             ref.reload(  TransformRQ15::REF_RFFT_STEP_2048_Q15_ID,mgr);
446 
447             arm_rfft_init_q15(&this->instRfftQ15 ,2048,0,1);
448 
449             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
450 
451             this->ifft=0;
452 
453           break;
454 
455           case TransformRQ15::TEST_RFFT_Q15_31:
456 
457             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_2048_Q15_ID,mgr);
458             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_2048_Q15_ID,mgr);
459 
460             arm_rfft_init_q15(&this->instRfftQ15 ,2048,1,1);
461 
462             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
463 
464             this->ifft=1;
465             this->scaling=11;
466 
467           break;
468 
469           case TransformRQ15::TEST_RFFT_Q15_16:
470 
471             input.reload(TransformRQ15::INPUTS_RFFT_STEP_4096_Q15_ID,mgr);
472             ref.reload(  TransformRQ15::REF_RFFT_STEP_4096_Q15_ID,mgr);
473 
474             arm_rfft_init_q15(&this->instRfftQ15 ,4096,0,1);
475 
476             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
477 
478             this->ifft=0;
479 
480           break;
481 
482           case TransformRQ15::TEST_RFFT_Q15_32:
483 
484             input.reload(TransformRQ15::INPUTS_RIFFT_STEP_4096_Q15_ID,mgr);
485             ref.reload(  TransformRQ15::INPUTS_RFFT_STEP_4096_Q15_ID,mgr);
486 
487             arm_rfft_init_q15(&this->instRfftQ15 ,4096,1,1);
488 
489             inputchanged.create(input.nbSamples(),TransformRQ15::TEMP_Q15_ID,mgr);
490 
491             this->ifft=1;
492             this->scaling=12;
493 
494           break;
495 
496 
497 
498        }
499 
500 
501       outputfft.create(ref.nbSamples(),TransformRQ15::OUTPUT_RFFT_Q15_ID,mgr);
502       /*
503 
504       RFFT is writing more samples than it should.
505       This is a temporary buffer allowing the test to pass.
506 
507       */
508       overheadoutputfft.create(2*ref.nbSamples(),TransformRQ15::FULLOUTPUT_Q15_ID,mgr);
509 
510     }
511 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)512     void TransformRQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
513     {
514         (void)id;
515         outputfft.dump(mgr);
516         overheadoutputfft.dump(mgr);
517     }
518