DSP_fft16x16t
xl0_1 | = x_2 | − x_l1_2; | xl1_1 | = x_3 | − x_l1_3; |
xh20_0 | = x_h2_0 + x_l2_0; | xh21_0 | = x_h2_1 + x_l2_1; | ||
xh20_1 | = x_h2_2 | + x_l2_2; | xh21_1 | = x_h2_3 | + x_l2_3; |
xl20_0 | = x_h2_0 | − x_l2_0; | xl21_0 | = x_h2_1 | − x_l2_1; |
xl20_1 | = x_h2_2 | − x_l2_2; | xl21_1 | = x_h2_3 | − x_l2_3; |
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
/* Derive output pointers using the input pointer ”x” */
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
x0 = x;
x2 = x0;
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
/* When the twiddle factors are not to be reused, j is */
/* incremented by 12, to reflect the fact that 12 half words */
/* | are consumed in every | iteration. The input | data pointer | */ |
/* | increments by 4. Note | that within a stage, | the stride | */ |
/* | does not | change and hence the offsets for the other three */ | |
/* | legs, 0, | h2, l1, l2. | */ |
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/ j += 12;
x += 4;
predj = (j − fft_jmp); if (!predj) x += fft_jmp; if (!predj) j = 0;
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
/* These four partial | results can be re−written to show | */ | |
/* the underlying DIF structure similar to DSP_radix2 as | */ | ||
/* follows: |
|
| */ |
/* |
|
| */ |
/* X(4k) = (x(n)+x(n + N/2)) + (x(n+N/4)+ x(n + 3N/4)) | */ | ||
/* X(4k+1)= (x(n)−x(n + N/2)) −j(x(n+N/4) − x(n + 3N/4)) | */ | ||
/* x(4k+2)= (x(n)+x(n + N/2)) − (x(n+N/4)+ x(n + 3N/4)) | */ | ||
/* X(4k+3)= (x(n)−x(n + N/2)) +j(x(n+N/4) − x(n + 3N/4)) | */ | ||
/* |
|
| */ |
/* which leads to the real and imaginary values as foll: | */ | ||
/* |
|
| */ |
/* y0r = x0r + x2r + | x1r + x3r | = xh0 + xh20 | */ |