| #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.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_common_tables.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_const_structs.h" |
|
|
| #if defined(ARM_MATH_MVEI) && !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.h" |
|
|
|
|
| arm_status arm_cfft_radix4by2_rearrange_twiddles_q15(arm_cfft_instance_q15 *S, int twidCoefModifier) |
| { |
| |
| switch (S->fftLen >> (twidCoefModifier - 1)) { |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_4096) && defined(ARM_TABLE_TWIDDLECOEF_Q15_4096)) |
| case 4096U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_q15; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_q15; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_4096_q15; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_4096_q15; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_4096_q15; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_4096_q15; |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_1024) && defined(ARM_TABLE_TWIDDLECOEF_Q15_1024)) || (defined(ARM_TABLE_BITREVIDX_FXT_2048) && defined(ARM_TABLE_TWIDDLECOEF_Q15_2048)) |
| case 1024U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_q15; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_q15; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_1024_q15; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_1024_q15; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_1024_q15; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_1024_q15; |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_256) && defined(ARM_TABLE_TWIDDLECOEF_Q15_256)) || (defined(ARM_TABLE_BITREVIDX_FXT_512) && defined(ARM_TABLE_TWIDDLECOEF_Q15_512)) |
| case 256U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_q15; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_q15; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_256_q15; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_256_q15; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_256_q15; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_256_q15; |
|
|
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_64) && defined(ARM_TABLE_TWIDDLECOEF_Q15_64)) || (defined(ARM_TABLE_BITREVIDX_FXT_128) && defined(ARM_TABLE_TWIDDLECOEF_Q15_128)) |
| case 64U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_q15; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_q15; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_64_q15; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_64_q15; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_64_q15; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_64_q15; |
| break; |
| #endif |
| |
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_BITREVIDX_FXT_16) && defined(ARM_TABLE_TWIDDLECOEF_Q15_16)) || (defined(ARM_TABLE_BITREVIDX_FXT_32) && defined(ARM_TABLE_TWIDDLECOEF_Q15_32)) |
| case 16U: |
| S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_q15; |
| S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_q15; |
|
|
| S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_16_q15; |
| S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_16_q15; |
|
|
| S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_16_q15; |
| S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_16_q15; |
| break; |
| #endif |
| |
| default: |
| return(ARM_MATH_ARGUMENT_ERROR); |
| break; |
| |
| } |
|
|
| return(ARM_MATH_SUCCESS); |
|
|
| } |
|
|
|
|
|
|
| arm_status arm_cfft_init_q15( |
| arm_cfft_instance_q15 * 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_Q15_4096)) |
| case 4096U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_4096; |
| S->pTwiddle = (q15_t *)twiddleCoef_4096_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_2048)) |
| |
| case 2048U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048; |
| S->pTwiddle = (q15_t *)twiddleCoef_2048_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_1024)) |
| |
| case 1024U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024; |
| S->pTwiddle = (q15_t *)twiddleCoef_1024_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_512)) |
| |
| case 512U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512; |
| S->pTwiddle = (q15_t *)twiddleCoef_512_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_256)) |
| case 256U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256; |
| S->pTwiddle = (q15_t *)twiddleCoef_256_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_128)) |
| case 128U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128; |
| S->pTwiddle = (q15_t *)twiddleCoef_128_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_64)) |
| case 64U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64; |
| S->pTwiddle = (q15_t *)twiddleCoef_64_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_32)) |
| case 32U: |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32; |
| S->pTwiddle = (q15_t *)twiddleCoef_32_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(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_Q15_16)) |
| case 16U: |
| |
| S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH; |
| S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16; |
| S->pTwiddle = (q15_t *)twiddleCoef_16_q15; |
| status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 1); |
| break; |
| #endif |
| |
| default: |
| |
| status = ARM_MATH_ARGUMENT_ERROR; |
| break; |
| } |
| |
| |
| return (status); |
| } |
| #else |
| arm_status arm_cfft_init_q15( |
| arm_cfft_instance_q15 * 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_Q15_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) |
| |
| case 4096U: |
| |
| FFTINIT(q15,4096); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) |
| |
| case 2048U: |
| |
| FFTINIT(q15,2048); |
|
|
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) |
| |
| case 1024U: |
| |
| FFTINIT(q15,1024); |
|
|
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) |
| |
| case 512U: |
| |
| FFTINIT(q15,512); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) |
| case 256U: |
| FFTINIT(q15,256); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) |
| case 128U: |
| FFTINIT(q15,128); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) |
| case 64U: |
| FFTINIT(q15,64); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) |
| case 32U: |
| FFTINIT(q15,32); |
| break; |
| #endif |
|
|
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) |
| case 16U: |
| |
| FFTINIT(q15,16); |
| break; |
| #endif |
|
|
| default: |
| |
| status = ARM_MATH_ARGUMENT_ERROR; |
| break; |
| } |
|
|
|
|
| return (status); |
| } |
| #endif |
|
|
| |
| |
| |
|
|
| #endif |
|
|