TI中文支持网
TI专业的中文技术问题搜集分享网站

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;
}

Susan Yang:

下面的例程和文档应该是一个比较好的开始,希望对您有所帮助

该Demo直观地显示了从Educational BoosterPack插件模块MKII的板载麦克风实时采集的音频样本中计算出的512点Real FFT结果。该演示使用CMSIS DSP软件库中包含的Real FFT功能。

dev.ti.com/…/node

www.ti.com/…/slaa707a.pdf

赞(0)
未经允许不得转载:TI中文支持网 » bit-reverse byMSP432P401R CCS
分享到: 更多 (0)