108 pDst[i] = pDst[i] << 1;
150 q15_t *pCoefA, *pCoefB;
151 q15_t *pSrc1, *pSrc2;
152 #ifndef ARM_MATH_CM0_FAMILY 159 pCoefA = &pATable[modifier * 2u];
160 pCoefB = &pBTable[modifier * 2u];
163 pSrc2 = &pSrc[(2u * fftLen) - 2u];
165 #ifndef ARM_MATH_CM0_FAMILY 170 pD2 = pDst + (4u * fftLen) - 2;
172 for(i = fftLen - 1; i > 0; i--)
185 #ifndef ARM_MATH_BIG_ENDIAN 204 #ifndef ARM_MATH_BIG_ENDIAN 218 *pD1++ = (
q15_t) outR;
219 *pD1++ = outI >> 16u;
222 pD2[0] = (
q15_t) outR;
223 pD2[1] = -(outI >> 16u);
227 pCoefB = pCoefB + (2u * modifier);
228 pCoefA = pCoefA + (2u * modifier);
231 pDst[2u * fftLen] = (pSrc[0] - pSrc[1]) >> 1;
232 pDst[(2u * fftLen) + 1u] = 0;
234 pDst[0] = (pSrc[0] + pSrc[1]) >> 1;
250 outR = *pSrc1 * *pCoefA;
251 outR = outR - (*(pSrc1 + 1) * *(pCoefA + 1));
252 outR = outR + (*pSrc2 * *pCoefB);
253 outR = (outR + (*(pSrc2 + 1) * *(pCoefB + 1))) >> 16;
261 outI = *pSrc2 * *(pCoefB + 1);
262 outI = outI - (*(pSrc2 + 1) * *pCoefB);
263 outI = outI + (*(pSrc1 + 1) * *pCoefA);
264 outI = outI + (*pSrc1 * *(pCoefA + 1));
271 pDst[2u * i] = (
q15_t) outR;
272 pDst[(2u * i) + 1u] = outI >> 16u;
275 pDst[(4u * fftLen) - (2u * i)] = (
q15_t) outR;
276 pDst[((4u * fftLen) - (2u * i)) + 1u] = -(outI >> 16u);
279 pCoefB = pCoefB + (2u * modifier);
280 pCoefA = pCoefA + (2u * modifier);
285 pDst[2u * fftLen] = (pSrc[0] - pSrc[1]) >> 1;
286 pDst[(2u * fftLen) + 1u] = 0;
288 pDst[0] = (pSrc[0] + pSrc[1]) >> 1;
316 q15_t *pCoefA, *pCoefB;
317 q15_t *pSrc1, *pSrc2;
318 q15_t *pDst1 = &pDst[0];
320 pCoefA = &pATable[0];
321 pCoefB = &pBTable[0];
324 pSrc2 = &pSrc[2u * fftLen];
326 #ifndef ARM_MATH_CM0_FAMILY 344 #ifndef ARM_MATH_BIG_ENDIAN 369 #ifndef ARM_MATH_BIG_ENDIAN 380 #ifndef ARM_MATH_BIG_ENDIAN 382 *
__SIMD32(pDst1)++ = __PKHBT(outR, (outI >> 16u), 16);
386 *
__SIMD32(pDst1)++ = __PKHBT((outI >> 16u), outR, 16);
391 pCoefB = pCoefB + (2u * modifier);
392 pCoefA = pCoefA + (2u * modifier);
408 outR = *pSrc2 * *pCoefB;
409 outR = outR - (*(pSrc2 + 1) * *(pCoefB + 1));
410 outR = outR + (*pSrc1 * *pCoefA);
411 outR = (outR + (*(pSrc1 + 1) * *(pCoefA + 1))) >> 16;
419 outI = *(pSrc1 + 1) * *pCoefA;
420 outI = outI - (*pSrc1 * *(pCoefA + 1));
421 outI = outI - (*pSrc2 * *(pCoefB + 1));
422 outI = outI - (*(pSrc2 + 1) * *(pCoefB));
429 *pDst1++ = (
q15_t) outR;
430 *pDst1++ = (
q15_t) (outI >> 16);
433 pCoefB = pCoefB + (2u * modifier);
434 pCoefA = pCoefA + (2u * modifier);
const arm_cfft_instance_q15 * pCfft
uint32_t twidCoefRModifier
void arm_split_rfft_q15(q15_t *pSrc, uint32_t fftLen, q15_t *pATable, q15_t *pBTable, q15_t *pDst, uint32_t modifier)
Core Real FFT process.
void arm_cfft_q15(const arm_cfft_instance_q15 *S, q15_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag)
Processing function for the Q15 complex FFT.
int16_t q15_t
16-bit fractional data type in 1.15 format.
void arm_split_rifft_q15(q15_t *pSrc, uint32_t fftLen, q15_t *pATable, q15_t *pBTable, q15_t *pDst, uint32_t modifier)
Core Real IFFT process.
#define __SIMD32(addr)
definition to read/write two 16 bit values.
void arm_rfft_q15(const arm_rfft_instance_q15 *S, q15_t *pSrc, q15_t *pDst)
Processing function for the Q15 RFFT/RIFFT.
int32_t q31_t
32-bit fractional data type in 1.31 format.
Instance structure for the Q15 RFFT/RIFFT function.
Instance structure for the fixed-point CFFT/CIFFT function.