1、DSP 原理及应用大作业快速傅立叶变换快速傅立叶变换一、实验目的1. 深入了解FFT 的原理及其算法;2 掌握用窗函数法设计FFT快速傅里叶的原理和方法;3. 熟悉FFT快速傅里叶特性;4. 研究采样点数对 FFT的影响。二、实验原理快速傅里叶变换(FFT)是计算离散傅里叶变换(DFT)的快速算法。DFT 的定义式为 =)(kX)()(10kRWnxNNFFT 的基本思想:将大点数的 DFT 分解为若干个小点数 DFT 的组合,从而减少运算量。因子具有以下两个特性,可使 DFT 运算量尽量分解为小点数的 DFT 运算:NW(1) 周期性: kNnknNk)()( (2) 对称性: W)2/(利
2、用这两个性质,可以使 DFT 运算中有些项合并,以减少乘法次数。为了将大点数的 DFT 分解为小点数的 DFT 运算,要求序列的长度 N 为复合数,最常用的是 的情况(M 为正整数) 。 N一个 N 点 DFT 被分解为两个 N/2 点的 DFT。分析: 和 只有 N/2 个点( ) ,则由)(1kX)(2 12,0Nk )(kX只能求出 的前 N/2 个点的 DFT,要求出全部 N 点的 ,需WN)(X )(k2要找出 、 和 的关系,其中 。由式子)(1kX)(2)2/NkX12,0Nk )(kX可得WN ,)/(k)()(21kkN,1这样 N 点 DFT 可全部由下式确定出来:())(
3、)(2/()21kXkkXN2,0N上式可用一个专用的碟形符号来表示,这个符号对应一次复乘和两次复加运算。 ab kNWbWakNk-1图 蝶形运算符号因为 ,N/2 仍然是偶数,因此可以对两个 N/2 点的 DFT 再分别作进一步的分M2解,将两个 N/2 点的 DFT 分解成两个 N/4 点的 DFT。对于一个 的 DFT 运算,其按时间抽取的分解过程及完整流图如下图所示。83N3三、实验内容1、实验准备:设置软件仿真模式。-启动CCS 。2、打开工程FFT.pjt,浏览程序。3、编译并下载程序。4、打开观察窗口:选择菜单View-Graph-Time/Frequency5、退出CCS。四
4、、实验程序(1) FFT.c:#include “myapp.h“#include “csedu.h“#include “scancode.h“#include #define PI 3.1415926#define SAMPLENUMBER 128void InitForFFT();void MakeWave();int INPUTSAMPLENUMBER,DATASAMPLENUMBER;float fWaveRSAMPLENUMBER,fWaveISAMPLENUMBER,wSAMPLENUMBER;float sin_tabSAMPLENUMBER,cos_tabSAMPLENUMBE
5、R;void FFT(float dataRSAMPLENUMBER,float dataISAMPLENUMBER);main()int i;InitForFFT();MakeWave();for ( i=0;i0 ) b=b*2; i-; /* b= 2(L-1) */for ( j=0;j0 ) /* p=pow(2,7-L)*j; */p=p*2; i-;5p=p*j;for ( k=j;kFs/2频率段的信号在频率域进行 N 等份采样,在频率域采样的基频为 Fs/N,即 8 点DFT 之后得到的 8 个数字的含义是 X(0)表示 DC 分量 ,X(1)表示 Fs/N 的频率分量,X(m)表示 m*Fs/N 的频率分量误差分析:采样周期数越多,误差会越小,但没有必要通过增加采样周期的方法来消除谱泄漏,因为,是否会产生谱泄漏是由下式决定的:M=f*N/fs其中 f 为输入信号频率,fs 为采样率,N 为采样点数。如果求出的 M 为整数,则不会产生频谱泄漏和栅栏效应。因此,在采够一个周期的情况下,通过改变分辨率即可消除谱泄漏。另外,如果不能改变采样率(一般采样率都是 2 分频,所以不能任意设置) ,可以通过频谱校正的方法消除谱泄漏。12总之,通过增加采样点数的方法来提高分辨率或消除误差,即增加了采样时间,又增加了处理的复杂性,在实际应用中是一种不得已的方法。13