1、普通的FFT算法称为基2的FFT算法,这种算法的核心是蝶形变换。 (3)w数组。(4)复数数组排序,在基2的蝶形变换中,复数数组需要重新排。本次课设内容:录制一段个人的语音信号,并对其进行采样;画出采样的后的时域波形和频谱图;在Matlab环境下编写基2DIT-FFT算法;利用自己编写好的算法对已采集的语音信号进行频谱分析,并画出语音信号的时域和频谱图,并与Matlab数字信号处理工具箱中的fft函数进行 对比研究来验证自编算法的正确性。最后设计一个信号处理界面,可以实现对输入信号的选择和不同点的FFT运算的选择。本次课程设计目的:初步掌握了MATLAB语言的主要特点和作用、MATLAB的GU
2、I设计及信号的基本运算的实现。全面复习课程所学理论知识,巩固所学知识重点和难点,根据课堂讲授内容,将理论与实践很好地结合起来,消化课堂所讲解的内容;通过调试积累经验,逐渐培养学生的编程能力、用计算机解决实际问题的能力。提高综合运用所学知识独立分析和解决问题的能力;熟练使用一种高级语言进行编程实现;熟悉Matlab的工作环境及运行状况。2 MATLAB2.1 MATLAB简介MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为
3、科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。主要应用于工程计算、信号处理与通讯、图像处理、信号检测、金融建模设计与分析、控制系统设计以及计算生物学等众多应用领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连MATLAB开发工作界面接其他编程语言的
4、程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB特点:(1)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;(2)具有完备的图形处理功能,实现计算结果和编程的可视化;(3)友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握; (4)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。MATLAB具有方便的数据可视化功能,以将向量和矩阵用图形表现出来。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。MATLAB不仅
5、具有高层绘图能力,而且还具有底层绘图能力-句柄绘图方法。使用户可以用来开发各专业的专业图形。图形用户界面(GUI)是一种提供人机交互的工具和方法。2.2 MATLAB基本语法(1)语言简洁紧凑,使用方便灵活,库函数及其丰富。程序书写形式自由,利用丰富的库函数避开繁杂的子程序编写任务,压缩了一切不必要的编程工作。(2)运算符丰富,由于MATLAB使用C语言编写的,它提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。(3)程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。(4)程序的可移植性很好,基本上不做修改就可以在各种型号
6、的计算机和操作系统上运行。(5)MATLAB的图形功能强大,在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。它还具有较强的编辑图形界面的能力。(6)MATLAB的缺点是:它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编辑等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。(7)功能强大的工具箱是MATLAB的另一特色,它包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。 3快速傅里叶变换(FFT)算法 3.1 FFT的分类 快速傅里叶变换(FFT)是为提高
7、DFT运算速度而采用的一种算法,快速算法的种类较多,最基本的算法是时域2FFT(DIT-FFT)和频域基2(DIT-FFT),本课程设计在MATALB环境下编写基2 DIT-FFT算法。3.2 FFT的基本算法分析3.2.1 FFT的基本算法快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法。对一个有限长度序列x(n)的N点的DFT为:X(k)=x(n)WknN (k=0,1,,N-1;n=0,1,,N-1;W=e-j2/N)当N=4时,X(k)可展开为:X(0)= x(0)W0*4+ x(1)W0*4 +x(2)W0*4+ x(3)W0*4X(1)= x(0)W0*4+ x(1)
8、W1*4 +x(2)W2*4+ x(3)W3*4X(2)= x(0)W0*4+ x(1)W2*4 +x(2)W4*4+ x(3)W6*4X(3)= x(0)W0*4+ x(1)W3*4 +x(2)W6*4+ x(3)W9*4从上式可以看出,要求4点的DFT,需要16次的复数乘法运算,12次复数乘法运算算。由此类推,要求出N点的DFT,需要N2次复数乘法运算,N*(N-1)次复数加法运算。当N值较大时,要完成的复数乘法运算和复数加法运算得次数都非常多,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间,不适合于对实时处理要求高的场合。为了能实时处理DFT,要想减少DFT的运算量可以有两个途
9、径:第一是降N,N的值减小了,运算量就减少了;第二是利用旋转因子的周期性和对称性,可约性。利用这两个途径实现DFT的快速傅里叶变换(FFT),FFT算法基本上可分为时域抽取法和频域抽取法。W=e-j2/N的性质:(1)周期性 (2)共轭对称性 (3)可约性 本程序是用基2的按时间抽取的FFT算法(DIT-FFT),设序列x(n)的长度为N,且N满足N=2M,M为正整数。若N不能满足上述关系,可以将序列x(n)补零实现,则x(n)的N点DFT为:W=e-j2/N)将n分为奇数与偶数两部分。按时间抽取基2-FFT算法的基本思路是将N点序列按时间下标的奇偶分为两个N/2点序列,计算这两个N/2点序列
10、的N/2点DFT,计算量可减小约一半;每一个N/2点序列按照同样的划分原则,可以划分为两个N/4点序列,最后,将原序列划分为多个2点序列,将计算量大大降低。 按时间下标的奇偶将N点x(n)分别抽取组成两个N/2点序列,分别记为x1(n)和x2(n),将x(n)的DFT转化为x1(n)和x2(n)的DFT的计算。用蝶形运算可表式为如图3-1所示: 图3-1 蝶形运算以此类推,还可以把x1(n)和x2(n)按n值得奇偶分为两个序列,这样就达到了降N得目的,从而减少了运算量。FFT对DFT的数学运算量改进:直接采用DFT进行计算,运算量为N2次复数乘法和N*(N-1)次复数乘法。当采用M次FFT时,
11、由N=2M求得M=logN,运算流图有M级蝶形,每一级都由N/2个蝶形运算构成,这样每一级蝶形运算都需要N/2次复数乘法和N次复数加法。M级运算共需要复数乘法次数为C=N/2*M,复数加法次数为C=N*M。当N值较大时,FFT减少运算量的特点表现的越明显。 DIT-FFT算法程序流程图第L级中,每个蝶形运算的两个输入相距同一旋转因子对应的蝶形运算相隔点。编程思想:(1)从输入端开始逐级进行,共进行M即运算;(2)在进行第L级运算时,依次要求出个旋转因子,然后计算每个旋转因子所对应的2个蝶形运算。外层控制第L级顺序运算;中间层控制不同种的旋转因子;内层控制同种旋转因子对应的蝶形运算。 图3-2
12、DIT-FFT运算程序框图3.2.3 FFT的运算规律(1)原位运算N=2M的FFT共M级运算,每级有N/2蝶形原位计算,当数据输入到存储器以后,每一组蝶形运算后,结果仍然存放在这同一组存储器的同一位置,不需要另辟存储空间,直接最后输出。同一级的蝶形运算每个蝶形运算的输入数据对其他级输入没有影响。(2)倒序运算的规律输入序列先按自然顺序存入存储单元,然后经变址运算来实现倒位序排列,用J表示倒序的十进制数,对N=2M,M位的二进制数从左到右各位数权值位N/2,N/4,N/82,1。因此,最高位加1相当于J+N/2。.如果最高位为0,则直接得到下一个倒序值,J+N/2;.如果最高位为1,则最高位为
13、0(J-N/2),次高位加1(J+N/4)。.以此类推,直到最后一位二进制数字。例如 ,N=8时如表3-1:表3-1 码位倒序(N=8)顺序倒序十进制二进制000100110042010301111065101671113.2.4 DIT-FFT算法与直接计算DFT运算量的比较当N=2M时,其运算流图有M级蝶形,每一级都有N/2个蝶形运算构成。每一个蝶形运算需要1次复数乘和2次复数加。所以每一级运算都需要N/2次复数乘和N次复数加。M级运算总共需要的复数乘法次数为: M级运算总共需要的复数加法次数为:如直接计算DFT,复数乘法为次,复数加法N*(N-1)次。当N=1024时用FFT需计算5120次复数乘法和10240次复数加法,与直接计算相比运算量大大降低。4功能的实现
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1