




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题 目:8点基于DIF的FFT的实现初始条件: 具备数字信号处理的理论知识;具备Matlab编程能力;熟悉基于DIF的FFT的实现原理;提供编程所需要的计算机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、独立编写一个8点的基于DIF的FFT实现程序,不能使用matlab自带的FFT实现函数2、程序运行结果与matlab自带函数结果进行对比3、完成符合学校要求的设计说明书时间安排:一周,其中3天程序设计,2天程序调试指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要I1
2、Matlab软件简介11.1 Matlab语言的历史11.2 Matlab软件概况11.3 Matlab的特点12 快速傅里叶变换算法分析32.1 FFT简介32.2 按频率抽选的FFT算法33 程序设计63.1 程序设计思路63.2 要使用的Matlab函数64 程序流程图85 源程序95.1 直接调用FFT函数源程序95.2 FFT计算源程序96 程序运行结果分析116.1 程序运行结果116.2 结果分析127 课程设计心得体会13参考文献14致谢15摘要快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的快速算法,FFT算法通过利用旋转因子的性质,将一个大点数DFT化成几个小点数DFT
3、,就可以大大减少运算量。DIF-FFT是利用频率抽选的FFT算法,在Matlab中可以通过三重循环语句实现。关键词:FFT,蝶形运算,倒序排列1 Matlab软件简介1.1 Matlab语言的历史70年代后期,身为美国NewMexico大学计算机系系主任的CleveMoler发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。CleveMoler给这个接口程序取名为Matlab。1984年,为了推广Matlab在数值计算中的应用,Cleve Moler、Johon Little等正式成立了Math works公司,从
4、而把Matlab推向市场,并开始了对Matlab工具相等的开发设计。 1.2 Matlab软件概况Matlab是MatrixLaboratory的缩写,意为矩阵实验室。它具有强大的矩阵处理功能和绘图功能,进还能进行文字处理,绘图,建模仿真等功能。随着版本的不断升级,它在数值计算及符号计算功能上得到了进一步完善。Matlab已经发展成为多学科、多种工作平台的功能强大的大型软件。在欧美等高校,Matlab已经成为线性代数、自动控制理论、概率论及数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具。1.3 Matlab的特点Matlab有以下一些特点:Matlab的帮助功能很强
5、大,自带有详细的帮助手册,基于HTML的完整的帮助功能,也可以用help命令来得到帮助信息。程序语法与C语言类似,设计自由度大,方便我们编程。例如在Matlab里,用户无需对变量预定义就可使用。大量数学函数已经定义好,并且有很强的用户自定义函数的能力。Matlab有高级的程序环境,但程序环境很简单易用,有与其它语言编写的程序结合和输入输出格式化数据的能力;Matlab既具有结构化的控制语句,又有面向对象编程的特性。还有一个原因使Matlab受人们欢迎的,那就是Matlab源程序具有很大的开放性。除了内部函数以外,所有Matlab的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修
6、改以及加入自己的文件构成新的工具箱。Matlab有强大的的图形绘制功能。在Matlab里,数据可视化的操作非常简单易用。Matlab还有较强的编辑图形界面的能力。可以用来声成图解和可视化的二维、三维图。Matlab还拥有功能强大的各种工具箱。其工具箱分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如(control、signal proceessing 、commumnication) toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,
7、所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究,能极大地促进我们的学习研究工作。虽然Matlab有很多优点,但它也有一些缺点,比如:由于Matlab的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。2 快速傅里叶变换算法分析2.1 FFT简介快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的快速算法,他在傅里叶变换理论上并没有新的发现,但是却极大的减少了离散傅里叶变换的运算量。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。1965年,库利和图基合作在Mathematics of Computation上发表了论文An Algori
8、thm for the Machine Computation of Complex Fourier Series,提出了按时抽取的快速傅立叶变换算法,也称库利-图基算法,被视为DSP走向应用的开端。从此,对快速傅里叶变换算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。之所以需要快速傅里叶变换,是因为离散傅里叶变换的运算量较大。离散傅里叶变换的公式为:正变换:n=0,1,2,N-1逆变换: n=0,1,2,N-1一般情况下WN,x(n),X(k)都是复序列,计算一个完整的N点DFT需要N2次复数乘法与N-1次复数加法,当N极大时运算量与N2成正比,运算量将过于巨
9、大,不方便应用。而FFT算法通过利用旋转因子的性质,将一个大点数DFT化成几个小点数DFT,就可以大大减少运算量。2.2 按频率抽选的FFT算法FFT算法主要有两种,按时间抽选的FFT的算法(DIT-FFT)和按频率抽选的FFT算法(DIF-FFT)。这里主要介绍DIF-FFT。DIF-FFT算法是将输入序列x(k)分成前后两个部分。k为偶数k为奇数由于,则所以k为偶数k为奇数把k按奇数和偶数分, r=0,1,N/2-1将X(k)分为两部分:令,可得,r=0,1,2,N/2-1由此可得频率抽选法蝶形运算单元,如图2.1所示图2.1频率抽选法蝶形运算单元这样可以把一个N点DFT分解为两个N/2点
10、DFT的组合,两个N/2点DFT还可以继续分解,设N=2M,则经过M-1次分解,最后可以分解成为N/2个两点DFT,可以由一个蝶形运算来求解。例如8点DIF-FFT蝶形运算图如图2.2图2.2 8点DIF-FFT运算流图。输出序列的排列规律不是从小到大按顺序的,而是按照倒叙规则排序的,即先将0-7转换为二进制数,然后将二进制数左右倒序,再转为十进制就可以得到新的数列,即:0,4,2,6,1,5,3,7。3 程序设计3.1 程序设计思路由8点FFT运算的蝶形图可知,FFT运算的基本单元是一个个蝶形运算单元,一个蝶形运算单元可以用几条语句实现,然后可以用循环语句来进行各个蝶形运算单元的计算。8点F
11、FT的蝶形运算有3级,第1级有1组,每组4个蝶形运算单元,旋转因子是、;第2级有2组,每组2个蝶形运算单元,循环因子是,;第3级有4组,每组1个蝶形运算单元,旋转因子是。总结运算规律,来设定循环语句。第一层循环在1到3级间循环,循环变量mm=1,2,3。旋转因子下标Nm=24-mm=8,4,2。第二层循环在该级的各组间循环,每级有2mm-1组,每组第一行对应的x值为:第1级是x(0),第2级是x(0),x(4),第3级是x(0),x(2),x(4),x(6)。设第二层循环变量为p,则在Matlab中,p=0:Nm:7。第三层循环在该组的各个蝶形运算单元间循环,每组有Nm/2个蝶形运算单元,则循
12、环变量k从1到Nm/2,旋转因子是,每次蝶形运算跨越的行数是Nm/2,则参加蝶形运算的x值为x(k+p)和x(k+p+Nm/2)。循环完成后则FFT运算完成,再将x序列按倒叙规律重新排列就可以得到X(k)序列。3.2 要使用的Matlab函数程序设计思路已经有了,结下来分析如何在Matlab里具体实现该程序。Matlab的语法并不困难,掌握了所需的函数后就能很快设计出程序了,这里主要介绍一下要用到的函数。直接用Matlab计算N点FFT可以用函数fft(x,N),在此课设中用来和自编程序对照结果。还用到一些计算函数,如exp(x)计算e的x次方,abs(x)计算x绝对值。倒序运算主要用到的函数
13、有,dec2bin(x,m),是把十进制序列x转换为m位二进制数,bin2dec(x,m)也是类似功能。fliplr函数是将一个矩阵左右颠倒,则程序中求倒序的语句就是:d=bin2dec(fliplr(dec2bin(0:N-1,m)+1;y=x(d);x是N点序列,执行完语句后,y序列就是x序列的倒序排列。计算完成结果要绘图输出,要用到的函数是subplot(a,b,c),功能是让下面的语句绘制a行b列图形中的第c个。绘图用stem(x,y)函数,是以x序列为横轴,y序列为纵轴,绘制离散的图像。绘完图可以用title函数给图像命名。4 程序流程图开始设定输入序列求出蝶形运算级数m=3循环mm
14、=1到3级蝶形运算求该级旋转因子下标Nm循环该级1到2mm-1组蝶形运算循环该组1到23-mm个蝶形运算计算一个蝶形运算单元序列倒序后绘图结束YYYNNN图4.1 程序流程图5 源程序5.1 直接调用FFT函数源程序以下是直接调用Matlab自带的FFT函数计算的源程序,其输入序列为x=0 2 4 6 0 2 4 6,求出FFT结果y=X(k)后对其幅值和原序列进行绘图。N=8;%FFT点数为8点n=0:N-1;%横坐标序列x=0 2 4 6 0 2 4 6 ;%设定输入x(n)序列y=fft(x,N)%调用FFT函数求X(k)序列,y=X(k)mag=abs(y);%求幅值subplot(2
15、,1,1);stem(n,x);%绘制原序列title(输入序列x(n);subplot(2,1,2);stem(n,mag);%绘制X(k)序列title(8点调用FFT函数计算结果)5.2 FFT计算源程序以下是本次课程设计编写的FFT计算程序,输入序列和5.1的程序一样,都是x=0 2 4 6 0 2 4 6,y等于FFT输出序列X(k),最后对y的幅值和原序列进行绘图。N=8;%设定FFT点数为8点n=0:N-1;%横坐标序列x=0 2 4 6 0 2 4 6 ;%设定输入序列x(n)x1=x;%暂存x序列到x1m=log2(N);%求蝶形运算级数mfor mm=1:m%循环mm=1到
16、3级蝶形运算Nm=2(m-mm+1);%求该级旋转因子下标Nm,Nm=8,4,2 for p=0:Nm:N-1 %循环该级1到2mm-1组蝶形运算 for k=1:Nm/2 %循环该组1到23-mm个蝶形运算 kp=k+Nm/2+p;%确定蝶形运算对应单元下标 a=x(kp);%暂存x(xp) x(kp)=(x(k+p)-a)*exp(-j*2*pi*(k-1)/Nm); x(k+p)=x(k+p)+a;%进行蝶形运算 end endendd=bin2dec(fliplr(dec2bin(0:N-1,m)+1;%把0-7倒序排列y=x(d)%y=x序列的倒序,即y=X(k)mag=abs(y)
17、;%求y幅值x=x1;%x恢复成原序列subplot(2,1,1);stem(n,x);%绘制原序列title(输入序列x(n);subplot(2,1,2);stem(n,mag);%绘制X(k)序列title(8点FFT计算结果)6 程序运行结果分析6.1 程序运行结果首先在Matlab中输入源程序,然后保存,选择Debug菜单中的Run执行程序。如图6.1:图6.1 Matlab界面首先运行程序1,即直接调用Matlab自带的FFT函数计算。运行结果如图6.2所示。y序列即X(k)序列为y =24 0 -8+8i 0 -8 0 -8-8i 0。图6.2调用FFT函数运行结果1然后是用自己
18、编写的FFT计算函数,运行得到如图6.3所示结果。y序列即X(k)序列为y =24 0 -8+8i 0 -8 0 -8-8i 0。图6.3运行结果26.2 结果分析通过比较图6.2和图6.3可以看出,两者的FFT结果完全一样,可以证明编写的FFT程序正确,达到了课程设计的任务要求。而且本程序不仅可以计算8点FFT,也可以计算N点FFT(N=2m),经测试结果也是正确的。7 课程设计心得体会通过Matlab一周以来的学习研究,我对Matlab有了初步的认识,我掌握了Matlab的基本操作,并学会了用Matlab解决一些电路和数学上的问题,下面是我具体的一些体会Matlab功能非常强大,几乎可以计
19、算我们目前所遇到的任何问题,不仅可以计算数学问题,也可以用来解决电路等其他学科的各种问题。而且我们可以自编函数,从而可以解决更多样的问题。但以目前我们的知识,只能掌握Matlab的一小部分功能,在以后的学习中,我还需要继续学习Matlab的相关知识。Matlab虽然功能非常强大,但其操作却非常简单,它的语法类似于我们以前学过的C语言,使我很容易上手,而其语法比C语言更为自由,限制更少,语法类似于自然语言,简洁而智能化,使我可以很容易的编写程序且不容易出错。关于绘图的操作则比C语言简单得多,用几条简单的语句就可以绘出各种曲线、图形,使我们的学习研究变的非常方便。通过本次课程设计我掌握了FFT的编程方法,对FFT有了更深刻的了解。我认为学习Matlab的关键在于函数,只要掌握了函数的用法,那么就能很快的编出程序。而Matlab的难点也正是函数,因为Matlab拥有大量的函数,仅仅基本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF 2268-2025逆反射计量术语及定义
- 开学第一天记事话题作文(8篇)
- 个人委托服务协议
- ××中学项目评估规定
- 第一次登台表演:记事作文10篇
- 证券投资分析实战模拟题及答案
- 读鲁滨逊漂流记心得体会读后感类型(8篇)
- 2025年安徽省公务员录用考试公安专业科目考点精讲试卷
- 2025年报检员资格考试试卷:进出口商品检验检疫流程
- 2025年会计职称考试《初级会计实务》章节重难点突破高分突破试题
- 2025年陕西省中考数学真题试卷及答案解析
- 呼吸机的维护与保养标准流程
- 2025年北方华创招聘笔试参考题库含答案解析
- 期末综合试题 2024-2025学年下期初中英语人教版七年级下册(新教材)
- 2025年全国新高考I卷高考全国一卷真题英语试卷(真题+答案)
- 高中生物学业水平合格性考试:人教版必修1+必修2必背考点
- 公共组织绩效评估-形考任务三(占10%)-国开(ZJ)-参考资料
- 2025年广东高中学业水平合格性考试化学试卷试题(含答案解析)
- 23J916-1 住宅排气道(一)
- JT∕T 795-2023 事故汽车修复技术规范
- 趣识古文字智慧树知到期末考试答案章节答案2024年吉林师范大学
评论
0/150
提交评论