FFT算法C语言程序代码

时间:2022-05-20 17:23:17 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
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 twiFactorint wLen)

int iFactor;

float stepFactor;

stepFactor=2.0pi/wLen;

for(iFactor=0;iFactor(wLen>1iFactor++ {

twiFactor[iFactorre=cosstepFactoriFactor) twiFactor[iFactor].im=sin(stepFactoriFactor); pi*n/Nn=01(N/21)



2、在运行FFT之前,对输入序列进行倒序变换,代码如下: //bitRevData——指向位变换序列的指针 //revLen-FFT长度

Void bit_rev(struct complexData bitRevDataint revLen)

struct complexData tempRev int iRevjRevkRevhalfLen; halfLen=revLen>1jRev=0;

for(iRev=0iRev(revLen1;iRev++ {

IfiRev {

tempRev=bitRevData[jRev

bitRevData[jRev]=bitRevData[iRev]; bitRevDataiRev= tempRev }

kRev=halfLen

while(kRev=jRev

jRev=jRevkRev; kRev=kRev>>1;

//Wn=exp(j2




3FFT计算.3个循环体,分别为a内循环,b中间循环,c外循环,内循环实现蝶形结计算,循环ab完成所有的蝶形结运算,而循环c则表示完成FFT算法所需要的级数。 //x-—输入数据的指针 //w——旋转因子指针 //n-FFT的长度

void sp_cfftr2_ditfloat *x,float wshort n

short n2ie,ia,ijkm; float rtemp,itempcs;

n2=n; ie=1;

fork=n;k1k>=1 //loop c {

n2=1;ia=0;

for(j=0j //loop b {

c=w2j] s=w2*j+1;

fori=0;ii++ //loop a

m=ia+n2

rtemp=cx2m]+sx[2*m+1; itemp= c*x2m+1-s*x2*m; x2m=x2*ia]—rtemp x[2m+1=x2ia+1]-itemp; x[2ia]=x2*ia+rtemp; x2*ia+1]=x[2*ia+1]+itemp ia++ ia+=n2; }

ie<=1;


本文来源:https://www.wddqw.com/doc/7c609bdd7c192279168884868762caaedd33bad1.html