DSP_fft16x16t

/* y0i = x0i + x2i + x1i +

x3i

=

xh1 + xh21

*/

/* y1r = x0r − x2r + (x1i −

x3i)

=

xl0 + xl21

*/

/* y1i = x0i − x2i − (x1r −

x3r)

=

xl1 − xl20

*/

/* y2r = x0r + x2r − (x1r +

x3r)

=

xh0 − xh20

*/

/* y2i = x0i + x2i − (x1i +

x3i

=

xh1 − xh21

*/

/* y3r = x0r − x2r − (x1i −

x3i)

=

xl0 − xl21

*/

/* y3i = x0i − x2i + (x1r −

x3r)

=

xl1 + xl20

*/

/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/

y0r

= xh0_0 +

xh20_0; y0i

= xh1_0

+ xh21_0;

y4r

= xh0_1 +

xh20_1; y4i

= xh1_1

+ xh21_1;

xt0_0 = xh0_0 −

xh20_0; yt0_0

= xh1_0

− xh21_0;

xt0_1 = xh0_1 −

xh20_1; yt0_1

= xh1_1

− xh21_1;

xt1_0 = xl0_0

+

xl21_0; yt2_0

=xl1_0

 

+ xl20_0;

xt2_0 = xl0_0

xl21_0; yt1_0

=xl1_0

 

− xl20_0;

xt1_1

= xl0_1

+

xl21_1; yt2_1

 

=xl1_1

 

+ xl20_1;

xt2_1

= xl0_1

xl21_1; yt1_1

 

=xl1_1

 

− xl20_1;

/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ /* Store out first output, of the four outputs of a radix4 */

/*

butterfly. Since two such

radix4 butterflies are per−

*/

/*

formed in parallel, there

are 2 such 1st outputs.

*/

/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/

x2[0]

=

y0r;

x2[1]

=

y0i;

x2[2]

=

y4r;

x2[3]

=

y4i;

/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/

/* Perform twiddle factor multiplies of three terms,top

*/

/* term does not have any multiplies. Note the twiddle

*/

/* factors for a normal FFT are C + j (−S). Since the

*/

/* factors that are stored are C + j S, this is

*/

/* corrected for in the multiplies.

*/

/*

*/

/* Y1 = (xt1 + jyt1) (c + js) = (xc + ys) + (yc −xs)

*/

/* Perform the multiplies using 16 by 32 multiply macro

*/

/* defined. This treats the twiddle factor as 16 bits

*/

/* and incoming data as 32 bits.

*/

/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ x2[h2 ] = (si10 * yt1_0 + co10 * xt1_0) >> 15;

C64x+ DSPLIB Reference

4-113

Page 141
Image 141
Texas Instruments TMS320C64X manual C64x+ Dsplib Reference 113