From aa38e5c1f48e31213ee349aa5cd6f06c85bda70d Mon Sep 17 00:00:00 2001
From: android <android@lingyun.com>
Date: Tue, 25 Jun 2024 21:49:39 +0800
Subject: [PATCH] Add GD32F103RCT6 ADC converter board SDK source code

---
 mcu_sdk/gd32f103/rk_eFire/Board/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c |  197 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 197 insertions(+), 0 deletions(-)

diff --git a/mcu_sdk/gd32f103/rk_eFire/Board/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c b/mcu_sdk/gd32f103/rk_eFire/Board/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c
new file mode 100644
index 0000000..aae5a42
--- /dev/null
+++ b/mcu_sdk/gd32f103/rk_eFire/Board/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c
@@ -0,0 +1,197 @@
+#include "jtest.h"
+#include "ref.h"
+#include "arm_math.h"
+#include "arr_desc.h"
+#include "transform_templates.h"
+#include "transform_test_data.h"
+#include "type_abbrev.h"
+#include <math.h>               /* sqrtf() */
+
+/*--------------------------------------------------------------------------------*/
+/* Aliases to aid macro expansion */
+/*--------------------------------------------------------------------------------*/
+#define ref_sqrt_f32(x) sqrtf(x)
+
+/*--------------------------------------------------------------------------------*/
+/* Test Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/*
+DCT function test template. Arguments are: function configuration suffix
+(q7/q15/q31/f32) and input type (q7_t/q15_t/q31_t/float32_t)
+*/
+#define DCT4_DEFINE_TEST(suffix, input_type)                            \
+    JTEST_DEFINE_TEST(arm_dct4_##suffix##_test, arm_dct4_##suffix)      \
+    {                                                                   \
+        CONCAT(arm_dct4_instance_,suffix) dct4_inst_fut        = {0};   \
+        CONCAT(arm_rfft_instance_,suffix) rfft_inst_fut        = {0};   \
+        CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_fut = {0};   \
+                                                                        \
+        CONCAT(arm_dct4_instance_,suffix) dct4_inst_ref        = {0};   \
+        CONCAT(arm_rfft_instance_,suffix) rfft_inst_ref        = {0};   \
+        CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_ref = {0};   \
+                                                                        \
+        /* Go through all dct lengths */                                \
+        TEMPLATE_DO_ARR_DESC(                                           \
+            fftlen_idx, uint16_t, fftlen, transform_dct_fftlens         \
+            ,                                                           \
+                                                                        \
+            float32_t normalize_f32 =                                   \
+                  ref_sqrt_f32((2.0f/(float32_t)fftlen));               \
+            input_type normalize;                                       \
+                                                                        \
+            /* Calculate normalized DCT4 value for input_type. */       \
+            TEST_CONVERT_FLOAT_TO(&normalize_f32, &normalize,           \
+                                  1, input_type);                       \
+                                                                        \
+            /* Initialize the DCT4, RFFT, and CFFT instances */         \
+            arm_dct4_init_##suffix(                                     \
+                &dct4_inst_fut, &rfft_inst_fut, &cfft_inst_fut,         \
+                fftlen,                                                 \
+                fftlen/2,                                               \
+                normalize);                                             \
+                                                                        \
+            arm_dct4_init_##suffix(                                     \
+                &dct4_inst_ref, &rfft_inst_ref, &cfft_inst_ref,         \
+                fftlen,                                                 \
+                fftlen/2,                                               \
+                normalize);                                             \
+                                                                        \
+             memset( transform_fft_input_fut,0,                         \
+                     fftlen*sizeof(input_type));                        \
+                                                                        \
+            TRANSFORM_PREPARE_INPLACE_INPUTS(                           \
+                transform_fft_##suffix##_inputs,                        \
+                fftlen * sizeof(input_type));                           \
+                                                                        \
+            /* Display parameter values */                              \
+            JTEST_DUMP_STRF("Block Size: %d\n",                         \
+                         (int)fftlen);                                  \
+                                                                        \
+            /* Input provided as a scratch buffer. Inplace input is     \
+             * actual input. Display cycle count and run test*/         \
+            JTEST_COUNT_CYCLES(                                         \
+                arm_dct4_##suffix(                                      \
+                    &dct4_inst_fut,                                     \
+                    (void *) transform_fft_input_fut,                   \
+                    (void *) transform_fft_inplace_input_fut));         \
+                                                                        \
+             memset( transform_fft_input_ref,0,                         \
+                     fftlen*sizeof(input_type));                        \
+                                                                        \
+            /* Input provided as a scratch buffer. Inplace input is */  \
+            /* actual input. */                                         \
+            ref_dct4_##suffix(                                          \
+                &dct4_inst_ref,                                         \
+                (void *) transform_fft_input_ref,                       \
+                (void *) transform_fft_inplace_input_ref);              \
+                                                                        \
+            /* Test correctness */                                      \
+            DCT_TRANSFORM_SNR_COMPARE_INTERFACE(                        \
+                fftlen,                                                 \
+                input_type));                                           \
+                                                                        \
+        return JTEST_TEST_PASSED;                                       \
+    }
+
+/*
+  DCT function test template for fixed point data. Arguments are: function
+  suffix (q7/q15/q31/f32), input type (q7_t/q15_t/q31_t/float32_t) and prefix
+  (dct_4)
+*/
+#define DCT4_FIXED_POINT_DEFINE_TEST(suffix, input_type, prefix)           \
+    JTEST_DEFINE_TEST(arm_dct4_##suffix##_test, arm_dct4_##suffix)         \
+    {                                                                      \
+        CONCAT(arm_dct4_instance_,suffix) dct4_inst_fut        = {0};      \
+        CONCAT(arm_rfft_instance_,suffix) rfft_inst_fut        = {0};      \
+        CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_fut = {0};      \
+                                                                           \
+        CONCAT(arm_dct4_instance_,suffix) dct4_inst_ref        = {0};      \
+        CONCAT(arm_rfft_instance_,suffix) rfft_inst_ref        = {0};      \
+        CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_ref = {0};      \
+                                                                           \
+        TEMPLATE_DO_ARR_DESC(                                              \
+            fftlen_idx, uint16_t, fftlen, transform_dct_fftlens            \
+            ,                                                              \
+            uint32_t i;                                                    \
+            float32_t normalize_f32 =                                      \
+                  ref_sqrt_f32((2.0f/(float32_t)fftlen));                  \
+            input_type normalize;                                          \
+                                                                           \
+            /* Calculate normalized DCT4 value for input_type. */          \
+            TEST_CONVERT_FLOAT_TO(&normalize_f32, &normalize,              \
+                                  1, input_type);                          \
+                                                                           \
+            /* Initialize the DCT4, RFFT, and CFFT instances */            \
+            arm_dct4_init_##suffix(                                        \
+                &dct4_inst_fut, &rfft_inst_fut, &cfft_inst_fut,            \
+                fftlen,                                                    \
+                fftlen/2,                                                  \
+                normalize);                                                \
+                                                                           \
+            arm_dct4_init_##suffix(                                        \
+                &dct4_inst_ref, &rfft_inst_ref, &cfft_inst_ref,            \
+                fftlen,                                                    \
+                fftlen/2,                                                  \
+                normalize);                                                \
+                                                                           \
+             /* Input samples need to be downscaled by 1 bit to            \
+              * avoid saturations in the Q31 DCT process,                  \
+              * as the conversion from DCT2 to DCT4 involves               \
+              * one subtraction.                                           \
+              */                                                           \
+             for(i=0; i < fftlen; i++)                                     \
+             {                                                             \
+               ((input_type*)transform_fft_inplace_input_fut)[i] =         \
+                        prefix##transform_fft_##suffix##_inputs[i] >> 1;   \
+               ((input_type*)transform_fft_inplace_input_ref)[i] =         \
+                        prefix##transform_fft_##suffix##_inputs[i] >> 1;   \
+             }                                                             \
+                                                                           \
+             memset( transform_fft_input_fut,0,                            \
+                     fftlen*sizeof(input_type));                           \
+                                                                           \
+             /* Display test parameter values */                           \
+            JTEST_DUMP_STRF("Block Size: %d\n",                            \
+                         (int)fftlen);                                     \
+                                                                           \
+            /* Input provided as a scratch buffer. Inplace input is        \
+             * actual input. */                                            \
+            JTEST_COUNT_CYCLES(                                            \
+                arm_dct4_##suffix(                                         \
+                    &dct4_inst_fut,                                        \
+                    (void *) transform_fft_input_fut,                      \
+                    (void *) transform_fft_inplace_input_fut));            \
+                                                                           \
+             memset( transform_fft_input_ref,0,                            \
+                     fftlen*sizeof(input_type));                           \
+                                                                           \
+            /* Input provided as a scratch buffer. Inplace input is */     \
+            /* actual input. */                                            \
+            ref_dct4_##suffix(                                             \
+                &dct4_inst_ref,                                            \
+                (void *) transform_fft_input_ref,                          \
+                (void *) transform_fft_inplace_input_ref);                 \
+                                                                           \
+            /* Test correctness */                                         \
+            DCT_TRANSFORM_SNR_COMPARE_INTERFACE(                           \
+                fftlen,                                                    \
+                input_type));                                              \
+                                                                           \
+        return JTEST_TEST_PASSED;                                          \
+    }
+
+DCT4_DEFINE_TEST(f32, float32_t);
+DCT4_FIXED_POINT_DEFINE_TEST(q31, q31_t,);
+DCT4_FIXED_POINT_DEFINE_TEST(q15, q15_t, dct4_);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(dct4_tests)
+{
+    JTEST_TEST_CALL(arm_dct4_f32_test);
+    JTEST_TEST_CALL(arm_dct4_q31_test);
+    JTEST_TEST_CALL(arm_dct4_q15_test);
+}

--
Gitblit v1.9.1