DSP_fft16x16t

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

/* Determine the magnitude od the number of points to be transformed.

*/

/* Check whether we can use a radix4 decomposition or a mixed radix

*/

/* transformation, by determining modulo 2.

*/

/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ for (i = 31, m = 1; (npoints & (1 << i)) == 0; i−−, m++) ;

radix

=

m

&

1 ? 2 : 4;

norm

=

m

2;

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

/* The stride is quartered with every iteration of the outer loop. It */

/* denotes the seperation between any two adjacent inputs to the butter */ /* −fly. This should start out at N/4, hence stride is initially set to */

/* N. For every stride, 6*stride twiddle factors are accessed. The

*/

/* ”tw_offset” is the offset within the current twiddle factor sub−

*/

/* table. This is set to zero, at the start of the code and is used to

*/

/* obtain the appropriate sub−table twiddle pointer by offsetting it

*/

/* with the base pointer ”ptr_w”.

*/

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

stride

=

npoints;

tw_offset

=

0;

fft_jmp

=

6 * stride;

while (stride > radix)

{

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

/* At the start of every iteration of the outer loop, ”j” is set

*/

/* to zero, as ”w” is pointing to the correct location within the

*/

/* twiddle factor array. For every iteration of the inner loop

*/

/* 6 * stride twiddle factors are accessed. For eg,

*/

/*

 

 

 

 

*/

/* #Iteration of outer loop

# twiddle factors

#times cycled

*/

/*

1

6

N/4

1

*/

/*

2

6

N/16

4

*/

/* ...

 

 

 

*/

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

j= 0; fft_jmp >>= 2;

C64x+ DSPLIB Reference

4-109

Page 137
Image 137
Texas Instruments TMS320C64X manual C64x+ Dsplib Reference 109