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.
我想要做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; }