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