diff --git a/Source/TransformFunctions/arm_rfft_fast_init_f32.c b/Source/TransformFunctions/arm_rfft_fast_init_f32.c index 77c395b2..7b74c90d 100644 --- a/Source/TransformFunctions/arm_rfft_fast_init_f32.c +++ b/Source/TransformFunctions/arm_rfft_fast_init_f32.c @@ -247,76 +247,40 @@ arm_status arm_rfft_fast_init_f32( arm_rfft_fast_instance_f32 * S, uint16_t fftLen) { - arm_cfft_instance_f32 * Sint; - /* Initialise the default arm status */ - arm_status status = ARM_MATH_SUCCESS; - /* Initialise the FFT length */ - Sint = &(S->Sint); - Sint->fftLen = fftLen/2; - S->fftLenRFFT = fftLen; + typedef arm_status(*fft_init_ptr)( arm_rfft_fast_instance_f32 *); + fft_init_ptr fptr = 0x0; - /* Initializations of structure parameters depending on the FFT length */ - switch (Sint->fftLen) + switch (fftLen) { + case 4096U: + fptr = arm_rfft_4096_fast_init_f32; + break; case 2048U: - /* Initializations of structure parameters for 2048 point FFT */ - /* Initialise the bit reversal table length */ - Sint->bitRevLength = ARMBITREVINDEXTABLE_2048_TABLE_LENGTH; - /* Initialise the bit reversal table pointer */ - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable2048; - /* Initialise the Twiddle coefficient pointers */ - Sint->pTwiddle = (float32_t *) twiddleCoef_2048; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_4096; + fptr = arm_rfft_2048_fast_init_f32; break; case 1024U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_1024_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable1024; - Sint->pTwiddle = (float32_t *) twiddleCoef_1024; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_2048; + fptr = arm_rfft_1024_fast_init_f32; break; case 512U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_512_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable512; - Sint->pTwiddle = (float32_t *) twiddleCoef_512; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_1024; + fptr = arm_rfft_512_fast_init_f32; break; case 256U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_256_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable256; - Sint->pTwiddle = (float32_t *) twiddleCoef_256; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_512; + fptr = arm_rfft_256_fast_init_f32; break; case 128U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_128_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable128; - Sint->pTwiddle = (float32_t *) twiddleCoef_128; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_256; + fptr = arm_rfft_128_fast_init_f32; break; case 64U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_64_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable64; - Sint->pTwiddle = (float32_t *) twiddleCoef_64; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_128; + fptr = arm_rfft_64_fast_init_f32; break; case 32U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_32_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable32; - Sint->pTwiddle = (float32_t *) twiddleCoef_32; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_64; - break; - case 16U: - Sint->bitRevLength = ARMBITREVINDEXTABLE_16_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable16; - Sint->pTwiddle = (float32_t *) twiddleCoef_16; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_32; - break; - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; + fptr = arm_rfft_32_fast_init_f32; break; } - return (status); + if( ! fptr ) return ARM_MATH_ARGUMENT_ERROR; + return fptr( S ); + } /**