1 #include "TransformRQ31.h"
2 #include <stdio.h>
3 #include "Error.h"
4 #include "Test.h"
5 
6 
7 #define SNR_THRESHOLD 90
8 
9 
10 
test_rfft_q31()11     void TransformRQ31::test_rfft_q31()
12     {
13        q31_t *inp = input.ptr();
14 
15        q31_t *tmp = inputchanged.ptr();
16 
17        q31_t *outp = outputfft.ptr();
18        q31_t *overoutp = overheadoutputfft.ptr();
19 
20 
21        memcpy(tmp,inp,sizeof(q31_t)*input.nbSamples());
22 
23        arm_rfft_q31(
24              &this->instRfftQ31,
25              tmp,
26              overoutp);
27 
28        if (this->ifft)
29        {
30           for(unsigned long i = 0;i < overheadoutputfft.nbSamples(); i++)
31           {
32               overoutp[i] = overoutp[i] << this->scaling;
33           }
34        }
35 
36 
37        memcpy(outp,overoutp,sizeof(q31_t)*outputfft.nbSamples());
38 
39        ASSERT_SNR(outputfft,ref,(q31_t)SNR_THRESHOLD);
40        ASSERT_EMPTY_TAIL(outputfft);
41 
42 
43     }
44 
45 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)46     void TransformRQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
47     {
48 
49 
50        (void)paramsArgs;
51 
52        switch(id)
53        {
54 
55           case TransformRQ31::TEST_RFFT_Q31_1:
56 
57             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_32_Q31_ID,mgr);
58             ref.reload(  TransformRQ31::REF_RFFT_NOISY_32_Q31_ID,mgr);
59 
60             arm_rfft_init_q31(&this->instRfftQ31 ,32,0,1);
61 
62             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
63 
64             this->ifft=0;
65 
66           break;
67 
68           case TransformRQ31::TEST_RFFT_Q31_17:
69 
70             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_32_Q31_ID,mgr);
71             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_32_Q31_ID,mgr);
72 
73             arm_rfft_init_q31(&this->instRfftQ31 ,32,1,1);
74 
75             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
76 
77             this->ifft=1;
78             this->scaling=5;
79 
80           break;
81 
82           case TransformRQ31::TEST_RFFT_Q31_2:
83 
84             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_64_Q31_ID,mgr);
85             ref.reload(  TransformRQ31::REF_RFFT_NOISY_64_Q31_ID,mgr);
86 
87             arm_rfft_init_q31(&this->instRfftQ31 ,64,0,1);
88 
89             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
90 
91             this->ifft=0;
92 
93           break;
94 
95           case TransformRQ31::TEST_RFFT_Q31_18:
96 
97             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_64_Q31_ID,mgr);
98             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_64_Q31_ID,mgr);
99 
100             arm_rfft_init_q31(&this->instRfftQ31 ,64,1,1);
101 
102             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
103 
104             this->ifft=1;
105             this->scaling=6;
106 
107           break;
108 
109           case TransformRQ31::TEST_RFFT_Q31_3:
110 
111             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_128_Q31_ID,mgr);
112             ref.reload(  TransformRQ31::REF_RFFT_NOISY_128_Q31_ID,mgr);
113 
114             arm_rfft_init_q31(&this->instRfftQ31 ,128,0,1);
115 
116             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
117 
118             this->ifft=0;
119 
120           break;
121 
122           case TransformRQ31::TEST_RFFT_Q31_19:
123 
124             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_128_Q31_ID,mgr);
125             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_128_Q31_ID,mgr);
126 
127             arm_rfft_init_q31(&this->instRfftQ31 ,128,1,1);
128 
129             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
130 
131             this->ifft=1;
132             this->scaling=7;
133 
134           break;
135 
136           case TransformRQ31::TEST_RFFT_Q31_4:
137 
138             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_256_Q31_ID,mgr);
139             ref.reload(  TransformRQ31::REF_RFFT_NOISY_256_Q31_ID,mgr);
140 
141             arm_rfft_init_q31(&this->instRfftQ31 ,256,0,1);
142 
143             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
144 
145             this->ifft=0;
146 
147           break;
148 
149           case TransformRQ31::TEST_RFFT_Q31_20:
150 
151             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_256_Q31_ID,mgr);
152             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_256_Q31_ID,mgr);
153 
154             arm_rfft_init_q31(&this->instRfftQ31 ,256,1,1);
155 
156             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
157 
158             this->ifft=1;
159             this->scaling=8;
160 
161           break;
162 
163           case TransformRQ31::TEST_RFFT_Q31_5:
164 
165             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_512_Q31_ID,mgr);
166             ref.reload(  TransformRQ31::REF_RFFT_NOISY_512_Q31_ID,mgr);
167 
168             arm_rfft_init_q31(&this->instRfftQ31 ,512,0,1);
169 
170             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
171 
172             this->ifft=0;
173 
174           break;
175 
176           case TransformRQ31::TEST_RFFT_Q31_21:
177 
178             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_512_Q31_ID,mgr);
179             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_512_Q31_ID,mgr);
180 
181             arm_rfft_init_q31(&this->instRfftQ31 ,512,1,1);
182 
183             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
184 
185             this->ifft=1;
186             this->scaling=9;
187 
188           break;
189 
190           case TransformRQ31::TEST_RFFT_Q31_6:
191 
192             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_1024_Q31_ID,mgr);
193             ref.reload(  TransformRQ31::REF_RFFT_NOISY_1024_Q31_ID,mgr);
194 
195             arm_rfft_init_q31(&this->instRfftQ31 ,1024,0,1);
196 
197             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
198 
199             this->ifft=0;
200 
201           break;
202 
203           case TransformRQ31::TEST_RFFT_Q31_22:
204 
205             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_1024_Q31_ID,mgr);
206             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_1024_Q31_ID,mgr);
207 
208             arm_rfft_init_q31(&this->instRfftQ31 ,1024,1,1);
209 
210             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
211 
212             this->ifft=1;
213             this->scaling=10;
214 
215           break;
216 
217           case TransformRQ31::TEST_RFFT_Q31_7:
218 
219             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_2048_Q31_ID,mgr);
220             ref.reload(  TransformRQ31::REF_RFFT_NOISY_2048_Q31_ID,mgr);
221 
222             arm_rfft_init_q31(&this->instRfftQ31 ,2048,0,1);
223 
224             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
225 
226             this->ifft=0;
227 
228           break;
229 
230           case TransformRQ31::TEST_RFFT_Q31_23:
231 
232             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_2048_Q31_ID,mgr);
233             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_2048_Q31_ID,mgr);
234 
235             arm_rfft_init_q31(&this->instRfftQ31 ,2048,1,1);
236 
237             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
238 
239             this->ifft=1;
240             this->scaling=11;
241 
242           break;
243 
244           case TransformRQ31::TEST_RFFT_Q31_8:
245 
246             input.reload(TransformRQ31::INPUTS_RFFT_NOISY_4096_Q31_ID,mgr);
247             ref.reload(  TransformRQ31::REF_RFFT_NOISY_4096_Q31_ID,mgr);
248 
249             arm_rfft_init_q31(&this->instRfftQ31 ,4096,0,1);
250 
251             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
252 
253             this->ifft=0;
254 
255           break;
256 
257           case TransformRQ31::TEST_RFFT_Q31_24:
258 
259             input.reload(TransformRQ31::INPUTS_RIFFT_NOISY_4096_Q31_ID,mgr);
260             ref.reload(  TransformRQ31::INPUTS_RFFT_NOISY_4096_Q31_ID,mgr);
261 
262             arm_rfft_init_q31(&this->instRfftQ31 ,4096,1,1);
263 
264             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
265 
266             this->ifft=1;
267             this->scaling=12;
268 
269           break;
270 
271           /* STEP FUNCTIONS */
272 
273           case TransformRQ31::TEST_RFFT_Q31_9:
274 
275             input.reload(TransformRQ31::INPUTS_RFFT_STEP_32_Q31_ID,mgr);
276             ref.reload(  TransformRQ31::REF_RFFT_STEP_32_Q31_ID,mgr);
277 
278             arm_rfft_init_q31(&this->instRfftQ31 ,32,0,1);
279 
280             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
281 
282             this->ifft=0;
283 
284           break;
285 
286           case TransformRQ31::TEST_RFFT_Q31_25:
287 
288             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_32_Q31_ID,mgr);
289             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_32_Q31_ID,mgr);
290 
291             arm_rfft_init_q31(&this->instRfftQ31 ,32,1,1);
292 
293             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
294 
295             this->ifft=1;
296             this->scaling=5;
297 
298           break;
299 
300           case TransformRQ31::TEST_RFFT_Q31_10:
301 
302             input.reload(TransformRQ31::INPUTS_RFFT_STEP_64_Q31_ID,mgr);
303             ref.reload(  TransformRQ31::REF_RFFT_STEP_64_Q31_ID,mgr);
304 
305             arm_rfft_init_q31(&this->instRfftQ31 ,64,0,1);
306 
307             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
308 
309             this->ifft=0;
310 
311           break;
312 
313           case TransformRQ31::TEST_RFFT_Q31_26:
314 
315             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_64_Q31_ID,mgr);
316             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_64_Q31_ID,mgr);
317 
318             arm_rfft_init_q31(&this->instRfftQ31 ,64,1,1);
319 
320             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
321 
322             this->ifft=1;
323             this->scaling=6;
324 
325           break;
326 
327           case TransformRQ31::TEST_RFFT_Q31_11:
328 
329             input.reload(TransformRQ31::INPUTS_RFFT_STEP_128_Q31_ID,mgr);
330             ref.reload(  TransformRQ31::REF_RFFT_STEP_128_Q31_ID,mgr);
331 
332             arm_rfft_init_q31(&this->instRfftQ31 ,128,0,1);
333 
334             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
335             this->ifft=0;
336 
337           break;
338 
339           case TransformRQ31::TEST_RFFT_Q31_27:
340 
341             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_128_Q31_ID,mgr);
342             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_128_Q31_ID,mgr);
343 
344             arm_rfft_init_q31(&this->instRfftQ31 ,128,1,1);
345 
346             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
347 
348             this->ifft=1;
349             this->scaling=7;
350 
351           break;
352 
353           case TransformRQ31::TEST_RFFT_Q31_12:
354 
355             input.reload(TransformRQ31::INPUTS_RFFT_STEP_256_Q31_ID,mgr);
356             ref.reload(  TransformRQ31::REF_RFFT_STEP_256_Q31_ID,mgr);
357 
358             arm_rfft_init_q31(&this->instRfftQ31 ,256,0,1);
359 
360             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
361 
362             this->ifft=0;
363 
364           break;
365 
366           case TransformRQ31::TEST_RFFT_Q31_28:
367 
368             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_256_Q31_ID,mgr);
369             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_256_Q31_ID,mgr);
370 
371             arm_rfft_init_q31(&this->instRfftQ31 ,256,1,1);
372 
373             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
374 
375             this->ifft=1;
376             this->scaling=8;
377 
378           break;
379 
380           case TransformRQ31::TEST_RFFT_Q31_13:
381 
382             input.reload(TransformRQ31::INPUTS_RFFT_STEP_512_Q31_ID,mgr);
383             ref.reload(  TransformRQ31::REF_RFFT_STEP_512_Q31_ID,mgr);
384 
385             arm_rfft_init_q31(&this->instRfftQ31 ,512,0,1);
386 
387             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
388 
389             this->ifft=0;
390 
391           break;
392 
393           case TransformRQ31::TEST_RFFT_Q31_29:
394 
395             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_512_Q31_ID,mgr);
396             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_512_Q31_ID,mgr);
397 
398             arm_rfft_init_q31(&this->instRfftQ31 ,512,1,1);
399 
400             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
401 
402             this->ifft=1;
403             this->scaling=9;
404 
405           break;
406 
407           case TransformRQ31::TEST_RFFT_Q31_14:
408 
409             input.reload(TransformRQ31::INPUTS_RFFT_STEP_1024_Q31_ID,mgr);
410             ref.reload(  TransformRQ31::REF_RFFT_STEP_1024_Q31_ID,mgr);
411 
412             arm_rfft_init_q31(&this->instRfftQ31 ,1024,0,1);
413 
414             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
415 
416             this->ifft=0;
417 
418           break;
419 
420           case TransformRQ31::TEST_RFFT_Q31_30:
421 
422             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_1024_Q31_ID,mgr);
423             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_1024_Q31_ID,mgr);
424 
425             arm_rfft_init_q31(&this->instRfftQ31 ,1024,1,1);
426 
427             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
428 
429             this->ifft=1;
430             this->scaling=10;
431 
432           break;
433 
434           case TransformRQ31::TEST_RFFT_Q31_15:
435 
436             input.reload(TransformRQ31::INPUTS_RFFT_STEP_2048_Q31_ID,mgr);
437             ref.reload(  TransformRQ31::REF_RFFT_STEP_2048_Q31_ID,mgr);
438 
439             arm_rfft_init_q31(&this->instRfftQ31 ,2048,0,1);
440 
441             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
442 
443             this->ifft=0;
444 
445           break;
446 
447           case TransformRQ31::TEST_RFFT_Q31_31:
448 
449             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_2048_Q31_ID,mgr);
450             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_2048_Q31_ID,mgr);
451 
452             arm_rfft_init_q31(&this->instRfftQ31 ,2048,1,1);
453 
454             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
455 
456             this->ifft=1;
457             this->scaling=11;
458 
459           break;
460 
461           case TransformRQ31::TEST_RFFT_Q31_16:
462 
463             input.reload(TransformRQ31::INPUTS_RFFT_STEP_4096_Q31_ID,mgr);
464             ref.reload(  TransformRQ31::REF_RFFT_STEP_4096_Q31_ID,mgr);
465 
466             arm_rfft_init_q31(&this->instRfftQ31 ,4096,0,1);
467 
468             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
469 
470             this->ifft=0;
471 
472           break;
473 
474           case TransformRQ31::TEST_RFFT_Q31_32:
475 
476             input.reload(TransformRQ31::INPUTS_RIFFT_STEP_4096_Q31_ID,mgr);
477             ref.reload(  TransformRQ31::INPUTS_RFFT_STEP_4096_Q31_ID,mgr);
478 
479             arm_rfft_init_q31(&this->instRfftQ31 ,4096,1,1);
480 
481             inputchanged.create(input.nbSamples(),TransformRQ31::TEMP_Q31_ID,mgr);
482 
483             this->ifft=1;
484             this->scaling=12;
485 
486           break;
487 
488 
489 
490        }
491 
492 
493       outputfft.create(ref.nbSamples(),TransformRQ31::OUTPUT_RFFT_Q31_ID,mgr);
494       /*
495 
496       RFFT is writing more samples than it should.
497       This is a temporary buffer allowing the test to pass.
498 
499       */
500       overheadoutputfft.create(2*ref.nbSamples(),TransformRQ31::FULLOUTPUT_Q31_ID,mgr);
501 
502     }
503 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)504     void TransformRQ31::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
505     {
506         (void)id;
507         outputfft.dump(mgr);
508         overheadoutputfft.dump(mgr);
509     }
510