课设内容.docx
- 文档编号:16266462
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:16
- 大小:194.82KB
课设内容.docx
《课设内容.docx》由会员分享,可在线阅读,更多相关《课设内容.docx(16页珍藏版)》请在冰点文库上搜索。
课设内容
目录
第一章Matlab软件介绍1
1.1Matlab概述1
1.2Matlab桌面2
第二章快速傅里叶变换3
2.1快速傅里叶变换概述3
2.2快速傅里叶变换原理3
2.3DIT-FFT原理3
2.3.1DIT-FFT思路3
2.3.2蝶形运算4
2.4DIT-FFT的运算规律及编程思想5
第三章DIT-FFT程序设计7
3.18点DIT-FFT程序设计7
3.216点DIT-FFT程序设计8
第四章程序设计心得11
参考文献12
第一章Matlab软件介绍
1.1Matlab概述
Matlab是MathWorks公司的产品,是一个为科学和工程计算而专门设计的高级交互式放的软件包。
Matlab环境集成了图示与精确的数值计算,是一个可以完成各种计算和数据处理可视化的、强有力的、易于使用和理解的工具。
Matlab已被证明是为解决数学、物理、化学、工程、医药、金融和其他涉及复杂数值计算的应用领域的一个十分灵活的、便于使用的工具,也是数学、数值分析和工程等课程教学的一个优秀的教育工具。
这个程序被世界各地高等学院广泛使用,在工业应用中也很流行,Matlab使用于PC到超级计算机以及大多数诸如PC、Macintosb和UNIX等平台。
Matlab中的命令式用于数学和工程中使用的十分接近的符号来表示描述的。
例如:
为解用矩阵/向量形式写作Ax=b的一组线性方程,首先生成系数矩阵A和右侧的b,然后简单的打入x=A\b即可。
用相似的方法,可以使用简短的符号来求解诸如常微分方程的解、一个矩阵的特征值和一些给定数据的插值和曲线拟合。
Matlab中有大量的命令集和可用函数集,也通称为MatlabM文件,这是应用更加容易。
因此,在Matlab中求解问题通常比传统编程快得多,由于是采用自然表示法,因而使代码清晰和自释。
因为多数M文件是公开的,因此,易于修改这些函数。
所使用的算法是健壮而著名的数值方法,编程是有数学软件领域的主要科学家完成的。
为了获得高性能,Matlab软件采用优化的C语言编写的,其中一些重要的内循环代码是用汇编语言写的。
Matlab的二位和三维工具是面向对象的,值使得经行高质量的图形和图像创作成为一个强有力的环境。
Matlab是一个环境,也是一个面向矩阵/向量的程序设计语言,容许用户创建和函数,已解决某种问题。
图形箱包含了各种函数以创建带有按钮、菜单和其他附件的图形用户界面(GUI),而Matlab有各种可选工具箱。
这些工具箱可以用于各种特殊的应用目的,例如:
信号处理、优化、信号处理、优化、符号计算、金融分析和图像分析。
所有者些都写在Matlab之上,工具箱能够成为设计和分析的高性能工具。
Matlab的主要特点是:
(1)有高性能数值计算的高级算法,特别适合矩阵代数领域;
(2)有大量事先定义的数学函数,并具有用户自定义函数的能力;
(3)绘图和显示数据,并具有教育、科学和艺术学的图解和可视化的二维、三维图;
(4)基于HTML的完全帮助系统;
(5)适合个人应用的强有力的面向矩阵/向量的高级程序设计语言;
(6)与用其他语言编写的程序结合和输入输出格式化的能力;
(7)有在多个应用领域解决难题的工具箱。
1.2Matlab桌面
启动Matlab,就进入Matlab的默认(Default)桌面。
第一行为菜单栏,第二行为工具栏,下面是三个最常用的窗口。
右边最大的是命令窗口(CommandWindow),左上方前台为发行说明书窗口(Launchpad),后台为工作空间(Workspace),左下方为命令历史(CommandHistory)后台为当前目录。
(1)命令窗口
该窗口是进行Matlab操作最主要的窗口。
窗口中">>"为命令输入提示符,其后输入运算命令,按回车键就可执行运算,并显示运算结果。
(2)发行说明书窗口
发行说明书窗口是Matlab所特有的,用来说明用户所拥有的Mathworks公司产品的工具包,演示以及帮助信息。
(3)工作空间
在默认桌面,位于左上方窗口前台,列出内存中Matlab工作空间的所有变量的变量名,尺寸,字节数。
用鼠标选中变量,击右键可以打开,保存,删除,绘图等操作。
(4)当前目录
在默认桌面,位于左下方窗口后台,用鼠标点击可以切换到前台,该窗口列出当前目录的程序文件(.m)和数据文件(.mat)等,用鼠标选中文件,击右键可以进行打开,运行,删除等操作。
(5)命令历史(CommandHistory)
该窗口列出在命令窗口执行过的Matlab命令行的历史记录。
用鼠标选中命令行,击右键可以进行复制,执行(EvaluateSelection),删除等操作。
除上述窗口外,Matlab常用窗口还有编程器窗口,图形窗口等。
第二章快速傅里叶变换
2.1快速傅里叶变换概述
傅里叶指出,一个任意的周期函数想X(t)都可以分解多个不同频率的正弦信号的和,这即是傅里叶函数。
求解傅里叶系数的过程就是傅里叶变换(DFT)。
这就是有法国工程师傅里叶1822年提出的。
但是直接DFT计算运算量(复数乘、复数加)近似比例于N2。
N很大时,运算量亦很大,例如,当N=1024时,需要1048576次复数乘法运算,对于一次而实时性要求很强的应用领域,如雷达信号处理、自控系统及语言识别中的处理,是没有实用意义。
1965年Cooley和Turkey提出了DFT的快速算法,使得DFT的计算方法得到大大的改善,从而改变了之前因计算量过大而未得到应用的状况,DFT才在实际中得到了广泛的应用,同时也促进了数字信号处理学科和应用的飞速发展。
2.2快速傅里叶变换原理
FFT算法的基本思想是:
利用DFT中的旋转因子
的固有性质:
周期性、对称性、可约性,把长度为N的序列分成几个较短的序列,计算更小点的DFT,从而减小DFT运算量。
旋转因子
的性质如下:
(1)周期性:
(2)对称性:
(3)可约性:
设输入长为N的序列x(n),n=0,1,2……N-1。
基2-FFT(即DFT的点数N=2M时的FFT)算法可分为两类:
按时间抽取法FFT(简称DIT-FFT)和按频率抽取法FFT(简称DIF-FFT)。
如果序列x(n)不满足此条件,则x(n)后补零达到最接近的N=2M值。
由于此次试验要求利用按时间抽取FFT,即DIT-FFT完成8点快速傅里叶变换,所以下面具体介绍DIT-FFT原理。
2.3DIT-FFT原理
2.3.1DIT-FFT思路
把长为N=2M点的时域序列x(n)按序列的奇偶逐级分解,最终得到N/2个2点时域序列。
通过迭代计算2点的DFT,是N点DFT计算量减少。
DFT定义式式中使用了旋转因子
具有周期性、对称性及可约性等三个性质。
因此:
X[k]==
k=0...N-1
由于
和
都隐含有周期性,且周期为N/2,所以上式亦可以写成:
结合以上分析,可得到N点的X[k]:
将序列想X[n]按奇偶分解得到两个子序列
和
,就可以由两个子序列
和
对应的DFT合成序列X[n]的DFT,其合成结构简单,只需经行N/2次复乘。
2.3.2蝶形运算
图2.1DIT-FFT蝶形运算的信号流程图
式(2.1)和式(2.2)表明,N点DFT的X[k]可以分解为两个N/2点DFT进行计算,求出k=0,1,……,N/2-1区间的
和
。
式(2.1)和式(2.2)可形象的用信号流图,图2.1表示,因为其形状似蝴蝶,故称为它为蝶形运算符号。
蝶形运算符号的特点
(1)左边两路为输入,中间小圈表示加、减运算。
右上路“加”,右下路“减”;
(2)支路箭头旁标示的系数,表示该支路信号乘系数
后再减;
(3)一个蝶形运算要1次复数乘,2次复数加。
由上式可计算N点序列的DFT需要计算两个N/2点序列的DFT和N/2个蝶形,故所需的复数乘法次数为
,比直接计算的运算量减少近一半。
如果将此过程继续下去,将2个N/2点的DFT分解为4个N/4点DFT,4个N/4点分解为8个N/8点的DFT,直至分解为N/2个2点的DFT。
这个就是DIT-FFT的实现算法。
下面是DIT-FFT的信号流图。
图2.2DIT-FFT8点蝶形运算的信号流图
2.4DIT-FFT的运算规律及编程思想
(1)原位(同址)运算:
同一存储单元储存蝶形运算输入、输出数据的方法。
如图2.2所示,N点的DIT-FFT,每个蝶形运算的两个输入只能用于本蝶形运算。
蝶形运算的输出可直接存入原输入数据占用的储存单元。
输入序列共需要N个储存单元。
DIT-FFT运算结束,N个存储变量对应的内容全部更改成X(k),节省内存。
对应硬件处理器,可降低成本。
(2)整序规律:
变址运算(位反序),如图2.2所示,DIT-FFT算法的输出X(k)为自然顺序,但其输入序列不是按x(n)的自然顺序排列的。
这种通过M-1次奇偶抽取后的排列称为序列x(n)的倒序,简称“整序”。
取N=8为例,图2.3示意了整序规律:
图2.3N=23点DIT-FFT的整序示意图
(3)图2.3中整序特点:
有2次奇偶抽取且位反序。
如果把整序前后序列x(n)的奇偶位置顺序用M位二进制表示,则整序前后的序列顺序恰好是M位二进制反序:
序号n=(n2n1n0)B反序序号r=(n0n1n2)B
程序中只要把存放在x(n)的单元与存放在x(r)的单元内容互换就完成整序。
用硬件电路和汇编程序实现倒序,只要交换寄存器内容即可。
(4)蝶形运算两个点的“间距”、系数
的变化规律
当N=2M时,共有M级,每集有N/2个蝶形,每个蝶形要乘因子
,p称为旋转因子的指数,N点DIT-FFT流图中,p取值范围[0,N/2-1]。
如图2.2所示,用L表示从左至右运算级数,L=1,……,M。
第L级每个蝶形两个输入数据点间距B=2L-1,同一旋转因子
对应着间距为2L点的2M-L个蝶形,共有2L-1个旋转因子。
对于第L级的
,第J个指数:
P=J
2M-L,J=0,1,……,2L-1-1
假设输入序列倒序后,存入数组X中,第L级蝶形运算后数组元素的值XL(J),最后DIT-FFT的输出X(k)是自然顺序,蝶形迭代公式为:
(10)
第三章DIT-FFT程序设计
要求:
编写一个8点的基于DIT的FFT函数,不能使用matlab自带的FFT实现函数,并调用该函数实现16点的FFT运算,用matlab自带函数对运行结果结果进行验证。
3.18点DIT-FFT程序设计
clc;clearall;closeall;
x=[01234567];%输入的信号,自己可以改变
%整体运用原位计算
m=max(nextpow2(x));
N=2^m;%求x的长度对应的2的最低幂次m
n=0:
N-1;
iflength(x) x=[x,zeros(1,N-length(x))];%若x的长度不是2的幂,补零到2的整数幂 end nxd=bin2dec(fliplr(dec2bin([1: N]-1,m)))+1;%求1: 2^m数列序号的倒序 y=x(nxd);%将x倒序排列作为y的初始值 formm=1: m%将DFT作m次基2分解,从左到右,对每次分解作DFT运算,共做m级蝶形运算,每一级都有2^(mm-1)个蝶形结 Nz=2^mm;u=1;%旋转因子u初始化为WN^0=1 WN=exp(-i*2*pi/Nz);%本次分解的基本DFT因子WN=exp(-i*2*pi/Nz) forj=1: Nz/2%本次跨越间隔内的各次蝶形运算,在进行第mm级运算时需要2^(mm-1)个蝶形 fork=j: Nz: N%本次蝶形运算的跨越间隔为Nz=2^mm kp=k+Nz/2;%蝶形运算的两个因子对应单元下标的关系 t=y(kp)*u;%蝶形运算的乘积项 y(kp)=y(k)-t;%蝶形运算 y(k)=y(k)+t;%蝶形运算 end u=u*WN;%修改旋转因子,多乘一个基本DFT因子WN end end y mag=abs(y); subplot(2,1,1); stem(n,x); title('输入序列x(n)'); subplot(2,1,2); stem(n,mag); title('8点FFT计算结果'); 程序运行结果: 图3.18点DIT-FFT结果图 3.216点DIT-FFT程序设计 clc;clearall;closeall; x=[0123456789101112131415];%输入的信号,自己可以改变 %整体运用原位计算 m=max(nextpow2(x)); N=2^m;%求x的长度对应的2的最低幂次m n=0: N-1; iflength(x) x=[x,zeros(1,N-length(x))];%若x的长度不是2的幂,补零到2的整数幂 end nxd=bin2dec(fliplr(dec2bin([1: N]-1,m)))+1;%求1: 2^m数列序号的倒序 y=x(nxd);%将x倒序排列作为y的初始值 formm=1: m%将DFT作m次基2分解,从左到右,对每次分解作DFT运算,共做m级蝶形运算,每一级都有2^(mm-1)个蝶形结 Nz=2^mm;u=1;%旋转因子u初始化为WN^0=1 WN=exp(-i*2*pi/Nz);%本次分解的基本DFT因子WN=exp(-i*2*pi/Nz) forj=1: Nz/2%本次跨越间隔内的各次蝶形运算,在进行第mm级运算时需要2^(mm-1)个蝶形 fork=j: Nz: N%本次蝶形运算的跨越间隔为Nz=2^mm kp=k+Nz/2;%蝶形运算的两个因子对应单元下标的关系 t=y(kp)*u;%蝶形运算的乘积项 y(kp)=y(k)-t;%蝶形运算 y(k)=y(k)+t;%蝶形运算 end u=u*WN;%修改旋转因子,多乘一个基本DFT因子WN end end y y1=fft(x)%与系统自带fft函数实现值对比 mag=abs(y); mag1=abs(y1); subplot(2,2,1); stem(n,x); title('输入序列x(n)'); subplot(2,2,2); stem(n,mag); title('16点FFT计算结果'); subplot(2,2,3); stem(n,mag1); title('fft程序验证输出16点FFT计算结果') 运行结果为 调用Matlab自带FFT程序验证,发现所编写程序能够正确运行,并且能够实现8点和16点的按时间抽取的基2-FFT运算 图3.216点DIT-FFT结果图与验证图 第四章程序设计心得 通过此次课设让我加深了对FFT相关知识的了解,也加强了对Matlab的运用能力,本次课设的主要内容是编写一个8点的基于DIT的FFT函数,由于没有系统的学习过Matlab语言,所以在课程设计的时候出现了很多的问题,凭着自己对Matlab的了解加上在网上和书本查找资料完成了本次的课设任务。 数字信号处理的概念抽象,是一门理论性很强的学科。 它是学好很多学科的基础,它的分析处理问题的思路和方法我们可以很好的应用在其它学科的学习中。 经过这次的课程设计我们不仅理解与掌握课程中的基本概念、基本原理、基本分析方法,更提高了综合应用所学知识解决实际问题的能力,激发了我们对这门课程的兴趣。 参考文献 [1]丁玉美,高西泉.数字信号处理.西安: 西安电子科技出版社 [2]郑君里.信号与系统.北京: 高等教育出版社 [3]郑阿奇.MATLAB实用教程.北京: 电子工业出版社 [4]刘泉,阙大顺.数字信号处理原理与实现.北京: 电子工业出版社 [5]张圣勤.MATLAB7.0实用教程.北京: 机械工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内容