我想要做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; }
Susan Yang:
下面的例程和文档应该是一个比较好的开始,希望对您有所帮助
该Demo直观地显示了从Educational BoosterPack插件模块MKII的板载麦克风实时采集的音频样本中计算出的512点Real FFT结果。该演示使用CMSIS DSP软件库中包含的Real FFT功能。
dev.ti.com/…/node
www.ti.com/…/slaa707a.pdf