DSP_fft16x16t
x2[h2+1] = (co10 * yt1_0 − si10 * xt1_0) >> 15; x2[h2+2] = (si11 * yt1_1 + co11 * xt1_1) >> 15; x2[h2+3] = (co11 * yt1_1 − si11 * xt1_1) >> 15; x2[l1 ] = (si20 * yt0_0 + co20 * xt0_0) >> 15; x2[l1+1] = (co20 * yt0_0 − si20 * xt0_0) >> 15; x2[l1+2] = (si21 * yt0_1 + co21 * xt0_1) >> 15; x2[l1+3] = (co21 * yt0_1 − si21 * xt0_1) >> 15; x2[l2 ] = (si30 * yt2_0 + co30 * xt2_0) >> 15; x2[l2+1] = (co30 * yt2_0 − si30 * xt2_0) >> 15; x2[l2+2] = (si31 * yt2_1 + co31 * xt2_1) >> 15; x2[l2+3] = (co31 * yt2_1 − si31 * xt2_1) >> 15;
}
}
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
/* The following code performs either a standard radix4 pass or a */
/* DSP_radix2 pass. Two pointers are used to access the input data.*/
/* The input data is read ”N/4” complex samples apart or ”N/2” | */ |
/* words apart using pointers ”x0” and ”x2”. This produces out− | */ |
/* puts that are 0, N/4, N/2, 3N/4 for a radix4 FFT, and 0, N/8 | */ |
/* N/2, 3N/8 for radix 2. | */ |
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ y0 = ptr_y;
y2 = ptr_y + (int) npoints;
x0 = ptr_x;
x2 = ptr_x + (int) (npoints >> 1); if (radix == 2)
{
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ /* The pointers are set at the following locations which are half */
/* the offsets of a radix4 FFT.*/ /*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ y1 = y0 + (int) (npoints >> 2);