快速傅里叶变换FFT的C语言实现及应用(2)
Wr 的确定N 蝶形运算两节点的第一个节点为k值,表示成L位二进制数,左移L – m 输入序列x(n) : N个存储单元 r的二进制数。 位,把右边空出的位置补零,结果为 系数 :N / 2个存储单元
4)存储单元
快速傅立叶变换的C语言实现方法
rN 有了傅立叶变换,我们可以从信号的频域特征去分析信号。尤其在无线通信系统 中,傅里叶变换的重要性就更加明显了,无论是设计者还是测试工程师,在工作中都会和傅立叶变换打交道。
W我们要衡量一个处理器有没有足够的能力来运行FFT算法,根据以上的简单介绍可以得出以下两点:
1. 处理器要在一个指令周期能完成乘和累加的工作,因为复数运算要多次查表相乘
才能实现。
2. 间接寻址,可以实现增/减1个变址量,方便各种查表方法。FFT要对原始序列进
行反序排列,处理器要有反序间接寻址的能力。
下面为一份FFT(快速傅立叶变换)的源码(基于C) /************FFT***********/ #include
#define N 1000 typedef struct {
double real;/*实部*/ double img;/*虚部*/ }complex;
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(); /*输出结果*/
complex x[N], *W;/*输出序列的值*/
int size_x=0;/*输入序列的长度,只限2的N次方*/ double PI;
int main() {
int i,method;
system(\
PI=atan(1)*4;/*pi等于4乘以1.0的正切值*/
printf(\ /*输入序列的长度*/ scanf(\
printf(\ /*输入序列对应的值*/ for(i=0;i scanf(\ initW(); /*选择FFT或逆FFT运算*/ printf(\ scanf(\ if(method==0) fft(); else ifft(); output(); system(\ return 0; } /*进行基-2 FFT运算*/ 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(\ for(i=0;i printf(\ if(x[i].img>=0.0001) printf(\ else if(fabs(x[i].img)<0.0001) printf(\ else printf(\ } } 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) {
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




