c语言编程实现基2-fft,时间抽选基2FFT及IFFT算法C语言实现
/*时间抽选基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语言实现相关推荐
- c代码实现 ifft运算_月光软件站 - 编程文档 - 其他语言 - 时间抽选基2FFT及IFFT算法C语言实现...
正在学数字信号处理,感觉上学期信号与系统学得不扎实,因为当时只是死记公式,这学期数信老师提倡动手实践,觉得自己在编程中对公式理解得更加深刻了. 以下是我写的FFT,欢迎指教. /*时间抽选基2FFT及 ...
- 离散傅里叶变换及matlab实现(按时间抽选(DIT)的基-2 FFT算法(库利-图基算法))
转,傅里叶变换,很好的解释 很好的文章,可惜水平太差,还没有完全理解. 快速傅里叶的matlab实现 按时间抽选(DIT)的基-2 FFT算法(库利-图基算法) 傅里叶要用到的nn个复数,不是随机找的 ...
- 2.MATLAB利用“基2时间抽选法”实现FFT
通过基2时间抽选法的原理,编程实现基2(DIT)FFT 文章目录 题目重述 问题分析以及求解思路 程序代码 题目重述 问题分析以及求解思路 待完善(请耐心等待) 程序代码 %%数据倒位序 N=32; ...
- 按时间抽选(DIT)的基-2 FFT算法(库利-图基算法)C++程序
基-2 FFT算法的C++程序,按时间抽选.输入倒位序.输出自然顺序,N=2LN=2^LN=2L #include <complex>int fft(complex<double&g ...
- 基二FFT时间抽取和频域抽取算法
目录: 一.理解离散傅立叶变换(FFT结果的物理意义(编程参考用)) 二.基二频域算法原理 三.基二FFT的C语言实现(时域) 四.基二FFT的C语言实现(频域) ------------------ ...
- matlab基2时间抽选法,按时间抽取的基2FFT算法分析及MATLAB实现
电子技术研发ElectronicsR&D 电一子一技一术- 按时问抽取的基2FFT算法分析及MATLAB实现 张登奇李宏民李丹 (湖南理工学院信息与通信工程学院) 摘要:DFT是一种应用广泛的 ...
- c语言编程 完美数,用完美数的数字之美激发学生学习C语言编程的兴趣
崔孝凤 摘要:对于c语言的初学者来说,激发出学习c语言的兴趣至关重要,该文通过探讨完美数的多种实现方法的案例教学,同时列举完美数特有性质,激发学生的学习兴趣,提高教学质量. 关键词:c语言;完美数;案 ...
- 计算开机时间c语言编程,一个计算电脑开机时间长短的程序,还有点小问题,请VC99大哥来指教...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小弟我花了很长时间写了这个程序,目的是可以计算机电脑一个月的开机时间,比如说第一次开机3个小时,下一次开机还可以在3小时的基础上接着计时,这个程序,现在可 ...
- 用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 ...
最新文章
- openpyxl模块介绍
- java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过
- 框架:mybatis的缓存机制
- 项目简单实用方式_组合替代继承_状态决定行为
- 便携式不锈钢管道焊接机器人_为什么越来越多的不锈钢管件用不锈钢焊管制作...
- “QMYSQL: Unable to allocate a MYSQL object“ 解决方法
- 解决Spring自动装配中的循环依赖
- C#LeetCode刷题之#628-三个数的最大乘积( Maximum Product of Three Numbers)
- Jsp+Ssm+Mysql在线考试系统
- 量子计算机的系统论思考,量子计算机发展带来的思考..doc
- 使用ELK实时分析SSH暴力破解
- 麦亡9什么时候能装鸿蒙系统,距断供不到10天 麒麟9000即将绝版 华为大招来了:不止鸿蒙2.0...
- 极光推送--RegistrationID
- WPS中表格中上下线的磅数调整问题-三线表制作
- java SE复习笔记61
- c语言abcd=(ab cd),汇编语言编程求具有abcd=(ab+cd)^2 性质的4 位数并输出。例如3025=(30+25)2。(不是C语言)...
- 第五届A/B组 地宫取宝 JAVA
- Windows​服务器添加单IP不同段IP和整段IP
- vue使用echarts图表自适应的几种解决方案
- 自媒体免费编辑工具竞品分析 135编辑器乐观号媒号通三大功能优劣报告
热门文章
- 2013年6月北京上海CISA认证考试辅导研讨会
- MSM RF Driver Configuration
- 德汇律师事务所任命Ray Liu为北京办事处主管
- 事件处理机制之Gestures(手势)
- Visual Assist 10.9.2341 2019.07.11 最新版带特殊文件
- vultr所有服务器ping测试
- android系统设置中修改声音与振动,声效设置全在这了解手机声音和振动选项
- 吸尘器哪个牌子好?权威发布的十大品牌榜必须要了解
- 如何隐藏计算机上的盘符,如何隐藏整个磁盘?隐藏盘符及磁盘方法介绍
- OmniGraffle 制作表格和调整对象