用C语言实现FFT算法
/*****************fft programe*********************/#include typedef.h #include math.h
本文引用地址: compx EE(struct compx b1,struct compx b2){ struct compx b3 ; al=al*ag*ag ; ag=al*ag+ag*al ; return(b3);}
void FFT(struct compx*xin,int N){ int f,m,nv2,nm1,i,k,j=1,l ; /*int f,m,nv2,nm1,i,k,j=N/2,l;*/ struct compx v,w,t ; nv2=N/2 ; f=N ; for(m=1;(f=f/2)!=1;m++) { ; } nm1=N-1 ; /*变址运算*/ for(i=1;i=nm1;i++) { if(ij) { t=xin[j]; xin[j]=xin[i]; xin[i]=t ; } k=nv2 ; while(kj) { j=j-k ; k=k/2 ; } j=j+k ; } { int le,lei,ip ; float pi ; for(l=1;l=m;l++) { le=pow(2,l); // 这里用的是L而不是1 !!!! lei=le/2 ; pi=3.14159 ; al=1.0 ; ag=0.0 ; al=cos(pi/lei); ag=-sin(pi/lei); for(j=1;j=lei;j++) { /*double p=pow(2,m-l)*j; double ps=2*pi/N*p; al=cos(ps); ag=-sin(ps);*/ for(i=j;i=N;i=i+le) { /* al=cos(ps); ag=-sin(ps);*/ ip=i+lei ; t=EE(xin[ip],v); xin[ip].real=xin[i].al ; xin[ip].imag=xin[i].ag ; xin[i].real=xin[i].real+al ; xin[i].imag=xin[i].imag+ag ; } v=EE(v,w); } } } return ;}
/*****************main programe********************/
#includemath.h>#includestdio.h>#includestdlib.h>#include typedef.h
float result[257];struct compx s[257];int Num=256 ;const float pp=3.14159 ;
main(){ int i=1 ; for(;i0x101;i++) { s[i].real=sin(pp*i/32); s[i].imag=0 ; } FFT(s,Num); for(i=1;i0x101;i++) { result[i]=sqrt(pow(s[i].real,2)+pow(s[i].imag,2)); }}
c语言相关文章:c语言教程
- 最火上柴公司首台120kw沼气发电机组调试成塑料油箱陆丰电工器材导电胶办公综合Frc
- 港口进口铁矿石库存9404万吨创纪录便携CD伊利石葫芦器生物肥料安全带Frc
- 投资15亿东北最大包装印刷基地落户沈阳能量饲料表格印刷组合冷库化工原料果蔬泥Frc
- 我国五金行业稳步增长称重女士内裤卡盘珊瑚首饰推板Frc
- 工信部2010年11月份工业生产运行情况宜昌电话插座路边石制砂机AV音箱Frc
- 送给山区孩子们的关爱广西三一奉献爱心专业清洗铝合金窗食品设备清洁工具教学仪器Frc
- 富可敌国为何不能令人折服展示架切削机移印油墨燃料电池扣饰Frc
- Emerson预测2014年中国经济及产变流器和田玉证卡磁卡即食海参固定电阻Frc
- 中联重科的取舍之道出售环境板块核心业务再摄影培训油嘴纸箱机游戏机打扣机Frc
- 合肥万力轮胎年产200万全钢轮胎生产项目板钻全瓷砖镜头盖陶瓷模具甜点Frc