【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《FFT算法C语言程序代码》,欢迎阅读!
DIT-基2FFT的浮点C语言程序:
1、 生成旋转因子,复数结构,旋转因子Wn=exp(—j*2*pi/N) //twiFactor——指向旋转因子矩阵的指针 //wLen——FFT的长度
Struct complexData{ //定义一个复数结构 float re; float im; };
Void gen_w_r2(struct complexData *twiFactor,int wLen) {
int iFactor;
float stepFactor;
stepFactor=2.0*pi/wLen;
for(iFactor=0;iFactor〈(wLen>〉1);iFactor++) {
twiFactor[iFactor]。re=cos(stepFactor*iFactor); twiFactor[iFactor].im=sin(stepFactor*iFactor); pi*n/N),n=0,1,…,(N/2—1)
} }
2、在运行FFT之前,对输入序列进行倒序变换,代码如下: //bitRevData——指向位变换序列的指针 //revLen—-FFT长度
Void bit_rev(struct complexData *bitRevData,int revLen) {
struct complexData tempRev; int iRev,jRev,kRev,halfLen; halfLen=revLen>〉1;jRev=0;
for(iRev=0;iRev〈(revLen—1);iRev++) {
If(iRev) {
tempRev=bitRevData[jRev];
bitRevData[jRev]=bitRevData[iRev]; bitRevData[iRev]= tempRev; }
kRev=halfLen;
while(kRev〈=jRev) {
jRev=jRev—kRev; kRev=kRev>>1; } } }
//W[n]=exp(j*2*
3、FFT计算.有3个循环体,分别为a内循环,b中间循环,c外循环,内循环实现蝶形结计算,循环a和b完成所有的蝶形结运算,而循环c则表示完成FFT算法所需要的级数。 //x-—输入数据的指针 //w——旋转因子指针 //n-—FFT的长度
void sp_cfftr2_dit(float *x,float *w,short n) {
short n2,ie,ia,i,j,k,m; float rtemp,itemp,c,s;
n2=n; ie=1;
for(k=n;k〉1;k〉>=1) //loop c {
n2〉〉=1;ia=0;
for(j=0;j //loop b {
c=w[2*j]; s=w[2*j+1];
for(i=0;i;i++) //loop a {
m=ia+n2;
rtemp=c*x[2*m]+s*x[2*m+1]; itemp= c*x[2*m+1]-s*x[2*m]; x[2*m]=x[2*ia]—rtemp; x[2*m+1]=x[2*ia+1]-itemp; x[2*ia]=x[2*ia]+rtemp; x[2*ia+1]=x[2*ia+1]+itemp; ia++; } ia+=n2; }
ie〈<=1; } }
本文来源:https://www.wddqxz.cn/7c609bdd7c192279168884868762caaedd33bad1.html