150 likes | 291 Views
实验二 FFT 的实现. 直接 DFT 计算 FFT 基本原理 FFT 的实现. 实验目的. 1.深刻理解 DFT 变换的时域及频域物理意义。 2.理解 FFT 算法的基本原理思想。 3.学习 MATLAB 中进行 FFT 计算的各种函数,以及工程中进行 FFT 计算的一些实用方法。 4.了解通过专用 DSP 处理器,编程进行 FFT 算法的实现。. 实验内容. 1、对给定序列按照 DFT 定义,在 MATLAB 中进行编程实现频谱分析。
E N D
实验二 FFT的实现 直接DFT计算 FFT基本原理 FFT的实现
实验目的 1.深刻理解DFT变换的时域及频域物理意义。 2.理解FFT算法的基本原理思想。 3.学习MATLAB中进行FFT计算的各种函数,以及工程中进行FFT计算的一些实用方法。 4.了解通过专用DSP处理器,编程进行FFT算法的实现。
实验内容 1、对给定序列按照DFT定义,在MATLAB中进行编程实现频谱分析。 2、在深刻理解FFT算法思想的基础上,在MATLAB中完成基-2拆分的FFT算法编程实现,并将其与前面直接计算DFT结果进行对比。
实验内容(续) 3、(拓展要求)对实序列进行FFT编程实现。 4、(拓展要求)在MATLAB中完成其它FFT算法编程实现。 5、(拓展要求) 探讨频谱分析的灵敏度、分辨率等。 6、通过硬件(DSP)实验箱演示上述信号的时域(示波器)波形与频谱分析(计算)结果。
实验原理 • DFT的定义 • FFT算法思想 (1)按时间抽取的FFT算法思想 (2)按频率抽取的FFT算法思想
DFT的定义 对于有限长离散数字信号{x[n]},0 n N-1,其离散谱{X[k]}可以由离散付氏变换(DFT)求得。DFT的定义为: ,k=0,1,…N-1 通常令 ,称为旋转因子。
直接计算DFT的问题及FFT的基本思想: • 由DFT的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N点DFT需要(N-1)2次复数乘法和N(N-1)次加法。因此,对于一些相当大的N值(如1024)来说,直接计算它的DFT所作的计算量是很大的。 • FFT的基本思想在于,将原有的N点序列分成两个较短的序列,这些序列的DFT可以很简单的组合起来得到原序列的DFT。由于DFT计算量与点数N的平方成正比,这样拆分便可以大大减少计算量 。
基2按时间抽取(DIT)的FFT算法思想: 将长度为 的序列,先按n的奇偶分成两组: ,r=0,1,…,N/2-1 DFT化为:
基2按时间抽取(DIT)的FFT算法思想:(续) 又令 ,则上式 可以写成: (k=0,1,…,N/2-1) 可以看出,分别为从中取出的N/2点偶数点和奇数点序列的N/2点DFT值,所以,一个N点序列的DFT可以用两个N/2点序列的DFT组合而成。
基2按时间抽取(DIT)的FFT算法思想:(续) 这样,通过计算两个N/2点序列的N/2点DFT,可以组合得到N点序列的DFT值,其组合过程如下图所示:
基2按频率抽取(DIF)的FFT算法思想: 在把按k的奇偶分组之前,把输入按n的顺序分成前后两半:
基2按频率抽取(DIF)的FFT算法思想:(续) 因为 ,则有 ,所以: 按k的奇偶来讨论,k为偶数时: k为奇数时:
基2按频率抽取(DIF)的FFT算法思想:(续) 通过上面的推导, 的偶数点值 和奇数点值 分别可以由组合而成的N/2点的序列来求得,其中偶数点值 为输入x[n]的前半段和后半段之和序列的N/2点DFT值,奇数点值 为输入x[n]的前半段和后半段之差再与相乘序列的N/2点DFT值。
基2按频率抽取(DIF)的FFT算法思想:(续) 这样,也可以用两个N/2点DFT来组合成一个N点DFT,组合过程如下图所示:
FFT的实现 函数fft(x)可以计算R点序列的R点DFT值;而fft(x,N)则计算R点序列的N点DFT,若R>N,则直接截取R点DFT的前N点,若R<N,则x先进行补零扩展为N点序列再求N点DFT。函数ifft(X)可以计算R点的谱序列的R点IDFT值;而ifft(X,N)同fft(x,N)的情况。