This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

bit-reverse byMSP432P401R CCS

我想要做FFT,第一個步驟要先進行bit-reverse,我自己撰寫了一段程式碼,但我不知道我哪裡出錯,輸入的矩陣值與輸出的值並沒有達到bit-reverse的效果。

請問可以幫我看看我哪裡出錯了?

或是有建議的FFT和bit-reverse參考方法

以下為我的code及結果圖

/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include <math.h>

    int z[4];
    int i;
    int w[4] = {0,1,2,3};
    int vv[4] = {0,0,0,0};



int main(void)
{

    /* Halting WDT  */
    WDT_A_holdTimer();

    for(i = 0;i<4;i++)
    {
        z[i] = bitreverse(&w[i],&vv[i], 1024);
    }
    //z[i] = bitreverse(&w[i],&vv[i], 4);
//    z[1] = bitreverse(&w,&vv, 4);
}

void bitreverse(double *realpart,double *imagepart, int np)
{
    int index = 0;//index=bitreverse後位置
    int t = 0;//t=退位判定值
    int a = 0;
    double temp_r;//兩個位置交換後資料暫存處--實部
    double temp_i;//兩個位置交換後資料暫存處--虛部

    for(a = 0; a < np; a++)//從第0位置開始做bitreverse
    {
            if (index > a)//當bitreverse後位置大於原位置時,才進行資料交換,以防止交換兩次
            {
                temp_r = *(realpart+index);
                temp_i = *(imagepart+index);
                *(realpart+index) = *(realpart+a);
                *(imagepart+index) = *(imagepart+a);
                *(realpart+a) = temp_r;
                *(imagepart+a) = temp_i;
             }

             t = np/2;//每次退位判定值為最高位元值
             while (index >= t)//判定是否需要退位
             {
                index = index - t;
                t = t/2;
                if (t == 0 || index == 0) //防止最後一輪時,陷入無窮迴圈
                {
                break;
                }
             }
             index = index + t;
    }
    return;
}