47 uint16_t bitRevFactor,
48 uint16_t * pBitRevTab);
71 uint16_t twidCoefModifier)
75 uint32_t ia1, ia2, ia3;
76 uint32_t i0, i1, i2, i3;
77 uint32_t n1, n2, j, k;
79 #ifndef ARM_MATH_CM0_FAMILY_FAMILY 83 float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn;
84 float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc,
86 float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out;
87 float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out;
112 xaIn = pSrc[(2u * i0)];
113 yaIn = pSrc[(2u * i0) + 1u];
115 xbIn = pSrc[(2u * i1)];
116 ybIn = pSrc[(2u * i1) + 1u];
118 xcIn = pSrc[(2u * i2)];
119 ycIn = pSrc[(2u * i2) + 1u];
121 xdIn = pSrc[(2u * i3)];
122 ydIn = pSrc[(2u * i3) + 1u];
125 Xaplusc = xaIn + xcIn;
127 Xbplusd = xbIn + xdIn;
129 Yaplusc = yaIn + ycIn;
131 Ybplusd = ybIn + ydIn;
135 co2 = pCoef[ia2 * 2u];
136 si2 = pCoef[(ia2 * 2u) + 1u];
139 Xaminusc = xaIn - xcIn;
141 Xbminusd = xbIn - xdIn;
143 Yaminusc = yaIn - ycIn;
145 Ybminusd = ybIn - ydIn;
148 pSrc[(2u * i0)] = Xaplusc + Xbplusd;
150 pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd;
153 Xb12C_out = (Xaminusc + Ybminusd);
155 Yb12C_out = (Yaminusc - Xbminusd);
157 Xc12C_out = (Xaplusc - Xbplusd);
159 Yc12C_out = (Yaplusc - Ybplusd);
161 Xd12C_out = (Xaminusc - Ybminusd);
163 Yd12C_out = (Xbminusd + Yaminusc);
165 co1 = pCoef[ia1 * 2u];
166 si1 = pCoef[(ia1 * 2u) + 1u];
170 co3 = pCoef[ia3 * 2u];
171 si3 = pCoef[(ia3 * 2u) + 1u];
173 Xb12_out = Xb12C_out * co1;
174 Yb12_out = Yb12C_out * co1;
175 Xc12_out = Xc12C_out * co2;
176 Yc12_out = Yc12C_out * co2;
177 Xd12_out = Xd12C_out * co3;
178 Yd12_out = Yd12C_out * co3;
182 p0 = Yb12C_out * si1;
185 p1 = Xb12C_out * si1;
188 p2 = Yc12C_out * si2;
191 p3 = Xc12C_out * si2;
194 p4 = Yd12C_out * si3;
197 p5 = Xd12C_out * si3;
207 pSrc[2u * i1] = Xc12_out;
210 pSrc[(2u * i1) + 1u] = Yc12_out;
213 pSrc[2u * i2] = Xb12_out;
216 pSrc[(2u * i2) + 1u] = Yb12_out;
219 pSrc[2u * i3] = Xd12_out;
222 pSrc[(2u * i3) + 1u] = Yd12_out;
225 ia1 += twidCoefModifier;
233 twidCoefModifier <<= 2u;
236 for (k = fftLen >> 2u; k > 4u; k >>= 2u)
250 co1 = pCoef[ia1 * 2u];
251 si1 = pCoef[(ia1 * 2u) + 1u];
252 co2 = pCoef[ia2 * 2u];
253 si2 = pCoef[(ia2 * 2u) + 1u];
254 co3 = pCoef[ia3 * 2u];
255 si3 = pCoef[(ia3 * 2u) + 1u];
258 ia1 += twidCoefModifier;
269 xaIn = pSrc[(2u * i0)];
270 yaIn = pSrc[(2u * i0) + 1u];
272 xbIn = pSrc[(2u * i1)];
273 ybIn = pSrc[(2u * i1) + 1u];
275 xcIn = pSrc[(2u * i2)];
276 ycIn = pSrc[(2u * i2) + 1u];
278 xdIn = pSrc[(2u * i3)];
279 ydIn = pSrc[(2u * i3) + 1u];
282 Xaminusc = xaIn - xcIn;
284 Xbminusd = xbIn - xdIn;
286 Yaminusc = yaIn - ycIn;
288 Ybminusd = ybIn - ydIn;
291 Xaplusc = xaIn + xcIn;
293 Xbplusd = xbIn + xdIn;
295 Yaplusc = yaIn + ycIn;
297 Ybplusd = ybIn + ydIn;
300 Xb12C_out = (Xaminusc + Ybminusd);
302 Yb12C_out = (Yaminusc - Xbminusd);
304 Xc12C_out = (Xaplusc - Xbplusd);
306 Yc12C_out = (Yaplusc - Ybplusd);
308 Xd12C_out = (Xaminusc - Ybminusd);
310 Yd12C_out = (Xbminusd + Yaminusc);
312 pSrc[(2u * i0)] = Xaplusc + Xbplusd;
313 pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd;
315 Xb12_out = Xb12C_out * co1;
316 Yb12_out = Yb12C_out * co1;
317 Xc12_out = Xc12C_out * co2;
318 Yc12_out = Yc12C_out * co2;
319 Xd12_out = Xd12C_out * co3;
320 Yd12_out = Yd12C_out * co3;
324 p0 = Yb12C_out * si1;
327 p1 = Xb12C_out * si1;
330 p2 = Yc12C_out * si2;
333 p3 = Xc12C_out * si2;
336 p4 = Yd12C_out * si3;
339 p5 = Xd12C_out * si3;
349 pSrc[2u * i1] = Xc12_out;
352 pSrc[(2u * i1) + 1u] = Yc12_out;
355 pSrc[2u * i2] = Xb12_out;
358 pSrc[(2u * i2) + 1u] = Yb12_out;
361 pSrc[2u * i3] = Xd12_out;
364 pSrc[(2u * i3) + 1u] = Yd12_out;
367 }
while(i0 < fftLen);
369 }
while(j <= (n2 - 1u));
370 twidCoefModifier <<= 2u;
389 Xaplusc = xaIn + xcIn;
392 Xaminusc = xaIn - xcIn;
395 Yaplusc = yaIn + ycIn;
398 Yaminusc = yaIn - ycIn;
401 Xbplusd = xbIn + xdIn;
404 Ybplusd = ybIn + ydIn;
407 Xbminusd = xbIn - xdIn;
410 Ybminusd = ybIn - ydIn;
413 a0 = (Xaplusc + Xbplusd);
415 a1 = (Yaplusc + Ybplusd);
417 a2 = (Xaplusc - Xbplusd);
419 a3 = (Yaplusc - Ybplusd);
421 a4 = (Xaminusc + Ybminusd);
423 a5 = (Yaminusc - Xbminusd);
425 a6 = (Xaminusc - Ybminusd);
427 a7 = (Xbminusd + Yaminusc);
451 for (k = fftLen; k > 1u; k >>= 2u)
465 co1 = pCoef[ia1 * 2u];
466 si1 = pCoef[(ia1 * 2u) + 1u];
467 co2 = pCoef[ia2 * 2u];
468 si2 = pCoef[(ia2 * 2u) + 1u];
469 co3 = pCoef[ia3 * 2u];
470 si3 = pCoef[(ia3 * 2u) + 1u];
473 ia1 = ia1 + twidCoefModifier;
485 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
488 r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)];
491 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
494 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
497 t1 = pSrc[2u * i1] + pSrc[2u * i3];
500 pSrc[2u * i0] = r1 + t1;
506 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
509 pSrc[(2u * i0) + 1u] = s1 + t2;
515 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
518 t2 = pSrc[2u * i1] - pSrc[2u * i3];
521 pSrc[2u * i1] = (r1 * co2) + (s1 * si2);
524 pSrc[(2u * i1) + 1u] = (s1 * co2) - (r1 * si2);
539 pSrc[2u * i2] = (r1 * co1) + (s1 * si1);
542 pSrc[(2u * i2) + 1u] = (s1 * co1) - (r1 * si1);
545 pSrc[2u * i3] = (r2 * co3) + (s2 * si3);
548 pSrc[(2u * i3) + 1u] = (s2 * co3) - (r2 * si3);
551 }
while( i0 < fftLen);
553 }
while(j <= (n2 - 1u));
554 twidCoefModifier <<= 2u;
575 uint16_t twidCoefModifier,
579 uint32_t ia1, ia2, ia3;
580 uint32_t i0, i1, i2, i3;
581 uint32_t n1, n2, j, k;
583 #ifndef ARM_MATH_CM0_FAMILY_FAMILY 585 float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn;
586 float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc,
588 float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out;
589 float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out;
616 xaIn = pSrc[(2u * i0)];
617 yaIn = pSrc[(2u * i0) + 1u];
619 xcIn = pSrc[(2u * i2)];
620 ycIn = pSrc[(2u * i2) + 1u];
622 xbIn = pSrc[(2u * i1)];
623 ybIn = pSrc[(2u * i1) + 1u];
625 xdIn = pSrc[(2u * i3)];
626 ydIn = pSrc[(2u * i3) + 1u];
629 Xaplusc = xaIn + xcIn;
631 Xbplusd = xbIn + xdIn;
633 Yaplusc = yaIn + ycIn;
635 Ybplusd = ybIn + ydIn;
639 co2 = pCoef[ia2 * 2u];
640 si2 = pCoef[(ia2 * 2u) + 1u];
643 Xaminusc = xaIn - xcIn;
645 Xbminusd = xbIn - xdIn;
647 Yaminusc = yaIn - ycIn;
649 Ybminusd = ybIn - ydIn;
652 pSrc[(2u * i0)] = Xaplusc + Xbplusd;
655 pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd;
658 Xb12C_out = (Xaminusc - Ybminusd);
660 Yb12C_out = (Yaminusc + Xbminusd);
662 Xc12C_out = (Xaplusc - Xbplusd);
664 Yc12C_out = (Yaplusc - Ybplusd);
666 Xd12C_out = (Xaminusc + Ybminusd);
668 Yd12C_out = (Yaminusc - Xbminusd);
670 co1 = pCoef[ia1 * 2u];
671 si1 = pCoef[(ia1 * 2u) + 1u];
675 co3 = pCoef[ia3 * 2u];
676 si3 = pCoef[(ia3 * 2u) + 1u];
678 Xb12_out = Xb12C_out * co1;
679 Yb12_out = Yb12C_out * co1;
680 Xc12_out = Xc12C_out * co2;
681 Yc12_out = Yc12C_out * co2;
682 Xd12_out = Xd12C_out * co3;
683 Yd12_out = Yd12C_out * co3;
687 p0 = Yb12C_out * si1;
690 p1 = Xb12C_out * si1;
693 p2 = Yc12C_out * si2;
696 p3 = Xc12C_out * si2;
699 p4 = Yd12C_out * si3;
702 p5 = Xd12C_out * si3;
712 pSrc[2u * i1] = Xc12_out;
715 pSrc[(2u * i1) + 1u] = Yc12_out;
718 pSrc[2u * i2] = Xb12_out;
721 pSrc[(2u * i2) + 1u] = Yb12_out;
724 pSrc[2u * i3] = Xd12_out;
727 pSrc[(2u * i3) + 1u] = Yd12_out;
730 ia1 = ia1 + twidCoefModifier;
737 twidCoefModifier <<= 2u;
740 for (k = fftLen >> 2u; k > 4u; k >>= 2u)
754 co1 = pCoef[ia1 * 2u];
755 si1 = pCoef[(ia1 * 2u) + 1u];
756 co2 = pCoef[ia2 * 2u];
757 si2 = pCoef[(ia2 * 2u) + 1u];
758 co3 = pCoef[ia3 * 2u];
759 si3 = pCoef[(ia3 * 2u) + 1u];
762 ia1 = ia1 + twidCoefModifier;
773 xaIn = pSrc[(2u * i0)];
774 yaIn = pSrc[(2u * i0) + 1u];
776 xbIn = pSrc[(2u * i1)];
777 ybIn = pSrc[(2u * i1) + 1u];
779 xcIn = pSrc[(2u * i2)];
780 ycIn = pSrc[(2u * i2) + 1u];
782 xdIn = pSrc[(2u * i3)];
783 ydIn = pSrc[(2u * i3) + 1u];
786 Xaminusc = xaIn - xcIn;
788 Xbminusd = xbIn - xdIn;
790 Yaminusc = yaIn - ycIn;
792 Ybminusd = ybIn - ydIn;
795 Xaplusc = xaIn + xcIn;
797 Xbplusd = xbIn + xdIn;
799 Yaplusc = yaIn + ycIn;
801 Ybplusd = ybIn + ydIn;
804 Xb12C_out = (Xaminusc - Ybminusd);
806 Yb12C_out = (Yaminusc + Xbminusd);
808 Xc12C_out = (Xaplusc - Xbplusd);
810 Yc12C_out = (Yaplusc - Ybplusd);
812 Xd12C_out = (Xaminusc + Ybminusd);
814 Yd12C_out = (Yaminusc - Xbminusd);
816 pSrc[(2u * i0)] = Xaplusc + Xbplusd;
817 pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd;
819 Xb12_out = Xb12C_out * co1;
820 Yb12_out = Yb12C_out * co1;
821 Xc12_out = Xc12C_out * co2;
822 Yc12_out = Yc12C_out * co2;
823 Xd12_out = Xd12C_out * co3;
824 Yd12_out = Yd12C_out * co3;
828 p0 = Yb12C_out * si1;
831 p1 = Xb12C_out * si1;
834 p2 = Yc12C_out * si2;
837 p3 = Xc12C_out * si2;
840 p4 = Yd12C_out * si3;
843 p5 = Xd12C_out * si3;
853 pSrc[2u * i1] = Xc12_out;
856 pSrc[(2u * i1) + 1u] = Yc12_out;
859 pSrc[2u * i2] = Xb12_out;
862 pSrc[(2u * i2) + 1u] = Yb12_out;
865 pSrc[2u * i3] = Xd12_out;
868 pSrc[(2u * i3) + 1u] = Yd12_out;
871 }
while(i0 < fftLen);
873 }
while(j <= (n2 - 1u));
874 twidCoefModifier <<= 2u;
895 Xaplusc = xaIn + xcIn;
898 Xaminusc = xaIn - xcIn;
901 Yaplusc = yaIn + ycIn;
904 Yaminusc = yaIn - ycIn;
907 Xbplusd = xbIn + xdIn;
910 Ybplusd = ybIn + ydIn;
913 Xbminusd = xbIn - xdIn;
916 Ybminusd = ybIn - ydIn;
919 a0 = (Xaplusc + Xbplusd);
921 a1 = (Yaplusc + Ybplusd);
923 a2 = (Xaplusc - Xbplusd);
925 a3 = (Yaplusc - Ybplusd);
927 a4 = (Xaminusc - Ybminusd);
929 a5 = (Yaminusc + Xbminusd);
931 a6 = (Xaminusc + Ybminusd);
933 a7 = (Yaminusc - Xbminusd);
935 p0 = a0 * onebyfftLen;
936 p1 = a1 * onebyfftLen;
937 p2 = a2 * onebyfftLen;
938 p3 = a3 * onebyfftLen;
939 p4 = a4 * onebyfftLen;
940 p5 = a5 * onebyfftLen;
941 p6 = a6 * onebyfftLen;
942 p7 = a7 * onebyfftLen;
977 for (k = fftLen; k > 4u; k >>= 2u)
991 co1 = pCoef[ia1 * 2u];
992 si1 = pCoef[(ia1 * 2u) + 1u];
993 co2 = pCoef[ia2 * 2u];
994 si2 = pCoef[(ia2 * 2u) + 1u];
995 co3 = pCoef[ia3 * 2u];
996 si3 = pCoef[(ia3 * 2u) + 1u];
999 ia1 = ia1 + twidCoefModifier;
1011 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
1014 r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)];
1017 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
1020 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
1023 t1 = pSrc[2u * i1] + pSrc[2u * i3];
1026 pSrc[2u * i0] = r1 + t1;
1032 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
1035 pSrc[(2u * i0) + 1u] = s1 + t2;
1041 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
1044 t2 = pSrc[2u * i1] - pSrc[2u * i3];
1047 pSrc[2u * i1] = (r1 * co2) - (s1 * si2);
1050 pSrc[(2u * i1) + 1u] = (s1 * co2) + (r1 * si2);
1065 pSrc[2u * i2] = (r1 * co1) - (s1 * si1);
1068 pSrc[(2u * i2) + 1u] = (s1 * co1) + (r1 * si1);
1071 pSrc[2u * i3] = (r2 * co3) - (s2 * si3);
1074 pSrc[(2u * i3) + 1u] = (s2 * co3) + (r2 * si3);
1077 }
while( i0 < fftLen);
1079 }
while(j <= (n2 - 1u));
1080 twidCoefModifier <<= 2u;
1087 for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1)
1097 r1 = pSrc[2u * i0] + pSrc[2u * i2];
1100 r2 = pSrc[2u * i0] - pSrc[2u * i2];
1103 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
1106 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
1109 t1 = pSrc[2u * i1] + pSrc[2u * i3];
1112 pSrc[2u * i0] = (r1 + t1) * onebyfftLen;
1118 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
1121 pSrc[(2u * i0) + 1u] = (s1 + t2) * onebyfftLen;
1127 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
1130 t2 = pSrc[2u * i1] - pSrc[2u * i3];
1133 pSrc[2u * i1] = r1 * onebyfftLen;
1136 pSrc[(2u * i1) + 1u] = s1 * onebyfftLen;
1151 pSrc[2u * i2] = r1 * onebyfftLen;
1154 pSrc[(2u * i2) + 1u] = s1 * onebyfftLen;
1157 pSrc[2u * i3] = r2 * onebyfftLen;
1160 pSrc[(2u * i3) + 1u] = s2 * onebyfftLen;
float float32_t
32-bit floating-point type definition.
void arm_radix4_butterfly_inverse_f32(float32_t *pSrc, uint16_t fftLen, float32_t *pCoef, uint16_t twidCoefModifier, float32_t onebyfftLen)
uint16_t twidCoefModifier
Instance structure for the floating-point CFFT/CIFFT function.
void arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 *S, float32_t *pSrc)
Processing function for the floating-point Radix-4 CFFT/CIFFT.
void arm_bitreversal_f32(float32_t *pSrc, uint16_t fftSize, uint16_t bitRevFactor, uint16_t *pBitRevTab)