DSP_fft
4-100
_nassert((int)x % 8 == 0);
_nassert((int)y % 8 == 0);
_nassert((int)w % 8 == 0);
_nassert(n >= 16);
_nassert(n < 32768);
#endif
/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */
/* Perform initial stages of FFT in place w/out digit reversal. */
/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */
#ifndef NOASSUME
#pragma MUST_ITERATE(1,,1);
#endif
for (stride = n, t = 0; stride > 4; stride >>= 2)
{
/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */
/* Perform each of the butterflies for this particular stride. */
/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */
s = stride >> 2;
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
/* stride represents the seperation between the inputs of the radix */
/* 4 butterfly. The C code breaks the FFT, into two cases, one when */
/* the stride between the elements is greater than 4, other when */
/* the stride is less than 4. Since stride is greater than 16, it */
/* can be guaranteed that ”s” is greater than or equal to 4. */
/* In addition, it can also be shown that the loop that shares this */
/* stride will iterate at least once. The number of times this */
/* loop iterates depends on how many butterflies in this stage */
/* share a twiddle factor. */
/*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−*/
#ifndef NOASSUME
_nassert(stride >= 16);
_nassert(s >= 4);
#pragma MUST_ITERATE(1,,1);
#endif
for (i = 0; i < n; i += stride)