protected void kf_bfly5(Array <kiss_fft_cpx <kiss_fft_scalar> > Fout, int fstride, int m) { Array <kiss_fft_cpx <kiss_fft_scalar> > Fout0, Fout1, Fout2, Fout3, Fout4; int u; kiss_fft_cpx <kiss_fft_scalar>[] scratch = new kiss_fft_cpx <kiss_fft_scalar> [13]; Array <kiss_fft_cpx <kiss_fft_scalar> > twiddles = new Array <kiss_fft_cpx <kiss_fft_scalar> >(Twiddles); Array <kiss_fft_cpx <kiss_fft_scalar> > tw; kiss_fft_cpx <kiss_fft_scalar> ya, yb; ya = twiddles[fstride * m]; yb = twiddles[fstride * 2 * m]; Fout0 = Fout; Fout1 = Fout0 + m; Fout2 = Fout0 + 2 * m; Fout3 = Fout0 + 3 * m; Fout4 = Fout0 + 4 * m; tw = new Array <kiss_fft_cpx <kiss_fft_scalar> >(twiddles); for (u = 0; u < m; ++u) { Fout[0] = A.FixDivide(Fout[0], 5); Fout1[0] = A.FixDivide(Fout1[0], 5); Fout2[0] = A.FixDivide(Fout2[0], 5); Fout3[0] = A.FixDivide(Fout3[0], 5); Fout4[0] = A.FixDivide(Fout4[0], 5); scratch[0] = new kiss_fft_cpx <kiss_fft_scalar>(Fout[0]); scratch[1] = A.Multiply(Fout1[0], tw[u * fstride]); scratch[2] = A.Multiply(Fout2[0], tw[2 * u * fstride]); scratch[3] = A.Multiply(Fout3[0], tw[3 * u * fstride]); scratch[4] = A.Multiply(Fout4[0], tw[4 * u * fstride]); scratch[7] = A.Add(scratch[1], scratch[4]); scratch[10] = A.Subtract(scratch[1], scratch[4]); scratch[8] = A.Add(scratch[2], scratch[3]); scratch[9] = A.Subtract(scratch[2], scratch[3]); Fout[0].r = A.Add(Fout[0].r, A.Add(scratch[7].r, scratch[8].r)); Fout[0].i = A.Add(Fout[0].i, A.Add(scratch[7].i, scratch[8].i)); scratch[5].r = A.Add(scratch[0].r, A.Add(A.Multiply(scratch[7].r, ya.r), A.Multiply(scratch[8].r, yb.r))); scratch[5].i = A.Add(scratch[0].i, A.Add(A.Multiply(scratch[7].i, ya.r), A.Multiply(scratch[8].i, yb.r))); scratch[6].r = A.Add(A.Multiply(scratch[10].i, ya.i), A.Multiply(scratch[9].i, yb.i)); scratch[6].r = A.Negate(A.Add(A.Multiply(scratch[10].r, ya.i), A.Multiply(scratch[9].r, yb.i))); Fout1[0] = A.Subtract(scratch[5], scratch[6]); Fout4[0] = A.Add(scratch[5], scratch[6]); scratch[11].r = A.Add(scratch[0].r, A.Add(A.Multiply(scratch[7].r, yb.r), A.Multiply(scratch[8].r, ya.r))); scratch[11].i = A.Add(scratch[0].i, A.Add(A.Multiply(scratch[7].i, yb.r), A.Multiply(scratch[8].i, ya.r))); scratch[12].r = A.Subtract(A.Multiply(scratch[9].i, ya.i), A.Multiply(scratch[10].i, yb.i)); scratch[12].i = A.Subtract(A.Multiply(scratch[10].r, yb.i), A.Multiply(scratch[9].r, ya.i)); Fout2[0] = A.Add(scratch[11], scratch[12]); Fout3[0] = A.Subtract(scratch[11], scratch[12]); ++Fout0; ++Fout1; ++Fout2; ++Fout3; ++Fout4; } }