1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#include "jtest.h"
#include "ref.h"
#include "arr_desc.h"
#include "transform_templates.h"
#include "transform_test_data.h"
#include "type_abbrev.h"
/*
FFT function test template. Arguments are: function suffix (q7/q15/q31/f32)
function configuration suffix (same as function suffix), inverse-transform flag,
input and output type (both q7_t/q15_t/q31_t/float32_t)
*/
#define RFFT_DEFINE_TEST(suffix, config_suffix, \
ifft_flag, input_type, output_type) \
JTEST_DEFINE_TEST(arm_rfft_##suffix##_##config_suffix##_test, \
arm_rfft_##suffix) \
{ \
CONCAT(arm_rfft_instance_, suffix) rfft_inst_fut = {0}; \
CONCAT(arm_rfft_instance_, suffix) rfft_inst_ref = {0}; \
\
/* Go through all arm_rfft lengths */ \
TEMPLATE_DO_ARR_DESC( \
fftlen_idx, uint16_t, fftlen, transform_rfft_fftlens \
, \
\
/* Initialize the RFFT and CFFT Instances */ \
arm_rfft_init_##suffix( \
&rfft_inst_fut, \
(uint32_t) fftlen, ifft_flag, 1U); \
\
arm_rfft_init_##suffix( \
&rfft_inst_ref, \
(uint32_t) fftlen, ifft_flag, 1U); \
\
if (ifft_flag) \
{ \
TRANSFORM_PREPARE_INVERSE_INPUTS( \
transform_fft_##suffix##_inputs, \
fftlen, input_type, \
fftlen * \
sizeof(input_type)); \
} \
else \
{ \
TRANSFORM_COPY_INPUTS( \
transform_fft_##suffix##_inputs, \
fftlen * \
sizeof(input_type)); \
} \
\
/* Display parameter values */ \
JTEST_DUMP_STRF("Block Size: %d\n" \
"Inverse-transform flag: %d\n", \
(int)fftlen, \
(int)ifft_flag); \
\
/* Display cycle count and run test */ \
JTEST_COUNT_CYCLES( \
arm_rfft_##suffix( \
&rfft_inst_fut, \
(void *) transform_fft_input_fut, \
(void *) transform_fft_output_fut)); \
\
ref_rfft_##suffix( \
&rfft_inst_ref, \
(void *) transform_fft_input_ref, \
(void *) transform_fft_output_ref); \
\
/* Test correctness */ \
TRANSFORM_SNR_COMPARE_INTERFACE( \
fftlen, \
output_type)); \
\
return JTEST_TEST_PASSED; \
}
RFFT_DEFINE_TEST(q31, forward, 0U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31));
RFFT_DEFINE_TEST(q15, forward, 0U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15));
//RFFT_DEFINE_TEST(f32, inverse, 1U, TYPE_FROM_ABBREV(f32), TYPE_FROM_ABBREV(f32));
RFFT_DEFINE_TEST(q31, inverse, 1U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31));
RFFT_DEFINE_TEST(q15, inverse, 1U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15));
/*--------------------------------------------------------------------------------*/
/* Collect all tests in a group */
/*--------------------------------------------------------------------------------*/
JTEST_DEFINE_GROUP(rfft_tests)
{
JTEST_TEST_CALL(arm_rfft_q31_forward_test);
JTEST_TEST_CALL(arm_rfft_q15_forward_test);
//JTEST_TEST_CALL(arm_rfft_f32_inverse_test);
JTEST_TEST_CALL(arm_rfft_q31_inverse_test);
JTEST_TEST_CALL(arm_rfft_q15_inverse_test);
}
|