47 uint32_t twidCoefModifier);
53 uint32_t twidCoefModifier);
57 const uint16_t bitRevLen,
58 const uint16_t * pBitRevTable);
93 uint8_t bitReverseFlag)
153 q15_t p0, p1, p2, p3;
154 #ifndef ARM_MATH_CM0_FAMILY 156 q31_t coeff, out1, out2;
157 const q15_t *pC = pCoef;
159 q15_t *pSl = pSrc + fftLen;
162 q15_t xt, yt, cosVal, sinVal;
167 #ifndef ARM_MATH_CM0_FAMILY 169 for (i = n2; i > 0; i--)
185 #ifndef ARM_MATH_BIG_ENDIAN 187 out1 = __SMUAD(coeff, R) >> 16;
188 out2 = __SMUSDX(coeff, R);
192 out1 = __SMUSDX(R, coeff) >> 16u;
193 out2 = __SMUAD(coeff, R);
195 #endif // #ifndef ARM_MATH_BIG_ENDIAN 198 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
202 #else // #ifndef ARM_MATH_CM0_FAMILY 205 for (i = 0; i < n2; i++)
207 cosVal = pCoef[ia * 2];
208 sinVal = pCoef[(ia * 2) + 1];
213 xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u);
214 pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u;
216 yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u);
218 ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u;
220 pSrc[2u * l] = (((int16_t) (((
q31_t) xt * cosVal) >> 16)) +
221 ((int16_t) (((
q31_t) yt * sinVal) >> 16)));
223 pSrc[2u * l + 1u] = (((int16_t) (((
q31_t) yt * cosVal) >> 16)) -
224 ((int16_t) (((
q31_t) xt * sinVal) >> 16)));
227 #endif // #ifndef ARM_MATH_CM0_FAMILY 234 for (i = 0; i < fftLen >> 1; i++)
260 q15_t p0, p1, p2, p3;
261 #ifndef ARM_MATH_CM0_FAMILY 263 q31_t coeff, out1, out2;
264 const q15_t *pC = pCoef;
266 q15_t *pSl = pSrc + fftLen;
269 q15_t xt, yt, cosVal, sinVal;
274 #ifndef ARM_MATH_CM0_FAMILY 276 for (i = n2; i > 0; i--)
292 #ifndef ARM_MATH_BIG_ENDIAN 294 out1 = __SMUSD(coeff, R) >> 16;
295 out2 = __SMUADX(coeff, R);
298 out1 = __SMUADX(R, coeff) >> 16u;
299 out2 = __SMUSD(__QSUB(0, coeff), R);
301 #endif // #ifndef ARM_MATH_BIG_ENDIAN 304 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
308 #else // #ifndef ARM_MATH_CM0_FAMILY 311 for (i = 0; i < n2; i++)
313 cosVal = pCoef[ia * 2];
314 sinVal = pCoef[(ia * 2) + 1];
318 xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u);
319 pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u;
321 yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u);
323 ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u;
325 pSrc[2u * l] = (((int16_t) (((
q31_t) xt * cosVal) >> 16)) -
326 ((int16_t) (((
q31_t) yt * sinVal) >> 16)));
328 pSrc[2u * l + 1u] = (((int16_t) (((
q31_t) yt * cosVal) >> 16)) +
329 ((int16_t) (((
q31_t) xt * sinVal) >> 16)));
332 #endif // #ifndef ARM_MATH_CM0_FAMILY 339 for (i = 0; i < fftLen >> 1; i++)
void arm_bitreversal_16(uint16_t *pSrc, const uint16_t bitRevLen, const uint16_t *pBitRevTable)
void arm_radix4_butterfly_inverse_q15(q15_t *pSrc, uint32_t fftLen, q15_t *pCoef, uint32_t twidCoefModifier)
Core function for the Q15 CIFFT butterfly process.
void arm_cfft_radix4by2_inverse_q15(q15_t *pSrc, uint32_t fftLen, const q15_t *pCoef)
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.
const uint16_t * pBitRevTable
void arm_cfft_radix4by2_q15(q15_t *pSrc, uint32_t fftLen, const q15_t *pCoef)
void arm_radix4_butterfly_q15(q15_t *pSrc, uint32_t fftLen, q15_t *pCoef, uint32_t twidCoefModifier)
Core function for the Q15 CFFT butterfly process.
#define _SIMD32_OFFSET(addr)
int32_t q31_t
32-bit fractional data type in 1.31 format.
Instance structure for the fixed-point CFFT/CIFFT function.