48 uint16_t twidCoefModifier);
54 uint16_t twidCoefModifier);
59 uint16_t bitRevFactor,
60 uint16_t * pBitRevTab);
107 uint16_t twidCoefModifier)
109 #ifndef ARM_MATH_CM0_FAMILY 115 q31_t coeff, out1, out2;
125 for (i = 0; i < n2; i++)
129 ia = ia + twidCoefModifier;
134 in = ((int16_t) (T & 0xFFFF)) >> 1;
135 T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF);
138 in = ((int16_t) (S & 0xFFFF)) >> 1;
139 S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF);
145 #ifndef ARM_MATH_BIG_ENDIAN 147 out1 = __SMUAD(coeff, R) >> 16;
148 out2 = __SMUSDX(coeff, R);
152 out1 = __SMUSDX(R, coeff) >> 16u;
153 out2 = __SMUAD(coeff, R);
155 #endif // #ifndef ARM_MATH_BIG_ENDIAN 158 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
162 ia = ia + twidCoefModifier;
169 in = ((int16_t) (T & 0xFFFF)) >> 1;
170 T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF);
173 in = ((int16_t) (S & 0xFFFF)) >> 1;
174 S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF);
180 #ifndef ARM_MATH_BIG_ENDIAN 182 out1 = __SMUAD(coeff, R) >> 16;
183 out2 = __SMUSDX(coeff, R);
187 out1 = __SMUSDX(R, coeff) >> 16u;
188 out2 = __SMUAD(coeff, R);
190 #endif // #ifndef ARM_MATH_BIG_ENDIAN 193 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
197 twidCoefModifier = twidCoefModifier << 1u;
200 for (k = fftLen / 2; k > 2; k = k >> 1)
207 for (j = 0; j < n2; j++)
211 ia = ia + twidCoefModifier;
214 for (i = j; i < fftLen; i += n1)
226 #ifndef ARM_MATH_BIG_ENDIAN 228 out1 = __SMUAD(coeff, R) >> 16;
229 out2 = __SMUSDX(coeff, R);
233 out1 = __SMUSDX(R, coeff) >> 16u;
234 out2 = __SMUAD(coeff, R);
236 #endif // #ifndef ARM_MATH_BIG_ENDIAN 239 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
253 #ifndef ARM_MATH_BIG_ENDIAN 255 out1 = __SMUAD(coeff, R) >> 16;
256 out2 = __SMUSDX(coeff, R);
260 out1 = __SMUSDX(R, coeff) >> 16u;
261 out2 = __SMUAD(coeff, R);
263 #endif // #ifndef ARM_MATH_BIG_ENDIAN 266 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
272 twidCoefModifier = twidCoefModifier << 1u;
281 ia = ia + twidCoefModifier;
284 for (i = 0; i < fftLen; i += n1)
318 q15_t xt, yt, cosVal, sinVal;
329 for (j = 0; j < n2; j++)
331 cosVal = pCoef[ia * 2];
332 sinVal = pCoef[(ia * 2) + 1];
333 ia = ia + twidCoefModifier;
336 for (i = j; i < fftLen; i += n1)
339 xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u);
340 pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u;
342 yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u);
344 ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u;
346 pSrc[2u * l] = (((int16_t) (((
q31_t) xt * cosVal) >> 16)) +
347 ((int16_t) (((
q31_t) yt * sinVal) >> 16)));
349 pSrc[2u * l + 1u] = (((int16_t) (((
q31_t) yt * cosVal) >> 16)) -
350 ((int16_t) (((
q31_t) xt * sinVal) >> 16)));
356 twidCoefModifier = twidCoefModifier << 1u;
359 for (k = fftLen / 2; k > 2; k = k >> 1)
366 for (j = 0; j < n2; j++)
368 cosVal = pCoef[ia * 2];
369 sinVal = pCoef[(ia * 2) + 1];
370 ia = ia + twidCoefModifier;
373 for (i = j; i < fftLen; i += n1)
376 xt = pSrc[2 * i] - pSrc[2 * l];
377 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
379 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
380 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
382 pSrc[2u * l] = (((int16_t) (((
q31_t) xt * cosVal) >> 16)) +
383 ((int16_t) (((
q31_t) yt * sinVal) >> 16)));
385 pSrc[2u * l + 1u] = (((int16_t) (((
q31_t) yt * cosVal) >> 16)) -
386 ((int16_t) (((
q31_t) xt * sinVal) >> 16)));
392 twidCoefModifier = twidCoefModifier << 1u;
400 for (j = 0; j < n2; j++)
402 cosVal = pCoef[ia * 2];
403 sinVal = pCoef[(ia * 2) + 1];
405 ia = ia + twidCoefModifier;
408 for (i = j; i < fftLen; i += n1)
411 xt = pSrc[2 * i] - pSrc[2 * l];
412 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
414 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
415 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
419 pSrc[2u * l + 1u] = yt;
425 twidCoefModifier = twidCoefModifier << 1u;
427 #endif // #ifndef ARM_MATH_CM0_FAMILY 436 uint16_t twidCoefModifier)
438 #ifndef ARM_MATH_CM0_FAMILY 444 q31_t coeff, out1, out2;
454 for (i = 0; i < n2; i++)
458 ia = ia + twidCoefModifier;
463 in = ((int16_t) (T & 0xFFFF)) >> 1;
464 T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF);
467 in = ((int16_t) (S & 0xFFFF)) >> 1;
468 S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF);
474 #ifndef ARM_MATH_BIG_ENDIAN 476 out1 = __SMUSD(coeff, R) >> 16;
477 out2 = __SMUADX(coeff, R);
480 out1 = __SMUADX(R, coeff) >> 16u;
481 out2 = __SMUSD(__QSUB(0, coeff), R);
483 #endif // #ifndef ARM_MATH_BIG_ENDIAN 486 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
490 ia = ia + twidCoefModifier;
497 in = ((int16_t) (T & 0xFFFF)) >> 1;
498 T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF);
501 in = ((int16_t) (S & 0xFFFF)) >> 1;
502 S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF);
508 #ifndef ARM_MATH_BIG_ENDIAN 510 out1 = __SMUSD(coeff, R) >> 16;
511 out2 = __SMUADX(coeff, R);
514 out1 = __SMUADX(R, coeff) >> 16u;
515 out2 = __SMUSD(__QSUB(0, coeff), R);
517 #endif // #ifndef ARM_MATH_BIG_ENDIAN 520 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
524 twidCoefModifier = twidCoefModifier << 1u;
527 for (k = fftLen / 2; k > 2; k = k >> 1)
534 for (j = 0; j < n2; j++)
538 ia = ia + twidCoefModifier;
541 for (i = j; i < fftLen; i += n1)
553 #ifndef ARM_MATH_BIG_ENDIAN 555 out1 = __SMUSD(coeff, R) >> 16;
556 out2 = __SMUADX(coeff, R);
560 out1 = __SMUADX(R, coeff) >> 16u;
561 out2 = __SMUSD(__QSUB(0, coeff), R);
563 #endif // #ifndef ARM_MATH_BIG_ENDIAN 566 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
580 #ifndef ARM_MATH_BIG_ENDIAN 582 out1 = __SMUSD(coeff, R) >> 16;
583 out2 = __SMUADX(coeff, R);
586 out1 = __SMUADX(R, coeff) >> 16u;
587 out2 = __SMUSD(__QSUB(0, coeff), R);
589 #endif // #ifndef ARM_MATH_BIG_ENDIAN 592 (
q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF);
598 twidCoefModifier = twidCoefModifier << 1u;
606 for (j = 0; j < n2; j++)
610 ia = ia + twidCoefModifier;
613 for (i = j; i < fftLen; i += n1)
631 twidCoefModifier = twidCoefModifier << 1u;
638 q15_t xt, yt, cosVal, sinVal;
648 for (j = 0; j < n2; j++)
650 cosVal = pCoef[ia * 2];
651 sinVal = pCoef[(ia * 2) + 1];
652 ia = ia + twidCoefModifier;
655 for (i = j; i < fftLen; i += n1)
658 xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u);
659 pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u;
661 yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u);
663 ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u;
665 pSrc[2u * l] = (((int16_t) (((
q31_t) xt * cosVal) >> 16)) -
666 ((int16_t) (((
q31_t) yt * sinVal) >> 16)));
668 pSrc[2u * l + 1u] = (((int16_t) (((
q31_t) yt * cosVal) >> 16)) +
669 ((int16_t) (((
q31_t) xt * sinVal) >> 16)));
675 twidCoefModifier = twidCoefModifier << 1u;
678 for (k = fftLen / 2; k > 2; k = k >> 1)
685 for (j = 0; j < n2; j++)
687 cosVal = pCoef[ia * 2];
688 sinVal = pCoef[(ia * 2) + 1];
689 ia = ia + twidCoefModifier;
692 for (i = j; i < fftLen; i += n1)
695 xt = pSrc[2 * i] - pSrc[2 * l];
696 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
698 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
699 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
701 pSrc[2u * l] = (((int16_t) (((
q31_t) xt * cosVal) >> 16)) -
702 ((int16_t) (((
q31_t) yt * sinVal) >> 16)));
704 pSrc[2u * l + 1u] = (((int16_t) (((
q31_t) yt * cosVal) >> 16)) +
705 ((int16_t) (((
q31_t) xt * sinVal) >> 16)));
711 twidCoefModifier = twidCoefModifier << 1u;
718 cosVal = pCoef[ia * 2];
719 sinVal = pCoef[(ia * 2) + 1];
721 ia = ia + twidCoefModifier;
724 for (i = 0; i < fftLen; i += n1)
727 xt = pSrc[2 * i] - pSrc[2 * l];
728 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
730 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
731 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
735 pSrc[2u * l + 1u] = yt;
740 #endif // #ifndef ARM_MATH_CM0_FAMILY
void arm_radix2_butterfly_q15(q15_t *pSrc, uint32_t fftLen, q15_t *pCoef, uint16_t twidCoefModifier)
void arm_cfft_radix2_q15(const arm_cfft_radix2_instance_q15 *S, q15_t *pSrc)
Processing function for the fixed-point CFFT/CIFFT.
void arm_bitreversal_q15(q15_t *pSrc, uint32_t fftLen, uint16_t bitRevFactor, uint16_t *pBitRevTab)
void arm_radix2_butterfly_inverse_q15(q15_t *pSrc, uint32_t fftLen, q15_t *pCoef, uint16_t twidCoefModifier)
int16_t q15_t
16-bit fractional data type in 1.15 format.
uint16_t twidCoefModifier
#define _SIMD32_OFFSET(addr)
int32_t q31_t
32-bit fractional data type in 1.31 format.
Instance structure for the Q15 CFFT/CIFFT function.