课程设计数字信号处理ditfftWord文件下载.docx
《课程设计数字信号处理ditfftWord文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计数字信号处理ditfftWord文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
杨永双等编.数字信号处理实验指导书.郑州:
郑州轻工业学院,2007
丁玉美等编著.数字信号处理第三版.西安电子科技大学出版社,2006
完成期限:
2010年12月24日
指导教师签名:
**
课程负责人签名:
***
2010年12月26日
1.DIT-FFT理论介绍
有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化
11快速傅里叶变换
成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT).
快速傅氏变换(FFT),是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
12快速傅里叶变换
x(n)为N项的复数序列,由DFT变换,任一X(m)的计算都需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实
13快速傅里叶变换
数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出N项复数序列的X(m),即N点DFT变换大约就需要N^2次运算。
当N=1024点甚至更多的时候,需要N2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成N+2(N/2)2=N+N2/2。
继续上面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。
而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog2N次的运算,N在1024点时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是FFT的优越性。
2.设计要求、目的、原理
2.1.设计要求
1)输入一个长度为N序列;
2)通过倒序排列,然后输出;
3)计算快速傅里叶变换;
2.2.设计目的
用MATLAB语言编程实现序列的基2-DIT-FFT算法或基2-DIF-FFT算法,并对结果进行分析验证扩展要求:
意义:
掌握FFT变换的原理以及其特点,清楚FFT的计算流程,并能够用编程的方式实现。
学会编程方法。
2.3.设计原理
FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
下面以8点为例进行说明:
按时间抽取(DIT)的基-2FFT算法,这里采用输入倒位序、输出自然顺序。
21N=8按时间抽选FFT运算流图
3.程序设计代码
3.1.MATLAB语言:
function[Xk]=DIT_FFT(xn,N);
%DIT_FFT
%矩形序列
n=1:
5;
%序列长度
xn=sign(sign(10-n)+1)
N=8;
%序列排序开始
n1=fliplr(dec2bin([0:
N-1]))%码位倒置步骤1:
将码位转换为二进制,再进行倒序
n2=[bin2dec(n1)]%码位倒置步骤2:
将码位转换为十进制后翻转
fori=1:
N
Xk(i)=xn(n2(i)+1)%根据码位倒置的结果,将xn重新排序,存入Xk中
end
%蝶形运算开始
M=log2(N);
%“级”的数量
form=0:
M-1%“级”循环开始
Num_of_Group=N/2^(m+1);
%每一级中组的个数
Interval_of_Group=2^(m+1);
%每一级中组与组之间的间距
Interval_of_Unit=2^m;
%每一组中相关运算单元之间的间距
Cycle_Count=2^m-1;
%每一组内的循环次数
Wn=exp(-j*2*pi/Interval_of_Group);
%旋转因子
forg=1:
Num_of_Group%“组”循环开始
Interval_1=(g-1)*Interval_of_Group;
%第g组中蝶形运算变量1的偏移量
Interval_2=(g-1)*Interval_of_Group+Interval_of_Unit;
%第g组中蝶形运算%变量2的偏移量
forr=0:
Cycle_Count;
%“组内”循环开始
k=r+1;
%“组内”序列的下标
Xk(k+Interval_1)=Xk(k+Interval_1)+Wn^r*Xk(k+Interval_2);
%第m%级,第g组的蝶形运算式1
Xk(k+Interval_2)=Xk(k+Interval_1)-Wn^r*Xk(k+Interval_2)-Wn^r*Xk(k+Interval_2);
%第m级,第g组的蝶形运算式2,注:
1和2为同址运算
end
3.2.运行结果
xn=
11111
n1=
000
100
010
110
001
101
011
111
n2=
0
4
2
6
1
5
3
7
Xk=
Columns1through5
5.00000-2.4142i1.00000-0.4142i1.0000
Columns6through8
0+0.4142i1.00000+2.4142i
4.心得体会
在杨永双老师细心的指导下,在同学们积极的积极合作下,经过一个星期的努力学习,我们终于完成了这次课程设计.在这个课程设计过程中,我主要使用了MATLAB语言编写DIT_FFT的程序,由于没有系统的学习过MATLAB语言课程,因此在设计过程中出现了很多问题,主要都是一些语法上的错误。
经过自己查找资料和老师的帮助,我基本完成了本次课程设计的任务。
在此过程中,我对DIT_FFT的思想过程,理论基础等有了更为深刻的理解。
数字信号处理的概念抽象,是一门理论性很强的学科。
它是学好很多学科的基础,它的分析处理问题的思路和方法我们可以很好的应用在其它学科的学习中。
经过这次的课程设计我们不仅理解与掌握课程中的基本概念、基本原理、基本分析方法,更提高了综合应用所学知识解决实际问题的能力,激发了我们对这门课程的兴趣。
5.参考文献
丁玉美,高西全编著.数字信号处理.西安:
西安电子科技大学出版社.
郑君里等编.信号与系统.北京:
高等教育出版社.
郑阿奇等编.MATLAB实用教程.北京:
电子工业出版社.
郑州轻工业学院。