| #include "edge-impulse-sdk/dsp/config.hpp" |
| #if EIDSP_LOAD_CMSIS_DSP_SOURCES |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #define FFTINIT(EXT,SIZE) \ |
| S->bitRevLength = arm_cfft_sR_##EXT##_len##SIZE.bitRevLength; \ |
| S->pBitRevTable = arm_cfft_sR_##EXT##_len##SIZE.pBitRevTable; \ |
| S->pTwiddle = arm_cfft_sR_##EXT##_len##SIZE.pTwiddle; |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/transform_functions_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_common_tables_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_const_structs_f16.h" |
|
|
|
|
| #if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) |
|
|
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_vec_fft.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_mve_tables_f16.h" |
|
|
| arm_status arm_cfft_radix4by2_rearrange_twiddles_f16(arm_cfft_instance_f16 *S, int twidCoefModifier) |
| { |
| |
| switch (S->fftLen >> (twidCoefModifier - 1)) { |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \ |
| || defined(ARM_TABLE_TWIDDLECOEF_F16_4096) |
| case 4096U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_f16; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_f16; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_4096_f16; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_4096_f16; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_4096_f16; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_4096_f16; |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \ |
| || defined(ARM_TABLE_TWIDDLECOEF_F16_1024) || defined(ARM_TABLE_TWIDDLECOEF_F16_2048) |
| case 1024U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_f16; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_f16; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_1024_f16; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_1024_f16; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_1024_f16; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_1024_f16; |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \ |
| || defined(ARM_TABLE_TWIDDLECOEF_F16_256) || defined(ARM_TABLE_TWIDDLECOEF_F16_512) |
| case 256U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_f16; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_f16; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_256_f16; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_256_f16; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_256_f16; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_256_f16; |
|
|
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \ |
| || defined(ARM_TABLE_TWIDDLECOEF_F16_64) || defined(ARM_TABLE_TWIDDLECOEF_F16_128) |
| case 64U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_f16; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_f16; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_64_f16; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_64_f16; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_64_f16; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_64_f16; |
| break; |
| #endif |
| |
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \ |
| || defined(ARM_TABLE_TWIDDLECOEF_F16_16) || defined(ARM_TABLE_TWIDDLECOEF_F16_32) |
| case 16U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_f16; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_f16; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_16_f16; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_16_f16; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_16_f16; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_16_f16; |
| break; |
| #endif |
| |
| default: |
| return(ARM_MATH_ARGUMENT_ERROR); |
| break; |
| |
| } |
|
|
| return(ARM_MATH_SUCCESS); |
|
|
| } |
|
|
| arm_status arm_cfft_init_f16( |
| arm_cfft_instance_f16 * S, |
| uint16_t fftLen) |
| { |
|
|
| |
| arm_status status = ARM_MATH_SUCCESS; |
| |
| |
| S->fftLen = fftLen; |
| |
| |
| S->pTwiddle = NULL; |
| |
| |
| |
| switch (S->fftLen) { |
| |
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_4096) && defined(ARM_TABLE_TWIDDLECOEF_F16_4096)) |
| case 4096U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_4096; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_4096; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 1); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_2048) && defined(ARM_TABLE_TWIDDLECOEF_F16_2048)) |
| |
| case 2048U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_2048; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 2); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_1024) && defined(ARM_TABLE_TWIDDLECOEF_F16_1024)) |
| |
| case 1024U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_1024; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 1); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_512) && defined(ARM_TABLE_TWIDDLECOEF_F16_512)) |
| |
| case 512U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_512; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 2); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_256) && defined(ARM_TABLE_TWIDDLECOEF_F16_256)) |
| case 256U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_256; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 1); |
| break; |
| #endif |
| |
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_128) && defined(ARM_TABLE_TWIDDLECOEF_F16_128)) |
| case 128U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_128; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 2); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_64) && defined(ARM_TABLE_TWIDDLECOEF_F16_64)) |
| case 64U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_64; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 1); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_32) && defined(ARM_TABLE_TWIDDLECOEF_F16_32)) |
| case 32U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_32; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 2); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_16) && defined(ARM_TABLE_TWIDDLECOEF_F16_16)) |
| case 16U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16; |
| S->pTwiddle = (float16_t *)twiddleCoefF16_16; |
| status=arm_cfft_radix4by2_rearrange_twiddles_f16(S, 1); |
| break; |
| #endif |
| |
| default: |
| |
| status = ARM_MATH_ARGUMENT_ERROR; |
| break; |
| } |
| |
| |
| return (status); |
| } |
| #else |
|
|
| #if defined(ARM_FLOAT16_SUPPORTED) |
|
|
| arm_status arm_cfft_init_f16( |
| arm_cfft_instance_f16 * S, |
| uint16_t fftLen) |
| { |
| |
| arm_status status = ARM_MATH_SUCCESS; |
|
|
| |
| S->fftLen = fftLen; |
|
|
| |
| S->pTwiddle = NULL; |
|
|
|
|
| |
| switch (S->fftLen) { |
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) |
| |
| case 4096U: |
| |
| FFTINIT(f16,4096); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) |
| |
| case 2048U: |
| |
| FFTINIT(f16,2048); |
|
|
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) |
| |
| case 1024U: |
| |
| FFTINIT(f16,1024); |
|
|
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) |
| |
| case 512U: |
| |
| FFTINIT(f16,512); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) |
| case 256U: |
| FFTINIT(f16,256); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) |
| case 128U: |
| FFTINIT(f16,128); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) |
| case 64U: |
| FFTINIT(f16,64); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) |
| case 32U: |
| FFTINIT(f16,32); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F16_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) |
| case 16U: |
| |
| FFTINIT(f16,16); |
| break; |
| #endif |
|
|
| default: |
| |
| status = ARM_MATH_ARGUMENT_ERROR; |
| break; |
| } |
|
|
|
|
| return (status); |
| } |
| #endif |
| #endif |
|
|
| |
| |
| |
|
|
| #endif |
|
|