8点基于DIT的FFT的实现
- 格式:doc
- 大小:954.12 KB
- 文档页数:28
数字信号处理中的对称性问题虞粉英;陆锦辉【摘要】数字信号处理是利用计算机或信号处理设备、采用数值计算方法对信号进行处理的过程.该文分析了离散时间傅里叶变换(DTFT)、离散傅里叶变换(DFT)、连续与非周期以及离散与周期的对称性,将N点序列的离散谱视为DTFT连续谱一个周期的采样,解决了利用计算机分析信号频谱的问题.通过对比分析DTFT和DFT 的对称性可知,将DFT的对称性应用到实序列DFT计算中,可减少约50%运算量.【期刊名称】《南京理工大学学报(自然科学版)》【年(卷),期】2018(042)005【总页数】7页(P615-621)【关键词】数字信号处理;奇偶对称性;共轭对称性;圆周共轭对称性【作者】虞粉英;陆锦辉【作者单位】南京理工大学电子工程与光电技术学院,江苏南京210094;南京理工大学电子工程与光电技术学院,江苏南京210094【正文语种】中文【中图分类】TN911.72数字信号处理(Digital signal processing,DSP)是利用计算机或通用(专用)的信号处理设备,采用数值计算的方法对信号进行处理的一门学科。
随着信息、通信、计算机科学与技术的迅速发展,数字信号处理理论得到快速发展,在信息与通信领域应用广泛。
文献[1]利用多路欠采样的方法对多分量线性调频(Linear frequency modulation,LFM)信号进行参数估计。
文献[2,3]研究了中继协作通信系统中数字信号处理算法的对称性问题,用于设计上下行链路。
数字信号处理理论在自动控制、生物医学、机械、能源、电力、纺织、仪器仪表等领域的应用也日益广泛[4,5]。
我国中东部经济发达地区电力供应相对紧缺,为此,在国家西电东输工程中,电力的转换与传输中存在大量的数据监测和监控,利用数字信号处理的方法就可以进行数据的自动分类、准确监控,从而实现高效率、高精度的电力转换与传输。
数字信号处理理论在电网储能优化配置中也有着重要作用[6]。
8点基于DIT的FFT的实现长达1200字的回答确实有点困难,但我会尽力提供有关DIT (Decimation in Time)FFT(Fast Fourier Transform)的实现的详细信息。
请注意,由于篇幅限制,我将简要介绍DIT-FFT的基本原理和步骤,然后提供一个简单的Python实现示例来帮助您更好地理解该算法。
DIT-FFT是一种将离散时间复数序列(DTFT)计算转换为更高效算法的方法,用于快速计算离散傅立叶变换(DFT)。
它将输入序列分解为较短的子序列,并将DFT的计算分解为多个较小子问题的计算。
该算法的关键思想是利用DFT的对称性质和周期性来减少计算量。
DIT-FFT的实现主要分为四个步骤:1.反序重新排列输入序列:将长度为N的输入序列重新排列为N个采样点按照二进制位表示的反序排列的新序列。
这个步骤是为了确保在计算过程中能够正确地利用对称性和周期性。
2.蝶形计算:在这一步骤中,将输入序列分解为两个较短的子序列,并递归地计算每个子序列的DFT。
对于每个蝴蝶计算,需要计算两个序列的DFT值,并进行一些简单的数学运算。
3.合并结果:在完成蝶形计算后,将两个子序列的结果按照一定顺序合并形成最终的DFT结果。
4.重复步骤2和3,直到所有的子序列都被计算完毕。
下面是一个简单的Python实现示例,用于计算长度为N的输入序列的DIT-FFT:```pythonimport cmathdef dit_fft(x):N = len(x)if N <= 1:return xeven = dit_fft(x[0::2])odd = dit_fft(x[1::2])T = [cmath.exp(-2j * cmath.pi * k / N) * odd[k] for k in range(N // 2)]return [even[k] + T[k] for k in range(N // 2)] + [even[k] - T[k] for k in range(N // 2)]#示例使用x=[1,2,3,4,5,6,7,8]#输入序列X = dit_fft(x) # 计算DIT-FFTprint(X)```在这个示例中,输入序列`x`的长度为8,该序列将通过递归调用`dit_fft(`函数来计算其DFT值。
数字信号处理实验报告班级:****姓名:郭**学号:*****联系方式:*****西安电子科技大学电子工程学院绪论数字信号处理起源于十八世纪的数学,随着信息科学和计算机技术的迅速发展,数字信号处理的理论与应用得到迅速发展,形成一门极其重要的学科。
当今数字信号处理的理论和方法已经得到长足的发展,成为数字化时代的重要支撑,其在各个学科和技术领域中的应用具有悠久的历史,已经渗透到我们生活和工作的各个方面。
数字信号处理相对于模拟信号处理具有许多优点,比如灵活性好,数字信号处理系统的性能取决于系统参数,这些参数很容易修改,并且数字系统可以分时复用,用一套数字系统可以分是处理多路信号;高精度和高稳定性,数字系统的运算字符有足够高的精度,同时数字系统不会随使用环境的变化而变化,尤其使用了超大规模集成的DSP 芯片,简化了设备,更提高了系统稳定性和可靠性;便于开发和升级,由于软件可以方便传送,复制和升级,系统的性能可以得到不断地改善;功能强,数字信号处理不仅能够完成一维信号的处理,还可以试下安多维信号的处理;便于大规模集成,数字部件具有高度的规范性,对电路参数要求不严格,容易大规模集成和生产。
数字信号处理用途广泛,对其进行一系列学习与研究也是非常必要的。
本次通过对几个典型的数字信号实例分析来进一步学习和验证数字信号理论基础。
实验一主要是产生常见的信号序列和对数字信号进行简单处理,如三点滑动平均算法、调幅广播(AM )调制高频正弦信号和线性卷积。
实验二则是通过编程算法来了解DFT 的运算原理以及了解快速傅里叶变换FFT 的方法。
实验三是应用IRR 和FIR 滤波器对实际音频信号进行处理。
实验一●实验目的加深对序列基本知识的掌握理解●实验原理与方法1.几种常见的典型序列:0()1,00,0(){()()(),()sin()j n n n n u n x n Aex n a u n a x n A n σωωϕ+≥<====+单位阶跃序列:复指数序列:实指数序列:为实数 正弦序列:2.序列运算的应用:数字信号处理中经常需要将被加性噪声污染的信号中移除噪声,假定信号 s(n)被噪声d(n)所污染,得到了一个含噪声的信号()()()x n s n d n =+。
8点基于DIT的FFT的实现离散傅里叶变换(Discrete Fourier Transform,DFT)是一种将时域信号转换为频域信号的方法。
它是信号处理领域中最重要的数学工具之一,广泛应用于图像处理、音频处理、通信系统等领域。
离散傅里叶变换的计算方法之一是快速傅里叶变换(Fast Fourier Transform,FFT),它是一种高效的计算离散傅里叶变换的算法。
DIT-FFT(Decimation in Time Fast Fourier Transform)是一种基于分治思想的FFT实现方法,该方法将输入序列划分成两个子序列,分别进行FFT计算,并通过旋转因子进行连接。
在DIT-FFT算法中,输入序列的长度必须是2的整数次幂。
下面将详细介绍8点DIT-FFT的实现步骤:步骤1:读取输入序列首先,我们需要读取一个长度为8的输入序列,记为x[0]到x[7]。
步骤2:重新排列输入序列按照DIT-FFT算法的要求,需要对输入序列x进行重新排列。
对于长度为8的序列,重新排列的顺序如下所示:x[0],x[4],x[2],x[6],x[1],x[5],x[3],x[7]排列后的序列依次为x'[0]到x'[7]。
步骤3:递归计算FFT使用递归的方式计算子序列的FFT。
对于输入序列x'[0]到x'[3],以及x'[4]到x'[7],分别进行FFT计算。
其中,x'[0]到x'[3]可以视为长度为4的子序列,x'[4]到x'[7]可以视为长度为4的子序列。
步骤4:计算旋转因子根据FFT的定义,我们需要计算旋转因子 W = exp(-j*2*pi/N),其中,N 为输入序列的长度。
步骤5:连接子序列将计算得到的长度为4的子序列进行连接。
对于x'=[x'[0],x'[1],x'[2],x'[3]]和y'=[x'[4],x'[5],x'[6],x'[7]],连接操作可以表示为:x'[k]=x[k]+W^k*y[k]y'[k]=x[k]-W^k*y[k]其中,k为子序列的索引。
数字信号处理期末试题和答案解析WORD 格式整理专业知识分享数字信号处理卷⼀⼀、填空题(每空1分, 共10分)1.序列()sin(3/5)x n n π=的周期为。
2.线性时不变系统的性质有律、律、律。
3.对4()()x n R n =的Z 变换为,其收敛域为。
4.抽样序列的Z 变换与离散傅⾥叶变换DFT 的关系为。
5.序列x(n)=(1,-2,0,3;n=0,1,2,3), 圆周左移2位得到的序列为。
6.设LTI 系统输⼊为x(n) ,系统单位序列响应为h(n),则系统零状态输出y(n)= 。
7.因果序列x(n),在Z →∞时,X(Z)= 。
⼆、单项选择题(每题2分, 共20分)1.δ(n)的Z 变换是()A.1 B.δ(ω) C.2πδ(ω) D.2π2.序列x 1(n )的长度为4,序列x 2(n )的长度为3,则它们线性卷积的长度是()A. 3 B. 4 C. 6 D. 73.LTI 系统,输⼊x (n )时,输出y (n );输⼊为3x (n-2),输出为() A. y (n-2) B.3y (n-2) C.3y (n ) D.y (n )4.下⾯描述中最适合离散傅⽴叶变换DFT 的是()A.时域为离散序列,频域为连续信号B.时域为离散周期序列,频域也为离散周期序列C.时域为离散⽆限长序列,频域为连续周期信号D.时域为离散有限长序列,频域也为离散有限长序列5.若⼀模拟信号为带限,且对其抽样满⾜奈奎斯特条件,理想条件下将抽样信号通过即可完全不失真恢复原信号()A.理想低通滤波器 B.理想⾼通滤波器 C.理想带通滤波器 D.理想带阻滤波器 6.下列哪⼀个系统是因果系统()A.y(n)=x (n+2) B. y(n)= cos(n+1)x (n) C. y(n)=x (2n) D.y(n)=x (- n) 7.⼀个线性时不变离散系统稳定的充要条件是其系统函数的收敛域包括()A. 实轴B.原点C.单位圆D.虚轴8.已知序列Z 变换的收敛域为|z |>2,则该序列为()A.有限长序列 B.⽆限长序列 C.反因果序列 D.因果序列9.若序列的长度为M ,要能够由频域抽样信号X(k)恢复原序列,⽽不发⽣时域混叠现象,则频域抽样点数N 需满⾜的条件是 ( )A.N≥MB.N≤MC.N≤2MD.N≥2M10.设因果稳定的LTI系统的单位抽样响应h(n),在n<0时,h(n)= ( ) A.0 B.∞ C. -∞ D.1三、判断题(每题1分, 共10分)1.序列的傅⽴叶变换是频率ω的周期函数,周期是2π。
《代码实现离散傅里叶变换8点dft》一、介绍离散傅里叶变换(Discrete Fourier Transform, DFT)是一种重要的信号处理方法,它可以将一个离散时间域信号转换为频域信号。
在数字信号处理领域中,DFT被广泛应用于音频处理、图像处理等领域。
本文将介绍如何使用代码实现8点DFT,通过代码实现,我们将了解DFT的原理和实现过程。
二、DFT原理DFT的数学表达式如下:其中,$x[n]$是输入的离散时间域信号,$X[k]$是变换后的频域信号,$N$表示采样点数,$n$表示时间域的采样点,$k$表示频域的采样点。
DFT的计算复杂度为$O(N^2)$,因此在实际应用中会使用快速傅里叶变换(Fast Fourier Transform, FFT)来加速计算。
三、8点DFT实现代码接下来,我们将使用Python来实现8点DFT的代码。
我们需要导入numpy库来进行数学运算:```pythonimport numpy as np我们定义一个函数来实现8点DFT的计算:```pythondef dft(x):N = len(x)X = np.zeros(N, dtype=npplex)for k in range(N):for n in range(N):X[k] += x[n] * np.exp(-1j * 2 * np.pi * k * n / N)return X```以上代码中,我们首先定义了一个长度为$N$、元素类型为复数的数组$X$,用于存储变换后的频域信号。
使用两层循环来计算DFT的每个频域采样点$X[k]$。
四、代码测试接下来,我们可以使用以下代码来验证我们实现的8点DFT函数:```pythonx = np.array([1, 2, 3, 4, 3, 2, 1, 0], dtype=npplex)X = dft(x)print(X)运行以上代码后,我们将得到变换后的频域信号$X[k]$。
FFT 算法分析FFT 算法的基本原理是把长序列的DFT 逐次分解为较短序列的DFT 。
按照抽取方式的不同可分为DIT-FFT (按时间抽取)和DIF-FFT (按频率抽取)算法。
按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n 为大于1的整数),基2、基4算法较为常用。
基2、DIT-FFT (按时间抽取):-1/21/212(21)/21/21/2/2()() ()()(2)(21)(2)(21)N knNn knknN Nn n N N k r k r NNr n N N kr k krN NN r n X k x n Wx n W x n W x r Wx r Wx r WWx r W ===--+==--====+=++=++∑∑∑∑∑∑∑偶数奇数000令/211/2(2)()N kr N r x r WX k -==∑,/212/2(21)()N krN r x r W X k -=+=∑,则有:1212()()()(/2)()()kN k NX k X k W X k X k N X k W X k =++=-蝶形运算单元如下所示:基2、DIF-FFT (按频率抽取):-10/211/2/21/21(/2)/21/2/21/2()() ()()()(/2)[()(/2)](2)[()(/2)](21)[()(N kn Nn N N kn knNNn n N N N kn k n N NNn n N kN kn NNn N rnN n X k x n Wx n Wx n W x n Wx n N W x n Wx n N WX r x n x n N W X r x n x n N =--==--+==-=-===+=++=++=+++=-+∑∑∑∑∑∑∑00000/21/2/2)]N n rnN N n W W -=∑则有:12()()(/2)()[()(/2)]nNx n x n x n N x n x n x n N W =++=-+蝶形运算单元如下所示:由前面的分析可知,DIT (按时间抽取)算法与DIF (按频率抽取)算法没有本质上的区别,只是复数加减法与旋转因子乘法的次序有区别,两种方法的运算量是一样的。
1设序列x(n)={4,3,2,1} , 另一序列h(n) ={1,1,1,1},n=0,1,2,3 (1)试求线性卷积 y(n)=x(n)*h(n) (2)试求6点圆周卷积。
(3)试求8点圆周卷积。
解:1.y(n)=x(n)*h(n)={4,7,9,10,6,3,1}2.6点圆周卷积={5,7,9,10,6,3}3.8点圆周卷积={4,7,9,10,6,3,1,0}2二.数字序列 x(n)如图所示. 画出下列每个序列时域序列: (1) x(n-2); (2)x(3-n); (3)x[((n-1))6],(0≤n ≤5); (4)x[((-n-1))6],(0≤n ≤5);n12340.543210-1-2-3x(3-n)x[((n-1))6]n54321043210.5n12340.5543210x[((-n-1))6]3.已知一稳定的LTI 系统的H(z)为)21)(5.01()1(2)(111------=z z z z H试确定该系统H(z)的收敛域和脉冲响应h[n]。
解:0.52ReIm系统有两个极点,其收敛域可能有三种形式,|z|<0.5, 0.5<|z|<2, |z|>2 因为稳定,收敛域应包含单位圆,则系统收敛域为:0.5<|z|<211111213/25.013/4)21)(5.01()1(2)(--------=---=z z z z z z H )1(232)()5.0(34)(--+=n u n u n h n n4.设x(n)是一个10点的有限序列x (n )={ 2,3,1,4,-3,-1,1,1,0,6},不计算DFT ,试确定下列表达式的值。
(1) X(0), (2) X(5), (3)∑=9)(k k X,(4)∑=-95/2)(k k j k X eπ解:(1) (2)(3)(4)5. x(n)和h(n)是如下给定的有限序列 x(n)={5, 2, 4, -1, 2}, h(n)={-3, 2, -1 }(1) 计算x(n)和h(n)的线性卷积y(n)= x(n)* h(n); (2) 计算x(n)和h(n)的6 点循环卷积y 1(n)= x(n)⑥h (n); (3) 计算x(n)和h(n)的8 点循环卷积y 2(n)= x(n)⑧h (n); 比较以上结果,有何结论?14][]0[19===∑=n N n x X W 12][][]5[119180510-=-===⎩⎨⎧-=∑∑====奇偶奇数偶数n n n n n n x n x X n n W20]0[*10][][101]0[99===∑∑==x k X k X x k k 0]8[*10][][101]))210[((][]))[((2)10/2(92)10/2(9010)/2(===-⇔--=-=-∑∑x k X ek X ex k X e m n x k j k k j k m N k j N πππ解:(1)5 2 4 -1 2-3 2 15 2 4 -1 210 4 8 -2 4-15 -6 -12 3 -6-15 4 -3 13 -4 3 2y(n)= x(n)* h(n)={-15,4,-3,13,-4,3,2}(2)5 2 4 -1 2-3 2 15 2 4 -1 210 4 8 -2 4-15 -6 -12 3 -6-15 4 -3 13 -4 3 22-13 4 -3 13 -4 3 2y1(n)= x(n)⑥h(n)= {-13,4,-3,13,-4,3}(3)因为8>(5+3-1),所以y3(n)= x(n)⑧h(n)={-15,4,-3,13,-4,3,2,0}y3(n)与y(n)非零部分相同。
8点基于DIT的FFT的实现离散傅立叶变换(Discrete Fourier Transform,DFT)是一种非常重要的数字信号处理技术,它在频域中将时域信号转换为频域信号。
傅立叶变换的一种高效实现是快速傅立叶变换(Fast Fourier Transform,FFT),它是一种基于迭代的算法,具有较低的计算复杂度。
在本文中,我们将介绍DIT(Decimation In Time)算法的FFT实现,它是一种经典的FFT实现方法。
DIT算法是基于分治原则的一种FFT算法,它将一个N点的DFT拆分成两个N/2点的DFT,并通过迭代的方式进行计算。
DIT算法的核心思想是将输入序列分成奇数索引和偶数索引两部分,然后对它们分别进行N/2点的DFT计算。
最后将得到的结果进行组合,得到最终的N点DFT。
下面是DIT算法的具体步骤:1. 将输入序列划分为奇数索引和偶数索引两个部分。
假设输入序列为x[0], x[1], ..., x[N-1],则分别得到奇数索引部分x_odd[0],x_odd[1], ..., x_odd[N/2-1]和偶数索引部分x_even[0],x_even[1], ..., x_even[N/2-1]。
2. 对奇数索引部分x_odd进行N/2点的DFT计算。
使用递归调用FFT算法计算得到奇数索引部分的频域序列X_odd[0], X_odd[1], ..., X_odd[N/2-1]。
3. 对偶数索引部分x_even进行N/2点的DFT计算。
使用递归调用FFT算法计算得到偶数索引部分的频域序列X_even[0], X_even[1], ..., X_even[N/2-1]。
4. 根据蝴蝶运算(Butterfly Operation)的原理,将得到的X_odd 和X_even合并成N个频域样本。
具体操作是,对于每个k=0, 1, ..., N/2-1,计算X[k] = X_odd[k] * W^k + X_even[k]其中W是复数旋转因子,计算公式为W=e^(-j2π/N)。
课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:8点基于DIT的FFT的实现初始条件:具备Matlab编程能力;熟悉基于DIT的FFT的实现原理;提供编程所需要的计算机一台。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、编写一个8点的基于DIT的FFT函数,不能使用matlab自带的FFT实现函数;2、并调用该函数实现16点的FFT运算,用matlab自带函数对运行结果结果进行验证;3、完成符合学校要求的设计说明书。
时间安排:一周,其中3天程序设计,2天程序调试指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1 概述 (1)1.1 快速傅立叶变换(FFT)简介 (1)1.2 MATLAB简介 (2)2 直接计算DFT的问题及改进 (3)2.1直接计算DFT的运算量 (3)2.2 改进措施 (4)3 按时间抽选的基-2FFT算法(DIT-FFT) (5)3.1 DIT-FFT算法原理 (5)3.2 DIT-FFT的运算量 (11)3.3 DIT-FFT算法的特点 (12)3.4 N=16时的DIT-FFT算法 (14)4 MATLAB程序代码 (15)4.1 N=8点DIT-FFT代码 (15)4.2 N=16点DIT-FFT代码 (16)5 MATLAB仿真结果及验证 (17)5.1 DIT-FFT函数调试 (17)5.2 DIT-FFT函数运行结果 (18)5.3调用系统函数验证 (19)6 心得体会 (21)参考文献 (22)摘要此次课设目的是利用MATLAB实现8点基于DIT的FFT的仿真,不使用MATLAB 自带的FFT实现函数。
本文先就直接计算傅立叶变换(DFT)存在的问题进行讨论,之后详细介绍了快速傅立叶变换(FFT)的原理以及推导过程,给出了8点FFT的蝶形流图以及MATLAB仿真的程序代码,并通过调用该函数代码计算16点的FFT。
最后给出了仿真调试结果和此次课设的总结。
关键词:FFT;MATLAB;仿真AbstractThe aim of this Course Design is to use MATLAB to achieve 8-point DIT-FFT simulation, and can not use the built-in MATLAB FFT function to realize. The beginning of this article discuss the problems of direct calculation of the Fourier transform (DFT) , and then introduces the principle of Fast Fourier Transform (FFT) and the process of derivation. Then there is given butterfly flow diagram of 8-point FFT and the MATLAB simulation program code, and realize 16-point FFT calculation by calling the function code. Finally, enumerate the simulation results and make the summary of this curriculum design.Keywords: FFT; MATLAB; Simulation1 概述1.1 快速傅立叶变换(FFT)简介傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。
傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。
傅立叶变换是声学、语音、电信和信号处理等领域中一种重要的分析工具。
在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。
离散傅立叶变换(DFT),是傅立叶变换在时域和频域上都呈现离散的形式,将时域信号的采样变换为在离散时间傅立叶变换(DTFT)频域的采样。
在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。
即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。
有限长序列可以通过离散傅立叶变换(DFT)将其频域也离散化成有限长序列。
但其计算量太大,很难实时地处理问题,因此引出了快速傅立叶变换(FFT)。
1965年,Cooley和Tukey提出了计算离散傅立叶变换(DFT)的快速算法,将DFT的运算量减少了几个数量级。
从此,对快速傅立叶变换(FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。
根据对序列分解与选取方法的不同而产生了FFT的多种算法,基本算法是基2DIT和基2DIF。
FFT在离散傅立叶反变换、线性卷积和线性相关等方面也有重要应用。
计算离散傅立叶变换的快速方法,有按时间抽取的FFT算法(DIT-FFT)和按频率抽取的FFT算法(DIF-FFT)。
前者是将时域信号序列按偶奇分排,后者是将频域信号序列按偶奇分排。
它们都借助于的两个特点:一是周期性;二是对称性。
这样,便可以把离散傅立叶变换的计算分成若干步进行,计算效率大为提高。
快速傅立叶变换(FFT),是离散傅立叶变换的快速算法,它是根据离散傅立叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
它对傅立叶变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
1.2 MATLAB简介MATLAB是美国Math Works公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink 两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。
是由美国Math Works公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JA V A的支持。
优势特点:1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2) 具有完备的图形处理功能,实现计算结果和编程的可视化;3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
2 直接计算DFT 的问题及改进DFT 在数字信号处理中有着重要的作用。
然而直接计算DFT 的运算量非常大,它与序列长度的平方成正比,因此制约了DFT 的应用。
快速傅立叶变换(Fast Fourier Transform,FFT )是实现DFT 的一种快速算法。
2.1 直接计算DFT 的运算量离散傅立叶变换对为:正变换: ∑-===10)()]([)(N n nkN W n x n x DFT k X , 1...,2,1,0-=N n (2.1.1)反变换: Wnk NN k k X Nk X IDFT n x --=∑==1)(1)]([)( , 1,...,2,1,0-=N k (2.1.2)2.2 改进措施FFT 主要利用DFT 旋转因子的周期性与对称性来减少运算量:周期性: W W W nk N NkN n NnkN )()(++== (2.2.1)对称性: W W n N k Nnk nk N )(-N W *)(-== (2.2.2) 利用周期性与对称性,一方面可以在DFT 的运算过程中把有些项进行合并,另一方面可以把长序列的DFT 分解成若干短序列的DFT 。
因为DFT 的运算量与变换长度的平方成正比,如果可以把一个长序列DFT 分解成若干短序列DFT 再进行计算,就可以大大减少运算量。
3 按时间抽选的基-2FFT 算法(DIT-FFT)常用的FFT 算法有两大类,一类是按时间抽取的FFT 算法(简称DIT-FFT ),另一类是按频率抽取的FFT 算法(简称DIF-FFT )。
最早提出的基-2FFT 算法,使DFT 的运算效率提高了1~2个数量级,从而为DFT 由理论研究到实际应用创造了条件。
3.1 DIT-FFT 算法原理按时间抽取的FFT 算法基本思想是:时域下的序列x(n)按序列n 的奇偶分组,频域下序列X(k)按序列k 前后分组。
有限长序列x(n),设其长度2LN =,L 为整数,若不满足该条件,加零补足。
显然N 为偶数,可以按序列序号分为奇、偶两组序列,长度分别为N/2,如:)}1(),...,1(),0({)(-=N x x x n x按n 的奇偶分组,对x(n)重新排列,得:2)}-x (N x (2),...,|x(0),)1(),...,3(),1({-N x x x令12/,...,2,1,0)},1(),...,2(),0({)2(-=-=N r N x x x r x (3.1.1) 12/,...,2,1,0)},1(),...,3(),1({)12(-=-=+N r N x x x r x (3.1.2)再令)2()(1r x n x = (3.1.3) )12()(2+=r x n x (3.1.4)N 点序列x(n)的DFT 为:W W W W W W W W rkNN r kNrkN N r kr NN r rkN N r nkNn nkN n nkNN n r x r x r x r x n x n x n x n x DFT k X 212/02212/01)12(12/0212/010)()()12()2()()()()]([)(∑∑∑∑∑∑∑-=-=+-=-=-=+=++=+===为奇数为偶数因为3.1.5)所以)()()()()(2112/02/212/02/1k X k X r x r x k X W W W W kN N r rkN rkNN r rk N +=+=∑∑-=-= (3.1.6)其中)(1k X 与)(2k X 分别是)(1n x 与)(2n x 的N/2点的DFT ,即:3.1.7)式(3.1.6)把一个N 点的DFT 分解成了两个N/2点的DFT 的组合,但是)(1k X 与)(2k X 分别是)(1n x 与)(2n x 的N/2点的DFT ,r 与k 的取值满足r,k=0,1,2,...,N/2-1,而X(k)是一个N 点的DFT ,因此式(3.1.7)只计算X (k)前N/2点的值。