本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
{
sin_tab[i]=sin(PI*2*i/N);//建立正余弦函数表 cos_tab[i]=cos(PI*2*i/N); } }
为了获得FFT运算中需要的全部旋转因子,需要分别存储正弦表和余弦表,且每个表长度为N,对应于0°~180°。
4.6 按时间抽取法的FFT程序
void FFT(float Xr[N],float Xi[N]) //时间抽取法FFT程序,要求采样 //点数N为2的整数幂次方
{ //Xr[],Xi[]分别为输入序列的实 //部和虚部
int S,B; //S为旋转因子的幂数,B为蝶形运算输入数据的距离,也即各 //旋转因子的个数 int m,j,k; float X,Y;
finv(N,Xr,Xi); //倒序运算函数,对输入序列倒序 for(m=1;m<=Mum;m++) {
B=(int)(pow(2,m-1)+0.5); //B=2^(m-1)
for(j=0;j<B;j++) //每级需要进行B种蝶形运算 {S=j*(int)(pow(2,Mum-m)+0.5);
for(k=j;k<=N-1;k+=(int)(pow(2,m)+0.5))
{ //结果的实部和虚部分别存储在原实部和虚部位置 X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S]; Y=Xi[k+B]*cos_tab[S]-Xr[k+B]*sin_tab[S]; Xr[k+B]=Xr[k]-X; Xi[k+B]=Xi[k]-Y; Xr[k]=Xr[k]+X; Xi[k]=Xi[k]+Y; } } }
在这个时间抽取法FFT程序中,要求采样点数N为2的整数幂次方,每级需要进行B种蝶形运算,每种蝶形运算在某一级中需要进行N/pow(2,m)次蝶形运算,结果的实部和虚部分别存储在原实部和虚部位置。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于dsp的快速傅里叶变换程序设计(17)在线全文阅读。
相关推荐: