source: S-port/trunk/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c@ 1

Last change on this file since 1 was 1, checked in by AlexLir, 2 years ago
File size: 13.8 KB
Line 
1#include "jtest.h"
2#include "filtering_test_data.h"
3#include "arr_desc.h"
4#include "arm_math.h" /* FUTs */
5#include "ref.h" /* Reference Functions */
6#include "test_templates.h"
7#include "filtering_templates.h"
8#include "type_abbrev.h"
9
10#define BIQUAD_DEFINE_TEST(suffix, instance_name, config_suffix, output_type) \
11 JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##_##suffix##_test, \
12 arm_biquad_cascade_##config_suffix##_##suffix) \
13 { \
14 instance_name biquad_inst_fut = { 0 }; \
15 instance_name biquad_inst_ref = { 0 }; \
16 \
17 TEMPLATE_DO_ARR_DESC( \
18 blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
19 , \
20 TEMPLATE_DO_ARR_DESC( \
21 numstages_idx, uint16_t, numStages, filtering_numstages \
22 , \
23 /* Initialize the BIQUAD Instances */ \
24 arm_biquad_cascade_##config_suffix##_init_##suffix( \
25 &biquad_inst_fut, numStages, \
26 (output_type*)filtering_coeffs_b_##suffix, \
27 (void *) filtering_pState); \
28 \
29 /* Display test parameter values */ \
30 JTEST_DUMP_STRF("Block Size: %d\n" \
31 "Number of Stages: %d\n", \
32 (int)blockSize, \
33 (int)numStages); \
34 \
35 JTEST_COUNT_CYCLES( \
36 arm_biquad_cascade_##config_suffix##_##suffix( \
37 &biquad_inst_fut, \
38 (void *) filtering_##suffix##_inputs, \
39 (void *) filtering_output_fut, \
40 blockSize)); \
41 \
42 arm_biquad_cascade_##config_suffix##_init_##suffix( \
43 &biquad_inst_ref, numStages, \
44 (output_type*)filtering_coeffs_b_##suffix, \
45 (void *) filtering_pState); \
46 \
47 ref_biquad_cascade_##config_suffix##_##suffix( \
48 &biquad_inst_ref, \
49 (void *) filtering_##suffix##_inputs, \
50 (void *) filtering_output_ref, \
51 blockSize); \
52 \
53 FILTERING_SNR_COMPARE_INTERFACE( \
54 blockSize, \
55 output_type))); \
56 \
57 return JTEST_TEST_PASSED; \
58 }
59
60#define BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(suffix, config_suffix, speed, output_type) \
61 JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##speed##_##suffix##_test, \
62 arm_biquad_cascade_##config_suffix##speed##_##suffix) \
63 { \
64 arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_fut = { 0 }; \
65 arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_ref = { 0 }; \
66 \
67 TEMPLATE_DO_ARR_DESC( \
68 blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
69 , \
70 TEMPLATE_DO_ARR_DESC( \
71 numstages_idx, uint16_t, numStages, filtering_numstages \
72 , \
73 TEMPLATE_DO_ARR_DESC( \
74 postshifts_idx, uint8_t, postShift, filtering_postshifts \
75 , \
76 /* Display test parameter values */ \
77 JTEST_DUMP_STRF("Block Size: %d\n" \
78 "Number of Stages: %d\n" \
79 "Post Shift: %d\n", \
80 (int)blockSize, \
81 (int)numStages, \
82 (int)postShift); \
83 \
84 /* Initialize the BIQUAD Instances */ \
85 arm_biquad_cascade_##config_suffix##_init_##suffix( \
86 &biquad_inst_fut, numStages, \
87 (output_type*)filtering_coeffs_b_##suffix, \
88 (void *) filtering_pState, postShift); \
89 \
90 JTEST_COUNT_CYCLES( \
91 arm_biquad_cascade_##config_suffix##speed##_##suffix( \
92 &biquad_inst_fut, \
93 (void *) filtering_##suffix##_inputs, \
94 (void *) filtering_output_fut, \
95 blockSize)); \
96 \
97 arm_biquad_cascade_##config_suffix##_init_##suffix( \
98 &biquad_inst_ref, numStages, \
99 (output_type*)filtering_coeffs_b_##suffix, \
100 (void *) filtering_pState, postShift); \
101 \
102 ref_biquad_cascade_##config_suffix##speed##_##suffix( \
103 &biquad_inst_ref, \
104 (void *) filtering_##suffix##_inputs, \
105 (void *) filtering_output_ref, \
106 blockSize); \
107 \
108 FILTERING_SNR_COMPARE_INTERFACE( \
109 blockSize, \
110 output_type)))); \
111 \
112 return JTEST_TEST_PASSED; \
113 }
114
115
116JTEST_DEFINE_TEST(arm_biquad_cas_df1_32x64_q31_test,
117 arm_biquad_cas_df1_32x64_q31)
118{
119 arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_fut = { 0 };
120 arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_ref = { 0 };
121
122 TEMPLATE_DO_ARR_DESC(
123 blocksize_idx, uint32_t, blockSize, filtering_blocksizes
124 ,
125 TEMPLATE_DO_ARR_DESC(
126 numstages_idx, uint16_t, numStages, filtering_numstages
127 ,
128 TEMPLATE_DO_ARR_DESC(
129 postshifts_idx, uint8_t, postShift, filtering_postshifts
130 ,
131 /* Initialize the BIQUAD Instances */
132 arm_biquad_cas_df1_32x64_init_q31(
133 &biquad_inst_fut, numStages,
134 (q31_t*)filtering_coeffs_b_q31,
135 (void *) filtering_pState, postShift);
136
137 /* Display test parameter values */
138 JTEST_DUMP_STRF("Block Size: %d\n"
139 "Number of Stages: %d\n",
140 (int)blockSize,
141 (int)numStages);
142
143 JTEST_COUNT_CYCLES(
144 arm_biquad_cas_df1_32x64_q31(
145 &biquad_inst_fut,
146 (void *) filtering_q31_inputs,
147 (void *) filtering_output_fut,
148 blockSize));
149
150 arm_biquad_cas_df1_32x64_init_q31(
151 &biquad_inst_ref, numStages,
152 (q31_t*)filtering_coeffs_b_q31,
153 (void *) filtering_pState, postShift);
154
155 ref_biquad_cas_df1_32x64_q31(
156 &biquad_inst_ref,
157 (void *) filtering_q31_inputs,
158 (void *) filtering_output_ref,
159 blockSize);
160
161 FILTERING_SNR_COMPARE_INTERFACE(
162 blockSize,
163 q31_t))));
164
165 return JTEST_TEST_PASSED;
166}
167
168JTEST_DEFINE_TEST(arm_biquad_cascade_df2T_f64_test,
169 arm_biquad_cascade_df2T_f64)
170{
171 arm_biquad_cascade_df2T_instance_f64 biquad_inst_fut = { 0 };
172 arm_biquad_cascade_df2T_instance_f64 biquad_inst_ref = { 0 };
173
174 TEMPLATE_DO_ARR_DESC(
175 blocksize_idx, uint32_t, blockSize, filtering_blocksizes
176 ,
177 TEMPLATE_DO_ARR_DESC(
178 numstages_idx, uint16_t, numStages, filtering_numstages
179 ,
180 /* Display test parameter values */
181 JTEST_DUMP_STRF("Block Size: %d\n"
182 "Number of Stages: %d\n",
183 (int)blockSize,
184 (int)numStages);
185
186 /* Initialize the BIQUAD Instances */
187 arm_biquad_cascade_df2T_init_f64(
188 &biquad_inst_fut, numStages,
189 (float64_t*)filtering_coeffs_b_f64,
190 (void *) filtering_pState);
191
192 JTEST_COUNT_CYCLES(
193 arm_biquad_cascade_df2T_f64(
194 &biquad_inst_fut,
195 (void *) filtering_f64_inputs,
196 (void *) filtering_output_fut,
197 blockSize));
198
199 arm_biquad_cascade_df2T_init_f64(
200 &biquad_inst_ref, numStages,
201 (float64_t*)filtering_coeffs_b_f64,
202 (void *) filtering_pState);
203
204 ref_biquad_cascade_df2T_f64(
205 &biquad_inst_ref,
206 (void *) filtering_f64_inputs,
207 (void *) filtering_output_ref,
208 blockSize);
209
210 FILTERING_DBL_SNR_COMPARE_INTERFACE(
211 blockSize,
212 float64_t)));
213
214 return JTEST_TEST_PASSED;
215}
216
217
218BIQUAD_DEFINE_TEST(f32,arm_biquad_casd_df1_inst_f32, df1,float32_t);
219BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_df2T_instance_f32,df2T,float32_t);
220BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_stereo_df2T_instance_f32,stereo_df2T,float32_t);
221BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,,q31_t);
222BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,,q15_t);
223BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,_fast,q31_t);
224BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,_fast,q15_t);
225
226/*--------------------------------------------------------------------------------*/
227/* Collect all tests in a group. */
228/*--------------------------------------------------------------------------------*/
229
230JTEST_DEFINE_GROUP(biquad_tests)
231{
232 /*
233 To skip a test, comment it out.
234 */
235 JTEST_TEST_CALL(arm_biquad_cascade_df1_f32_test);
236 JTEST_TEST_CALL(arm_biquad_cascade_df2T_f32_test);
237 JTEST_TEST_CALL(arm_biquad_cascade_stereo_df2T_f32_test);
238 JTEST_TEST_CALL(arm_biquad_cascade_df2T_f64_test);
239 JTEST_TEST_CALL(arm_biquad_cascade_df1_q31_test);
240 JTEST_TEST_CALL(arm_biquad_cascade_df1_q15_test);
241 JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q31_test);
242 JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q15_test);
243 JTEST_TEST_CALL(arm_biquad_cas_df1_32x64_q31_test);
244}
Note: See TracBrowser for help on using the repository browser.