48 uint16_t twidCoefModifier);
54 uint16_t twidCoefModifier);
59 uint16_t bitRevFactor,
60 uint16_t * pBitRevTab);
107 uint16_t twidCoefModifier)
110 unsigned i, j, k, l, m;
112 q31_t xt, yt, cosVal, sinVal;
123 for (i = 0; i < n2; i++)
125 cosVal = pCoef[ia * 2];
126 sinVal = pCoef[(ia * 2) + 1];
127 ia = ia + twidCoefModifier;
130 xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u);
131 pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u;
133 yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u);
135 ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u;
143 pSrc[2u * l + 1u] = p1;
147 twidCoefModifier <<= 1u;
150 for (k = fftLen / 2; k > 2; k = k >> 1)
157 for (j = 0; j < n2; j++)
159 cosVal = pCoef[ia * 2];
160 sinVal = pCoef[(ia * 2) + 1];
161 ia = ia + twidCoefModifier;
169 xt = pSrc[2 * i] - pSrc[2 * l];
170 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
172 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
173 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
181 pSrc[2u * l + 1u] = p1;
188 twidCoefModifier <<= 1u;
195 cosVal = pCoef[ia * 2];
196 sinVal = pCoef[(ia * 2) + 1];
197 ia = ia + twidCoefModifier;
200 for (i = 0; i < fftLen; i += n1)
203 xt = pSrc[2 * i] - pSrc[2 * l];
204 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
206 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
207 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
211 pSrc[2u * l + 1u] = yt;
216 xt = pSrc[2 * i] - pSrc[2 * l];
217 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
219 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
220 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
224 pSrc[2u * l + 1u] = yt;
235 uint16_t twidCoefModifier)
240 q31_t xt, yt, cosVal, sinVal;
251 for (i = 0; i < n2; i++)
253 cosVal = pCoef[ia * 2];
254 sinVal = pCoef[(ia * 2) + 1];
255 ia = ia + twidCoefModifier;
258 xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u);
259 pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u;
261 yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u);
263 ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u;
271 pSrc[2u * l + 1u] = p1;
274 twidCoefModifier = twidCoefModifier << 1u;
277 for (k = fftLen / 2; k > 2; k = k >> 1)
284 for (j = 0; j < n2; j++)
286 cosVal = pCoef[ia * 2];
287 sinVal = pCoef[(ia * 2) + 1];
288 ia = ia + twidCoefModifier;
291 for (i = j; i < fftLen; i += n1)
294 xt = pSrc[2 * i] - pSrc[2 * l];
295 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
297 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
298 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
306 pSrc[2u * l + 1u] = p1;
311 twidCoefModifier = twidCoefModifier << 1u;
318 cosVal = pCoef[ia * 2];
319 sinVal = pCoef[(ia * 2) + 1];
320 ia = ia + twidCoefModifier;
323 for (i = 0; i < fftLen; i += n1)
326 xt = pSrc[2 * i] - pSrc[2 * l];
327 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
329 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
330 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
334 pSrc[2u * l + 1u] = yt;
339 xt = pSrc[2 * i] - pSrc[2 * l];
340 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
342 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
343 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
347 pSrc[2u * l + 1u] = yt;
void arm_bitreversal_q31(q31_t *pSrc, uint32_t fftLen, uint16_t bitRevFactor, uint16_t *pBitRevTab)
uint16_t twidCoefModifier
void arm_radix2_butterfly_inverse_q31(q31_t *pSrc, uint32_t fftLen, q31_t *pCoef, uint16_t twidCoefModifier)
Instance structure for the Radix-2 Q31 CFFT/CIFFT function.
#define multAcc_32x32_keep32_R(a, x, y)
void arm_cfft_radix2_q31(const arm_cfft_radix2_instance_q31 *S, q31_t *pSrc)
Processing function for the fixed-point CFFT/CIFFT.
#define multSub_32x32_keep32_R(a, x, y)
int32_t q31_t
32-bit fractional data type in 1.31 format.
#define mult_32x32_keep32_R(a, x, y)
void arm_radix2_butterfly_q31(q31_t *pSrc, uint32_t fftLen, q31_t *pCoef, uint16_t twidCoefModifier)