免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基2的DIT蝶形算法源代码及注释如下: /*FFT*/ /整个程序输入和输出利用同一个空间xN,节约空间 #include #include #include #define N 1000 /定义输入或者输出空间的最大长度 typedef struct double real; double img; complex; /定义复数型变量的结构体 void fft(); /快速傅里叶变换函数声明 void initW(); /计算W(0)W(size_x-1)的值函数声明 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 xN,*W; /*输出序列的值*/ int size_x=0; /*输入序列的长度,只限2的N次方*/ double PI; /pi的值 int main() int i; system(cls); PI=atan(1)*4; printf(Please input the size of x:n); /*输入序列的长度*/ scanf(%d,&size_x); printf(Please input the data in xN:(such as:5 6)n); /*输入序列对应的值*/ for(i=0;isize_x;i+) scanf(%lf %lf,&xi.real,&xi.img); initW(); /计算W(0)W(size_x-1)的值 fft(); /利用fft快速算法进行DFT变化 output(); /顺序输出size_x个fft的结果 return 0; /*进行基-2 FFT运算,蝶形算法。这个算法的思路就是, 先把计算过程分为log(size_x)/log(2)-1级(用i控制级数); 然后把每一级蝶形单元分组(用j控制组的第一个元素起始下标); 最后算出某一级某一组每一个蝶形单元(用k控制个数,共l个)。*/ void fft() int i=0,j=0,k=0,l=0; complex up,down,product; change(); /实现对码位的倒置 for(i=0;ilog(size_x)/log(2);i+) /循环算出fft的结果 l=1i; for(j=0;jsize_x;j+=2*l) /算出第m=i级的结果【i从0到(log(size_x)/log(2))-1】 for(k=0;kl;k+) /算出第i级内j组蝶形单元的结果 /算出j组中第k个蝶形单元 mul(xj+k+l,W(size_x/2/l)*k,&product); /*size/2/l是该级W的相邻上标差,l是该级该组取的W总个数*/ add(xj+k,product,&up); sub(xj+k,product,&down); xj+k=up; /up为蝶形单元右上方的值 xj+k+l=down; /down为蝶形单元右下方的值 void initW() /计算W的实现函数 int i; W=(complex *)malloc(sizeof(complex) * size_x); /*申请size_x个复数W的空间(这部申请的空间有点多,实际上只要申请size_x/2个即可)*/ for(i=0;i(size_x/2);i+) /*预先计算出size_x/2个W的值,存放,由于蝶形算法只需要前size_x/2个值即可*/ Wi.real=cos(2*PI/size_x*i); /计算W的实部 Wi.img=-1*sin(2*PI/size_x*i); /计算W的虚部 void change() /输入的码组码位倒置实现函数 complex temp; unsigned short i=0,j=0,k=0; double t; for(i=0;i0) j=j1; if(ji) temp=xi; xi=xj; xj=temp; void output() /输出结果实现函数 int i; printf(The result are as followsn); for(i=0;i=0.0001) /如果虚部的值大于0.0001,输出+jx.img的形式 printf(+j%.4fn,xi.img); else if(fabs(xi.img)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); /获取相除结果的虚部 由于输入序列和输出序列存储(包括中间结果)在同一个空间数组x【size_x】,故每进行一个蝶形算法,相应的存储单元有两个值被替换。该程序框图如下:开始计算出前size_x/2个exp(-j*2*k/size_x)个值,即W的值输入序列对应值(例如5+j3,输入5 3)输入序列长度size_x飞级
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢管市场前景预测与推销策略研究报告
- 铅笔项目可行性研究报告
- 高分子材料制品项目可行性研究报告模板范文(立项备案项目申请)
- 《护理心理学》试题及参考答案
- 2025年成都百万职工技能大赛(电梯安装维修工)备赛试题库(含答案)
- 2020-2025年健康管理师之健康管理师三级通关考试题库带答案解析
- 2020-2025年一级造价师之建设工程造价管理题库附答案(典型题)
- 滴灌地滴水协议书
- 东方航空协议书航空
- 宠物跑步机玩具创新创业项目商业计划书
- 国家安全教育高教-第六章坚持以经济安全为基础
- 做一个有责任心和执行力的人课件
- 论企业文化建设-以阿里巴巴为例 8000
- 非生物因素对某种动物的影响实验教案
- GRS生产管理手册及程序文件
- 4D团队领导力(PPT页)
- 红十字知识课件
- 大学学院班级量化考核实施细则
- 精装修工程施工实用标准化
- 图文详解AP1000核电站
- 化工技术经济分析与评价实际案例
评论
0/150
提交评论