FFT算法C语言程序代码

2022-05-20 17:23:17   文档大全网     [ 字体:小 中 大 ] [ 阅读: ]

【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《FFT算法C语言程序代码》,欢迎阅读!
语言程序,算法,代码,FFT
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