10.源代码(C语言)
#include \
#include \#include \#include
#define PI 3.1415926
#define SAMPLENUMBER 128
void InitForFFT(); void MakeWave();
int INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];
float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER]; float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER]; main() {
int i;
InitForFFT();
MakeWave();
for ( i=0;i } { } fWaveR[i]=INPUT[i]; fWaveI[i]=0.0f; w[i]=0.0f; FFT(fWaveR,fWaveI); for ( i=0;i // break point DATA[i]=w[i]; void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]) { int x0,x1,x2,x3,x4,x5,x6,xx; int i,j,k,b,p,L; float TR,TI,temp; for ( i=0;i x0=x1=x2=x3=x4=x5=x6=0; x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01; x5=(i/32)&0x01; x6=(i/64)&0x01; xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6; } dataI[xx]=dataR[i]; for ( i=0;i for ( L=1;L<=7;L++ ) { /* for(1) */ b=1; i=L-1; while ( i>0 ) { b=b*2; i--; } /* b= 2^(L-1) */ for ( j=0;j<=b-1;j++ ) /* for (2) */ { p=1; i=7-L; while ( i>0 ) /* p=pow(2,7-L)*j; */ { p=p*2; i--; } p=p*j; for ( k=j;k<128;k=k+2*b ) /* for (3) */ { TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b]; dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p]; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p]; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p]; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p]; } /* END for (3) */ } /* END for (2) */ } /* END for (1) */ for ( i=0;i { w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]); } } /* END FFT */ void InitForFFT() { int i; for ( i=0;i } } void MakeWave() { int i; for ( i=0;i } } (二)第二部分 1.程序参数说明 extern void InitC5402(void) extern void OpenMcBSP(void) extern void CloseMcBSP(void) extern void READAD50(void) extern void WRITEAD50(void) void kfft(pr,pi,n,k,fr,fi,l,il): 基2快速傅立叶变换子程序,n为变换点数,应满足2的整数次幂,k为幂次(正整数); 数组x :输入信号数组,数据存放于地址为3000H~307FH存储 器中,转为浮点型后,生成x数组,长度128; 数组mo:FFT变换输出数组,长度128,浮点型,整型后,写入存储器中。 2.子程序流程图: 初始化输入数组排序计算第一层中间值计算层数计算对应层步长计算计算各层中间结果N计算层数=0?Y计算结果输出
相关推荐: