DSP_fft

xl1

= x0i

x2i;

xl20

= x1r

x3r;

xl21

= x1i

x3i;

xt0

=

xh0

+

xh20;

yt0

=

xh1

+

xh21;

xt1

=

xl0

+

xl21;

yt1

=

xl1

xl20;

xt2

=

xh0

xh20;

yt2

=

xh1

xh21;

xt3

=

xl0

xl21;

yt3

=

xl1

+

xl20;

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

/* 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)

*/

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

y0r = xt0; y0i = yt0;

y1r = (xt1 * w1c + yt1 * w1s) >> 15; y1i = (yt1 * w1c − xt1 * w1s) >> 15; y2r = (xt2 * w2c + yt2 * w2s) >> 15; y2i = (yt2 * w2c − xt2 * w2s) >> 15; y3r = (xt3 * w3c + yt3 * w3s) >> 15; y3i = (yt3 * w3c − xt3 * w3s) >> 15;

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

/* Store the final results back to the input array. */ /* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */

x[2*(i+j+k

) + 0]

= y0r; x[2*(i+j+k

 

) + 1]

= y0i;

x[2*(i+j+k +

s) + 0]

= y1r; x[2*(i+j+k

+

s) + 1]

= y1i;

x[2*(i+j+k + 2*s)

+

0]

= y2r; x[2*(i+j+k

+ 2*s)

+

1]

= y2i;

x[2*(i+j+k + 3*s)

+

0]

= y3r; x[2*(i+j+k

+

3*s)

+

1]

= y3i;

}

}

}

C64x+ DSPLIB Reference

4-103

Page 131
Image 131
Texas Instruments TMS320C64X manual C64x+ Dsplib Reference 103