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 |
|