|
|
|
|
@ -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 );
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|