| #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 FIR_DEFINE_TEST(suffix, config_suffix, output_type) \ |
| JTEST_DEFINE_TEST(arm_fir##config_suffix##_##suffix##_test, \ |
| arm_fir##config_suffix##_##suffix) \ |
| { \ |
| arm_fir_instance_##suffix fir_inst_fut = { 0 }; \ |
| arm_fir_instance_##suffix fir_inst_ref = { 0 }; \ |
| \ |
| TEMPLATE_DO_ARR_DESC( \ |
| blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| numtaps_idx, uint16_t, numTaps, filtering_numtaps \ |
| , \ |
| /* Initialize the FIR Instances */ \ |
| arm_fir_init_##suffix( \ |
| &fir_inst_fut, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, blockSize); \ |
| \ |
| /* Display test parameter values */ \ |
| JTEST_DUMP_STRF("Block Size: %d\n" \ |
| "Number of Taps: %d\n", \ |
| (int)blockSize, \ |
| (int)numTaps); \ |
| \ |
| JTEST_COUNT_CYCLES( \ |
| arm_fir##config_suffix##_##suffix( \ |
| &fir_inst_fut, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_fut, \ |
| blockSize)); \ |
| \ |
| arm_fir_init_##suffix( \ |
| &fir_inst_ref, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, blockSize); \ |
| \ |
| ref_fir##config_suffix##_##suffix( \ |
| &fir_inst_ref, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_ref, \ |
| blockSize); \ |
| \ |
| FILTERING_SNR_COMPARE_INTERFACE( \ |
| blockSize, \ |
| output_type))); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| #define FIR_INTERPOLATE_DEFINE_TEST(suffix, output_type) \ |
| JTEST_DEFINE_TEST(arm_fir_interpolate_##suffix##_test, \ |
| arm_fir_interpolate_##suffix) \ |
| { \ |
| arm_fir_interpolate_instance_##suffix fir_inst_fut = { 0 }; \ |
| arm_fir_interpolate_instance_##suffix fir_inst_ref = { 0 }; \ |
| \ |
| TEMPLATE_DO_ARR_DESC( \ |
| blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| numtaps_idx, uint16_t, numTaps, filtering_numtaps2 \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| L_idx, uint8_t, L, filtering_Ls \ |
| , \ |
| /* Display test parameter values */ \ |
| JTEST_DUMP_STRF("Block Size: %d\n" \ |
| "Number of Taps: %d\n" \ |
| "Upsample factor: %d\n", \ |
| (int)blockSize, \ |
| (int)numTaps, \ |
| (int)L); \ |
| \ |
| /* Initialize the FIR Instances */ \ |
| arm_fir_interpolate_init_##suffix( \ |
| &fir_inst_fut, L, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, blockSize); \ |
| \ |
| JTEST_COUNT_CYCLES( \ |
| arm_fir_interpolate_##suffix( \ |
| &fir_inst_fut, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_fut, \ |
| blockSize)); \ |
| \ |
| arm_fir_interpolate_init_##suffix( \ |
| &fir_inst_ref, L, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, blockSize); \ |
| \ |
| ref_fir_interpolate_##suffix( \ |
| &fir_inst_ref, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_ref, \ |
| blockSize); \ |
| \ |
| FILTERING_SNR_COMPARE_INTERFACE( \ |
| blockSize * (uint32_t)L, \ |
| output_type)))); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| #define FIR_DECIMATE_DEFINE_TEST(suffix, config_suffix, output_type) \ |
| JTEST_DEFINE_TEST(arm_fir_decimate##config_suffix##_##suffix##_test, \ |
| arm_fir_decimate##config_suffix##_##suffix) \ |
| { \ |
| arm_fir_decimate_instance_##suffix fir_inst_fut = { 0 }; \ |
| arm_fir_decimate_instance_##suffix fir_inst_ref = { 0 }; \ |
| \ |
| TEMPLATE_DO_ARR_DESC( \ |
| blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| numtaps_idx, uint16_t, numTaps, filtering_numtaps \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| M_idx, uint8_t, M, filtering_Ms \ |
| , \ |
| if (blockSize % M == 0) \ |
| { \ |
| /* Display test parameter values */ \ |
| JTEST_DUMP_STRF("Block Size: %d\n" \ |
| "Number of Taps: %d\n" \ |
| "Decimation Factor: %d\n", \ |
| (int)blockSize, \ |
| (int)numTaps, \ |
| (int)M); \ |
| \ |
| /* Initialize the FIR Instances */ \ |
| arm_fir_decimate_init_##suffix( \ |
| &fir_inst_fut, numTaps, M, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, blockSize); \ |
| \ |
| JTEST_COUNT_CYCLES( \ |
| arm_fir_decimate##config_suffix##_##suffix( \ |
| &fir_inst_fut, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_fut, \ |
| blockSize)); \ |
| \ |
| arm_fir_decimate_init_##suffix( \ |
| &fir_inst_ref, numTaps, M, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, blockSize); \ |
| \ |
| ref_fir_decimate##config_suffix##_##suffix( \ |
| &fir_inst_ref, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_ref, \ |
| blockSize); \ |
| \ |
| FILTERING_SNR_COMPARE_INTERFACE( \ |
| blockSize / M, \ |
| output_type); \ |
| }))); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| #define FIR_LATTICE_DEFINE_TEST(suffix, output_type) \ |
| JTEST_DEFINE_TEST(arm_fir_lattice_##suffix##_test, \ |
| arm_fir_lattice_##suffix) \ |
| { \ |
| arm_fir_lattice_instance_##suffix fir_inst_fut = { 0 }; \ |
| arm_fir_lattice_instance_##suffix fir_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 FIR Instances */ \ |
| arm_fir_lattice_init_##suffix( \ |
| &fir_inst_fut, numStages, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState); \ |
| \ |
| JTEST_COUNT_CYCLES( \ |
| arm_fir_lattice_##suffix( \ |
| &fir_inst_fut, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_fut, \ |
| blockSize)); \ |
| \ |
| arm_fir_lattice_init_##suffix( \ |
| &fir_inst_ref, numStages, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState); \ |
| \ |
| ref_fir_lattice_##suffix( \ |
| &fir_inst_ref, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_ref, \ |
| blockSize); \ |
| \ |
| FILTERING_SNR_COMPARE_INTERFACE( \ |
| blockSize, \ |
| output_type))); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| |
| #define FIR_SPARSE_DEFINE_TEST(suffix, output_type) \ |
| JTEST_DEFINE_TEST(arm_fir_sparse_##suffix##_test, \ |
| arm_fir_sparse_##suffix) \ |
| { \ |
| arm_fir_sparse_instance_##suffix fir_inst_fut = { 0 }; \ |
| arm_fir_sparse_instance_##suffix fir_inst_ref = { 0 }; \ |
| \ |
| TEMPLATE_DO_ARR_DESC( \ |
| blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| numtaps_idx, uint16_t, numTaps, filtering_numtaps \ |
| , \ |
| /* Display test parameter values */ \ |
| JTEST_DUMP_STRF("Block Size: %d\n" \ |
| "Number of Taps: %d\n" \ |
| "Tap Delay: %d\n", \ |
| (int)blockSize, \ |
| (int)numTaps, \ |
| (int)FILTERING_MAX_TAP_DELAY); \ |
| \ |
| /* Initialize the FIR Instances */ \ |
| arm_fir_sparse_init_##suffix( \ |
| &fir_inst_fut, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, \ |
| (int32_t*)filtering_tap_delay, \ |
| FILTERING_MAX_TAP_DELAY, blockSize); \ |
| \ |
| JTEST_COUNT_CYCLES( \ |
| arm_fir_sparse_##suffix( \ |
| &fir_inst_fut, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_fut, \ |
| (void *) filtering_scratch, \ |
| blockSize)); \ |
| \ |
| arm_fir_sparse_init_##suffix( \ |
| &fir_inst_ref, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, \ |
| (int32_t*)filtering_tap_delay, \ |
| FILTERING_MAX_TAP_DELAY, blockSize); \ |
| \ |
| ref_fir_sparse_##suffix( \ |
| &fir_inst_ref, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_ref, \ |
| (void *) filtering_scratch, \ |
| blockSize); \ |
| \ |
| FILTERING_SNR_COMPARE_INTERFACE( \ |
| blockSize, \ |
| output_type))); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| #define FIR_SPARSE2_DEFINE_TEST(suffix, output_type) \ |
| JTEST_DEFINE_TEST(arm_fir_sparse_##suffix##_test, \ |
| arm_fir_sparse_##suffix) \ |
| { \ |
| arm_fir_sparse_instance_##suffix fir_inst_fut = { 0 }; \ |
| arm_fir_sparse_instance_##suffix fir_inst_ref = { 0 }; \ |
| \ |
| TEMPLATE_DO_ARR_DESC( \ |
| blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ |
| , \ |
| TEMPLATE_DO_ARR_DESC( \ |
| numtaps_idx, uint16_t, numTaps, filtering_numtaps \ |
| , \ |
| /* Display test parameter values */ \ |
| JTEST_DUMP_STRF("Block Size: %d\n" \ |
| "Number of Taps: %d\n" \ |
| "Tap Delay: %d\n", \ |
| (int)blockSize, \ |
| (int)numTaps, \ |
| (int)FILTERING_MAX_TAP_DELAY); \ |
| \ |
| /* Initialize the FIR Instances */ \ |
| arm_fir_sparse_init_##suffix( \ |
| &fir_inst_fut, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, \ |
| (int32_t*)filtering_tap_delay, \ |
| FILTERING_MAX_TAP_DELAY, blockSize); \ |
| \ |
| JTEST_COUNT_CYCLES( \ |
| arm_fir_sparse_##suffix( \ |
| &fir_inst_fut, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_fut, \ |
| (void *) filtering_scratch, \ |
| (void *) filtering_scratch2, \ |
| blockSize)); \ |
| \ |
| arm_fir_sparse_init_##suffix( \ |
| &fir_inst_ref, numTaps, \ |
| (output_type*)filtering_coeffs_##suffix, \ |
| (void *) filtering_pState, \ |
| (int32_t*)filtering_tap_delay, \ |
| FILTERING_MAX_TAP_DELAY, blockSize); \ |
| \ |
| ref_fir_sparse_##suffix( \ |
| &fir_inst_ref, \ |
| (void *) filtering_##suffix##_inputs, \ |
| (void *) filtering_output_ref, \ |
| (void *) filtering_scratch, \ |
| (void *) filtering_scratch2, \ |
| blockSize); \ |
| \ |
| FILTERING_SNR_COMPARE_INTERFACE( \ |
| blockSize, \ |
| output_type))); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| FIR_DEFINE_TEST(f32,,float32_t); |
| FIR_DEFINE_TEST(q31,,q31_t); |
| FIR_DEFINE_TEST(q15,,q15_t); |
| FIR_DEFINE_TEST(q31,_fast,q31_t); |
| FIR_DEFINE_TEST(q15,_fast,q15_t); |
| FIR_DEFINE_TEST(q7,,q7_t); |
| |
| FIR_LATTICE_DEFINE_TEST(f32,float32_t); |
| FIR_LATTICE_DEFINE_TEST(q31,q31_t); |
| FIR_LATTICE_DEFINE_TEST(q15,q15_t); |
| |
| FIR_INTERPOLATE_DEFINE_TEST(f32,float32_t); |
| FIR_INTERPOLATE_DEFINE_TEST(q31,q31_t); |
| FIR_INTERPOLATE_DEFINE_TEST(q15,q15_t); |
| |
| FIR_DECIMATE_DEFINE_TEST(f32,,float32_t); |
| FIR_DECIMATE_DEFINE_TEST(q31,,q31_t); |
| FIR_DECIMATE_DEFINE_TEST(q15,,q15_t); |
| FIR_DECIMATE_DEFINE_TEST(q31,_fast,q31_t); |
| FIR_DECIMATE_DEFINE_TEST(q15,_fast,q15_t); |
| |
| FIR_SPARSE_DEFINE_TEST(f32,float32_t); |
| FIR_SPARSE_DEFINE_TEST(q31,q31_t); |
| FIR_SPARSE2_DEFINE_TEST(q15,q15_t); |
| FIR_SPARSE2_DEFINE_TEST(q7,q7_t); |
| |
| /*--------------------------------------------------------------------------------*/ |
| /* Collect all tests in a group. */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| JTEST_DEFINE_GROUP(fir_tests) |
| { |
| /* |
| To skip a test, comment it out. |
| */ |
| JTEST_TEST_CALL(arm_fir_f32_test); |
| JTEST_TEST_CALL(arm_fir_q31_test); |
| JTEST_TEST_CALL(arm_fir_q15_test); |
| JTEST_TEST_CALL(arm_fir_q7_test); |
| JTEST_TEST_CALL(arm_fir_fast_q31_test); |
| JTEST_TEST_CALL(arm_fir_fast_q15_test); |
| |
| JTEST_TEST_CALL(arm_fir_lattice_f32_test); |
| JTEST_TEST_CALL(arm_fir_lattice_q31_test); |
| JTEST_TEST_CALL(arm_fir_lattice_q15_test); |
| |
| JTEST_TEST_CALL(arm_fir_interpolate_f32_test); |
| JTEST_TEST_CALL(arm_fir_interpolate_q31_test); |
| JTEST_TEST_CALL(arm_fir_interpolate_q15_test); |
| |
| JTEST_TEST_CALL(arm_fir_decimate_f32_test); |
| JTEST_TEST_CALL(arm_fir_decimate_q31_test); |
| JTEST_TEST_CALL(arm_fir_decimate_q15_test); |
| JTEST_TEST_CALL(arm_fir_decimate_fast_q31_test); |
| JTEST_TEST_CALL(arm_fir_decimate_fast_q15_test); |
| |
| JTEST_TEST_CALL(arm_fir_sparse_f32_test); |
| JTEST_TEST_CALL(arm_fir_sparse_q31_test); |
| JTEST_TEST_CALL(arm_fir_sparse_q15_test); |
| JTEST_TEST_CALL(arm_fir_sparse_q7_test); |
| } |