/*时间抽选基2FFT及IFFT算法C语言实现*/

/*Author :Junyi Sun*/

/*Copyright 2004-2005*/

/*Mail:ccnusjy@yahoo.com.cn*/

#include

#include

#include

#define N 1000

/*定义复数类型*/

typedef struct{

double real;

double img;

}complex;

complex x[N], *W; /*输入序列,变换核*/

int size_x=0;     /*输入序列的大小,在本程序中仅限2的次幂*/

double PI;        /*圆周率*/

int main(){

int i,method;

void fft();    /*快速傅里叶变换*/

void ifft();

void initW();  /*初始化变换核*/

void change(); /*变址*/

void add(complex ,complex ,complex *); /*复数加法*/

void mul(complex ,complex ,complex *); /*复数乘法*/

void sub(complex ,complex ,complex *); /*复数减法*/

void divi(complex ,complex ,complex *);/*复数除法*/

void output();                            /*输出结果*/

system("cls");

PI=atan(1)*4;

printf("Please input the size of x:/n");

scanf("%d",&size_x);

printf("Please input the data in x[N]:/n");

for(i=0;i

scanf("%lf%lf",&x[i].real,&x[i].img);

initW();

printf("Use FFT(0) or IFFT(1)?/n");

scanf("%d",&method);

if(method==0)

fft();

else

ifft();

output();

return 0;

}

/*快速傅里叶变换*/

void fft(){

int i=0,j=0,k=0,l=0;

complex up,down,product;

change();

for(i=0;i< log(size_x)/log(2) ;i++){  /*一级蝶形运算*/

l=1<

for(j=0;j

for(k=0;k

mul(x[j+k+l],W[size_x*k/2/l],&product);

add(x[j+k],product,&up);

sub(x[j+k],product,&down);

x[j+k]=up;

x[j+k+l]=down;

}

}

}

}

/*快速傅里叶逆变换*/

void ifft(){

int i=0,j=0,k=0,l=size_x;

complex up,down;

for(i=0;i< (int)( log(size_x)/log(2) );i++){  /*一级蝶形运算*/

l/=2;

for(j=0;j

for(k=0;k

add(x[j+k],x[j+k+l],&up);

up.real/=2;up.img/=2;

sub(x[j+k],x[j+k+l],&down);

down.real/=2;down.img/=2;

divi(down,W[size_x*k/2/l],&down);

x[j+k]=up;

x[j+k+l]=down;

}

}

}

change();

}

/*初始化变换核*/

void initW(){

int i;

W=(complex *)malloc(sizeof(complex) * size_x);

for(i=0;i

W[i].real=cos(2*PI/size_x*i);

W[i].img=-1*sin(2*PI/size_x*i);

}

}

/*变址计算,将x(n)码位倒置*/

void change(){

complex temp;

unsigned short i=0,j=0,k=0;

double t;

for(i=0;i

k=i;j=0;

t=(log(size_x)/log(2));

while( (t--)>0 ){

j=j<<1;

j|=(k & 1);

k=k>>1;

}

if(j>i){

temp=x[i];

x[i]=x[j];

x[j]=temp;

}

}

}

/*输出傅里叶变换的结果*/

void output(){

int i;

printf("The result are as follows/n");

for(i=0;i

printf("%.4f",x[i].real);

if(x[i].img>=0.0001)printf("+%.4fj/n",x[i].img);

else if(fabs(x[i].img)<0.0001)printf("/n");

else printf("%.4fj/n",x[i].img);

}

}

void add(complex a,complex b,complex *c){

c->real=a.real+b.real;

c->img=a.img+b.img;

}

void mul(complex a,complex b,complex *c){ c->real=a.real*b.real - a.img*b.img; c->img=a.real*b.img + a.img*b.real;}void sub(complex a,complex b,complex *c){ c->real=a.real-b.real; c->img=a.img-b.img;}void divi(complex a,complex b,complex *c){ c->real=( a.real*b.real+a.img*b.img )/( b.real*b.real+b.img*b.img); c->img=( a.img*b.real-a.real*b.img)/(b.real*b.real+b.img*b.img);}

c语言编程实现基2-fft,时间抽选基2FFT及IFFT算法C语言实现相关推荐

  1. c代码实现 ifft运算_月光软件站 - 编程文档 - 其他语言 - 时间抽选基2FFT及IFFT算法C语言实现...

    正在学数字信号处理,感觉上学期信号与系统学得不扎实,因为当时只是死记公式,这学期数信老师提倡动手实践,觉得自己在编程中对公式理解得更加深刻了. 以下是我写的FFT,欢迎指教. /*时间抽选基2FFT及 ...

  2. 离散傅里叶变换及matlab实现(按时间抽选(DIT)的基-2 FFT算法(库利-图基算法))

    转,傅里叶变换,很好的解释 很好的文章,可惜水平太差,还没有完全理解. 快速傅里叶的matlab实现 按时间抽选(DIT)的基-2 FFT算法(库利-图基算法) 傅里叶要用到的nn个复数,不是随机找的 ...

  3. 2.MATLAB利用“基2时间抽选法”实现FFT

    通过基2时间抽选法的原理,编程实现基2(DIT)FFT 文章目录 题目重述 问题分析以及求解思路 程序代码 题目重述 问题分析以及求解思路 待完善(请耐心等待) 程序代码 %%数据倒位序 N=32; ...

  4. 按时间抽选(DIT)的基-2 FFT算法(库利-图基算法)C++程序

    基-2 FFT算法的C++程序,按时间抽选.输入倒位序.输出自然顺序,N=2LN=2^LN=2L #include <complex>int fft(complex<double&g ...

  5. 基二FFT时间抽取和频域抽取算法

    目录: 一.理解离散傅立叶变换(FFT结果的物理意义(编程参考用)) 二.基二频域算法原理 三.基二FFT的C语言实现(时域) 四.基二FFT的C语言实现(频域) ------------------ ...

  6. matlab基2时间抽选法,按时间抽取的基2FFT算法分析及MATLAB实现

    电子技术研发ElectronicsR&D 电一子一技一术- 按时问抽取的基2FFT算法分析及MATLAB实现 张登奇李宏民李丹 (湖南理工学院信息与通信工程学院) 摘要:DFT是一种应用广泛的 ...

  7. c语言编程 完美数,用完美数的数字之美激发学生学习C语言编程的兴趣

    崔孝凤 摘要:对于c语言的初学者来说,激发出学习c语言的兴趣至关重要,该文通过探讨完美数的多种实现方法的案例教学,同时列举完美数特有性质,激发学生的学习兴趣,提高教学质量. 关键词:c语言;完美数;案 ...

  8. 计算开机时间c语言编程,一个计算电脑开机时间长短的程序,还有点小问题,请VC99大哥来指教...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小弟我花了很长时间写了这个程序,目的是可以计算机电脑一个月的开机时间,比如说第一次开机3个小时,下一次开机还可以在3小时的基础上接着计时,这个程序,现在可 ...

  9. 用C语言编程计算下列表达式:s=1! 2...,2012年全国计算机等级二级C语言模拟试题及答案(3)...

    一.单项选择题1. 设int x=1,y=1;表达式(!x++ || y--)的值是_________ A.0 B. 1 C. 2 D.-1 2.main( ) {  int n; ( n=6*4,n ...

最新文章

  1. openpyxl模块介绍
  2. java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过
  3. 框架:mybatis的缓存机制
  4. 项目简单实用方式_组合替代继承_状态决定行为
  5. 便携式不锈钢管道焊接机器人_为什么越来越多的不锈钢管件用不锈钢焊管制作...
  6. “QMYSQL: Unable to allocate a MYSQL object“ 解决方法
  7. 解决Spring自动装配中的循环依赖
  8. C#LeetCode刷题之#628-三个数的最大乘积( Maximum Product of Three Numbers)
  9. Jsp+Ssm+Mysql在线考试系统
  10. 量子计算机的系统论思考,量子计算机发展带来的思考..doc
  11. 使用ELK实时分析SSH暴力破解
  12. 麦亡9什么时候能装鸿蒙系统,距断供不到10天 麒麟9000即将绝版 华为大招来了:不止鸿蒙2.0...
  13. 极光推送--RegistrationID
  14. WPS中表格中上下线的磅数调整问题-三线表制作
  15. java SE复习笔记61
  16. c语言abcd=(ab cd),汇编语言编程求具有abcd=(ab+cd)^2 性质的4 位数并输出。例如3025=(30+25)2。(不是C语言)...
  17. 第五届A/B组 地宫取宝 JAVA
  18. Windows​服务器添加单IP不同段IP和整段IP
  19. vue使用echarts图表自适应的几种解决方案
  20. 自媒体免费编辑工具竞品分析 135编辑器乐观号媒号通三大功能优劣报告

热门文章

  1. 2013年6月北京上海CISA认证考试辅导研讨会
  2. MSM RF Driver Configuration
  3. 德汇律师事务所任命Ray Liu为北京办事处主管
  4. 事件处理机制之Gestures(手势)
  5. Visual Assist 10.9.2341 2019.07.11 最新版带特殊文件
  6. vultr所有服务器ping测试
  7. android系统设置中修改声音与振动,声效设置全在这了解手机声音和振动选项
  8. 吸尘器哪个牌子好?权威发布的十大品牌榜必须要了解
  9. 如何隐藏计算机上的盘符,如何隐藏整个磁盘?隐藏盘符及磁盘方法介绍
  10. OmniGraffle 制作表格和调整对象