课程设计.docx
- 文档编号:24820417
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:13
- 大小:138.48KB
课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计
摘要
在数字信号处理中,有限长序列占有很重要的地位,其频域分析方法既有Z变换也有序列的傅里叶变换,但ZT与DTFT的共同特点是:
它们的频域变换函数都是连续函数,不适于计算机或数字处理。
因此我们将介绍一种更为重要的数学的变换——离散傅立叶变换(DiscreteFourierTransfor,简称DFT),其实质是有限长序列傅立叶变换的有限点离散采样,从而开辟了频域离散化的道路,是数字信号处理可以在频域采用数字运算的方法进行,从而大大增加了数字信号处理的灵活性,同时也奠定了DFT在信号处理中的核心地位。
在此基础上,介绍了DFT的快速算法。
由于直接计算DFT的计算量当N很大是会很大,所以在快速傅立叶便换(FastFourierTransfor,简称FFT)出现前,直接进行谱分析和信号的实时处理是不切实际的。
直到1965年库利和图基提出了DFT运算的一种快速方法以后,情况才发生了根本的变化。
FFT使得信号的实时处理和设备的简化得以实现。
关键字DFTFFT算法比较MATLAB
目录
第一章DFT原理与实现程序…………………………………………………………………………………3
第二章FFT原理及实现程序…………………………………………………………………………………4
第三章DFT与FFT的比较……………………………………………………………………………………8
心得体会……………………………………………………………………………………………………………………………12
参考文献……………………………………………………………………………………………………………………………12
第一章DFT原理与实现程序
一、DFT的引出思想
有限长序列x(n)的频域分析方法:
1、DTFT:
2、z变换
二者共同特点:
频域变换函数或是连续函数,不适于计算机计算或数字处理。
计算机处理要求:
时域、频域都为有限长、离散形式。
观察DFS公式:
时域、频域离散。
因此,构造DFT——从DFS的时域和频域中各取出一个周期。
二、DFT的定义
设x(n)是一个长度为M的有限长序列,则定义的N点离散傅立叶变换为
其逆变换为:
式中,N为DFT变换区间长度。
三、DFT实现程序及应用举例
DFT函数和对一单位抽样序列进行DFT处理的程序及结果:
function[Xk]=dft(xn,N)
n=[0:
1:
N-1];
k=[0:
1:
N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
clearall;
N=32;
x=zeros(1,N);
x
(1)=1;
xn=0:
N-1;
subplot(121),stem(xn,x);
axis([-13301.1]);
XK=dft(xn,N);
subplot(122);
stem(abs(XK));
第二章FFT原理及实现程序
离散傅立叶变换的快速算法根据基数的不同可以分为多种方法,其中基2FFT算法最为常用,基2FFT算法主要包括两类:
按时间抽取(decimation-in-time,简称DIT)法和按频率抽取(decimation-in-frequence,简称DIF)法,这里主要介绍按时间抽取基2算法。
1、算法原理
设输入序列长度为N=2M(M为正整数,将该序列按时间顺序的奇偶分解为越来越短的子序列,称为基2按时间抽取的FFT算法。
也称为Coolkey-Tukey算法。
其中基2表示:
N=2M,M为整数.若不满足这个条件,可以人为地加上若干零值(加零补长)使其达到N=2M。
2、算法步骤
现对原序列进行分组,变量置换
先将x(n)按n的奇偶分为两组,作变量置换:
当n=偶数时,令n=2r;
当n=奇数时,令n=2r+1;
得到
由于
所以
X1(k)、X2(k)只有N/2个点,以N/2为周期;而X(k)却有N个点,以N为周期。
要用X1(k)、X2(k)表达全部的X(k)值,还必须利用WN系数的周期特性。
由于
所以
又考虑到的对称性:
有:
由此可得
3、编程思想及流程图
4、具体程序如下:
functionz=FFtmatlab(a)
N=length(a);N1=N;p=0;
whilep<=N
p=p+1;r=N1/2;
ifr==1
break
end
N1=r;
end
w=exp(-i*2*pi/N);
forq=1:
p
n=2^q;
fork=0:
N/n-1
forj=0:
n/2-1
m=k*n;
b(m+j+1)=a(m/2+j+1)+a(m/2+j+1+N/2);
b(m+j+1+n/2)=(a(m/2+j+1)-a(m/2+j+1+N/2))*w^(m/2);
end
end
a=b;
end
z=a;
clearall;
N=32;
x=zeros(1,N);
x
(1)=1;
xn=0:
N-1;
subplot(121),stem(xn,x);
axis([-13301.1]);
XK=FFtmatlab(xn);
subplot(122);
stem(abs(XK))
运行结果如下
第三章DFT与FFT的比较
1、按时间抽取基2FFT算法与DFT运算量的比较
由前面介绍的按时间抽取的FFT运算流图可见,每一级都由N/2个蝶形运算构成。
每个蝶形需要一次复乘和两次复加运算,因此每一级都需要N/2次复乘和N次复加(每个结加减各一次)。
这样m级运算共需要
复乘次数
复加次数
而直接计算DFT时所需的复乘数为N的平方次,复数加为N(N-1)次,当N远大于1时N的平方也远大于,从而DIT-FFT算法比直接DFT的运算次数大大减少。
这样就使运算效率提高200多倍。
2、通过编写一段matlab程序比较按时间抽取基2FFT算法与DFT运算时间
对长度为4096的随机序列进行fft所需时间的程序及结果如下:
Nmax=4096;
fft_time=zeros(1,Nmax);
forn=1:
1:
Nmax
x=rand(1,n);
t=clock;
fft(x);
fft_time(n)=etime(clock,t);
end
n=[1:
1:
Nmax];
plot(n,fft_time,'.');
title('FFT执行时间')
对长度为256的随机序列进行dft所需时间的程序及结果如下:
Nmax=256;
dft_time=zeros(1,Nmax);
forn=1:
1:
Nmax
x=rand(1,n);
t=clock;
dft(x,n);
dft_time(n)=etime(clock,t);
end
n=[1:
1:
Nmax];
plot(n,dft_time,'.');
title('DFT执行时间')
心得体会:
通过这两周的数字信号处理的课程设计,我先在图书馆里查找了相关的书籍,如MATLAB类的编程书籍,各类数据处理类的书籍以及离散傅立叶变换的书籍等,既丰富了自己的知识范围,又对与自己所学的知识有了更深的了解和认识,同时也对它的应用有了一个大体的认识。
在设计的过程中,我也认识到了自己所学知识的不足。
这也让我再次认识到知识是无尽的,只有不断的充实自己、完善自己的知识理论体系,才能够更好的胜任自己以后的工作。
设计过程中知识的不足也让我更加坚定了终身学习的决心。
在设计的过程中,我也得到了我们设计小组的成员和很多同学的帮组。
这也加强了我与其他同学合作的能力。
查找资料的过程中我也增强自己学习的能力,这些都将让我在以后的学习、生活和工作中受益匪浅。
参考文献:
1、谢平王娜林洪彬信号处理原理及应用机械工业出版社2009
2.、郭仕剑王宝顺贺志国杨可心等MATLAB7.x数字信号处理人民邮电出版社2006
3、【英】EmmanuelC.LfeachorBarrieW.Jervis著罗鹏飞杨世海朱富国谭全元等译数字信号处理实践方法(第二版)电子工业出版社2004
4、【美】SanjitK.Mitra著孙洪余翔宇等译数字信号处理实验指导书电子工业出版社2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计