ГОСТ Р 53556.12-2014
/
rotatePlusMinusNormlNTil
(xr
[N/4}. xi [N/4/.
&x [N/2] ,&x [N/2-l]):
)
Split-Radix FFT:
int srfft_fixpt(INTyi *xr. IN732 *xi. int N) {
manshifts =
0;
/• L
= 1,2,4.....
Ш */
for(L=l: L<N: L*=2) f
M = N/L: /* M
=
N. N/2
....
2 */
М2
=
W.2:
M4 - M2Z2;
/* L: number ofsub-blocks
M: length of sub-block */
manshifts += shift!fRequired(xr, xi. N):
for (1-0:1<L; 1++H
/* butterfly on (x(k].xlM2+kJ). к
= 0
....
N2-
1
on each sub-block */
for (k=0; k<M2: k++){
rotatePlusMinusINTi2(.xr[I*M+kj.xr/l*M
+
М2+кJ.
&xrll *M+k], &xr[l*M
+
М2+к
/
);
rotatePlusMinuslNTS2(xifl*M+kJ.xi[l*M
+
М2+kj.
&xi[l*M+k].&xi[lmM
+
M2+kJ
);
/
J
manshifts += shiftlfReqиiredfxr, xi. N):
if(M > 2) (
for (1=0; 1<L; I++) {
if(srfftlndex(l) == 0)
/
/* x{N2+N4+k] -> -j*x[N2+N4+к] . к =N4
-1
on each sub-block
for (k=0: k<M4: k++){
swap(&xrll*M+M2+M4+k},&xill*M+M2+M4+kJ):
xi(I*M+M2+M4+kf *=-l:
}
50