summaryrefslogtreecommitdiff
path: root/fw/hid-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/hid-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c')
-rw-r--r--fw/hid-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c244
1 files changed, 244 insertions, 0 deletions
diff --git a/fw/hid-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c b/fw/hid-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c
new file mode 100644
index 0000000..3157d1c
--- /dev/null
+++ b/fw/hid-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c
@@ -0,0 +1,244 @@
+#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+#define BIQUAD_DEFINE_TEST(suffix, instance_name, config_suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##_##suffix##_test, \
+ arm_biquad_cascade_##config_suffix##_##suffix) \
+ { \
+ instance_name biquad_inst_fut = { 0 }; \
+ instance_name biquad_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numstages_idx, uint16_t, numStages, filtering_numstages \
+ , \
+ /* Initialize the BIQUAD Instances */ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_fut, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState); \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Stages: %d\n", \
+ (int)blockSize, \
+ (int)numStages); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_biquad_cascade_##config_suffix##_##suffix( \
+ &biquad_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_ref, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState); \
+ \
+ ref_biquad_cascade_##config_suffix##_##suffix( \
+ &biquad_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(suffix, config_suffix, speed, output_type) \
+ JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##speed##_##suffix##_test, \
+ arm_biquad_cascade_##config_suffix##speed##_##suffix) \
+ { \
+ arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_fut = { 0 }; \
+ arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numstages_idx, uint16_t, numStages, filtering_numstages \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ postshifts_idx, uint8_t, postShift, filtering_postshifts \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Stages: %d\n" \
+ "Post Shift: %d\n", \
+ (int)blockSize, \
+ (int)numStages, \
+ (int)postShift); \
+ \
+ /* Initialize the BIQUAD Instances */ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_fut, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState, postShift); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_biquad_cascade_##config_suffix##speed##_##suffix( \
+ &biquad_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_ref, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState, postShift); \
+ \
+ ref_biquad_cascade_##config_suffix##speed##_##suffix( \
+ &biquad_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type)))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+
+JTEST_DEFINE_TEST(arm_biquad_cas_df1_32x64_q31_test,
+ arm_biquad_cas_df1_32x64_q31)
+{
+ arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_fut = { 0 };
+ arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_ref = { 0 };
+
+ TEMPLATE_DO_ARR_DESC(
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes
+ ,
+ TEMPLATE_DO_ARR_DESC(
+ numstages_idx, uint16_t, numStages, filtering_numstages
+ ,
+ TEMPLATE_DO_ARR_DESC(
+ postshifts_idx, uint8_t, postShift, filtering_postshifts
+ ,
+ /* Initialize the BIQUAD Instances */
+ arm_biquad_cas_df1_32x64_init_q31(
+ &biquad_inst_fut, numStages,
+ (q31_t*)filtering_coeffs_b_q31,
+ (void *) filtering_pState, postShift);
+
+ /* Display test parameter values */
+ JTEST_DUMP_STRF("Block Size: %d\n"
+ "Number of Stages: %d\n",
+ (int)blockSize,
+ (int)numStages);
+
+ JTEST_COUNT_CYCLES(
+ arm_biquad_cas_df1_32x64_q31(
+ &biquad_inst_fut,
+ (void *) filtering_q31_inputs,
+ (void *) filtering_output_fut,
+ blockSize));
+
+ arm_biquad_cas_df1_32x64_init_q31(
+ &biquad_inst_ref, numStages,
+ (q31_t*)filtering_coeffs_b_q31,
+ (void *) filtering_pState, postShift);
+
+ ref_biquad_cas_df1_32x64_q31(
+ &biquad_inst_ref,
+ (void *) filtering_q31_inputs,
+ (void *) filtering_output_ref,
+ blockSize);
+
+ FILTERING_SNR_COMPARE_INTERFACE(
+ blockSize,
+ q31_t))));
+
+ return JTEST_TEST_PASSED;
+}
+
+JTEST_DEFINE_TEST(arm_biquad_cascade_df2T_f64_test,
+ arm_biquad_cascade_df2T_f64)
+{
+ arm_biquad_cascade_df2T_instance_f64 biquad_inst_fut = { 0 };
+ arm_biquad_cascade_df2T_instance_f64 biquad_inst_ref = { 0 };
+
+ TEMPLATE_DO_ARR_DESC(
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes
+ ,
+ TEMPLATE_DO_ARR_DESC(
+ numstages_idx, uint16_t, numStages, filtering_numstages
+ ,
+ /* Display test parameter values */
+ JTEST_DUMP_STRF("Block Size: %d\n"
+ "Number of Stages: %d\n",
+ (int)blockSize,
+ (int)numStages);
+
+ /* Initialize the BIQUAD Instances */
+ arm_biquad_cascade_df2T_init_f64(
+ &biquad_inst_fut, numStages,
+ (float64_t*)filtering_coeffs_b_f64,
+ (void *) filtering_pState);
+
+ JTEST_COUNT_CYCLES(
+ arm_biquad_cascade_df2T_f64(
+ &biquad_inst_fut,
+ (void *) filtering_f64_inputs,
+ (void *) filtering_output_fut,
+ blockSize));
+
+ arm_biquad_cascade_df2T_init_f64(
+ &biquad_inst_ref, numStages,
+ (float64_t*)filtering_coeffs_b_f64,
+ (void *) filtering_pState);
+
+ ref_biquad_cascade_df2T_f64(
+ &biquad_inst_ref,
+ (void *) filtering_f64_inputs,
+ (void *) filtering_output_ref,
+ blockSize);
+
+ FILTERING_DBL_SNR_COMPARE_INTERFACE(
+ blockSize,
+ float64_t)));
+
+ return JTEST_TEST_PASSED;
+}
+
+
+BIQUAD_DEFINE_TEST(f32,arm_biquad_casd_df1_inst_f32, df1,float32_t);
+BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_df2T_instance_f32,df2T,float32_t);
+BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_stereo_df2T_instance_f32,stereo_df2T,float32_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,,q31_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,,q15_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,_fast,q31_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,_fast,q15_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(biquad_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_f32_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df2T_f32_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_stereo_df2T_f32_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df2T_f64_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_q31_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_q15_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q31_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q15_test);
+ JTEST_TEST_CALL(arm_biquad_cas_df1_32x64_q31_test);
+}