FFT 高速傅里叶计算sp_cfftr2_dit 源码的一些疑问

FFT 快速傅里叶计算sp_cfftr2_dit 源码的一些疑问
本例是从基于TI DSP通用算法实现中Example3-3程序,执行的是浮点基-2FFT C代码。不知道本代码是从TI网站上下载的还是作者自己编写的,我看了之后总觉得有些问题:循环a是代表一共需要几级运算,第二级循环是确定本级的旋转因子,在第三级遍历使用相同的旋转旋转因子的蝶形结进行运算。请注意这个地方

                 m = ia + n2;
                rtemp = c * x[2*m] + s * x[2*m+1];
                itemp = c * x[2*m+1] - s * x[2*m];

在第一次循环的时候,ia = 0,n2 = n/2,难道不会越界吗?更何况后来ia还要增加。

/****************************************************************/
/*    x --- pointer to input data array in normal order    */
/*    w --- pointer to the twiddle factor array        */
/*    n --- length of FFT                    */
/****************************************************************/

void sp_cfftr2_dit(float *x, float *w, short n)
{
    short n2, ie, ia, i, j, k, m;
    float rtemp, itemp, c, s;
    
    n2 = n; ie = 1;
    for(k=n; k > 1; k >>= 1){                /*** Loop (c) ***/
        n2 >>= 1; ia = 0;
        for(j=0; j < ie; j++){                /*** Loop (b) ***/
            c = w[2*j];
            s = w[2*j+1];
            for(i=0; i < n2; i++){            /*** Loop (a) ***/
                m = ia + n2;
                rtemp = c * x[2*m] + s * x[2*m+1];
                itemp = c * x[2*m+1] - s * x[2*m];
                x[2*m] = x[2*ia] - rtemp;
                x[2*m+1] = x[2*ia+1] - itemp;
                x[2*ia] = x[2*ia] + rtemp;
                x[2*ia+1] = x[2*ia+1] + itemp;
                ia++;
            }                     
            ia += n2;
        }    
        ie <<= 1;
    }    
}

------解决方案--------------------
FFT长度和缓冲区大小的关系,这段代码里,看不出来,所以无法确定
你可以测试一下,看会不会越界。
------解决方案--------------------
>ia = 0,n2 = n/2,难道不会越界吗?
ia<n2,所以ia+n2<2*n2=n,所以不会越界。
>更何况后来ia还要增加。
第一次循环的时候,ie==1,所以第二层循环只会迭代1次。

你如果想要学习FFT的话,先去学习FFT的递归写法,把那个搞懂了再来看这个代码。这个代码是递归算法的非递归写法。