《dsp课程设计《基于matlab的fft算法实现》》由会员分享,可在线阅读,更多相关《dsp课程设计《基于matlab的fft算法实现》(29页珍藏版)》请在金锄头文库上搜索。
1、目 录1 引言.12 基于 MATLAB 的 FFT 算法实现.22.1 系统总体流程图.22.2 FFT 运算规律及编程思想.32.2.1 语音信号的采集.32.2.2 DIT-FFT 算法的基本原理.32.2.3 DIT-FFT 算法的运算规律及编程思想.53 Matlab 程序实现.104 系统人机对话界面.134.1 GUI 简介.134.2 界面设计.134.3 运行调试.145 心得体会.16参考文献.17附录.18附录.211 引言MATLAB 是矩阵实验室(Matrix Laboratory)的简称,是美国 MathWorks公司出品的商数学软件,用于算法开发、数据可视化、数据
2、分析以及数值计算的高级技术计算语言和交互式环境,主要包括 MATLAB 和 Simulink 两大部分。MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。它以矩阵运算为基础,把计算、可视化、程序设计融合在一个简单易用的交互式工作环境中,是一款数据分析和处理功能都非常强大的工程适用软件。它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数据滤波、傅立叶变换、时域和频域分析、声音
3、回放以及各种图的呈现等,它的信号处理与分析工具箱位语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便的完成语音信号的处理和分析以及信号的可视化。数字信号处理是 MATLAB 重要应用的领域之一。对于有限长序列 x(n),若要求其 N 点的傅里叶变换(DFT)需要经过次复2N数乘法运算和 N*(N-1)次复数加法运算。随着 N 的增加,运算量将急剧增加,而在实际问题中,N 往往是较大的,如当 N=1024 时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用 DSP 芯片,都需要消耗大量的时间和机器内存,不能满足实时的要求。因此,DFT 的这种运算只能进行
4、理论上的计算,不适合对实时处理要求高的场合。因此,研究作为 DSP 的快速算法的 FFT 是相当必要的,快速傅里叶变换(FFT)是为提高 DFT 运算速度而采用的一种算法,快速算法的种类很多,而且目前仍在改进和提高,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。基于本学期所学的 DIT-FFT 的运算规律和编程思想以及 Matlab 的学习和使用,本课设要求在 Matlab 环境下编写基 2 DIT-FFT 算法实现对离散信号的快速傅里叶变换,再与 Matlab 软件自带的 FFT 函数实现对离散信号的傅里叶变换进行比较,如果得到的频谱相同,那么我们编写的
5、程序就是正确的。其中离散信号是通过 PC 自带的录音机录制一段 wav 语音信号,用 Matlab 采样得到离散序列 x1。如果有能力可以选做系统人机对话界面。用 GUI 界面完成人机交互方便使用的。本课程设计主要是对数字信号的分析。2 基于 MATLAB 的 FFT 算法实现2.1 系统总体流程图本设计要求录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;在 Matlab 环境下编写基 2 DIT-FFT 算法;利用自己编写的算法对已采集的语音信号进行频谱分析,并画出语音信号的时域与频谱图,并与 Matlab 数字信号处理工具箱中的 fft 函数进行对
6、比研究,验证自编算法的正确性。所以得到系统总体流程图如图 1 所示。语音信号采集完 成 信 号 时 域 图完 成 信 号 频 率 响 应编写 fft 程序,画出信号频谱 图实 现 输 入 信 号 的 倒 序实 现 一 级 中 不 同 种 蝶 形 算 运实 现 一 级 中 相 同 种 蝶 形 运 算与 M a t l a b 自 带 的 F FT 比 较图 1 系统总体流程图2.2 FFT 运算规律及编程思想2.2.1 语音信号的采集利用 PC 机自带的录音机,录制一段语音信号,保存格式为 wave 的文件,并将其保存在电脑中。在 MATLAB 中,fn=input( Enter WAV fil
7、ename:,s); x,fs,nb=wavread(fn,n1 n2); 用于读取语音,采样值放在向量 x 中,fs 表示采样频率(Hz),nb 表示采样位数。n1 n2表示读取从 n1 点到 n2 点的值(若只有一个 n的点则表示读取前 n 点的采样值) 。sound(x,fs,nb); 用于对声音的回放。向量 x则就代表了一个信号(也即一个复杂的“函数表达式” )也就是说可以像处理一个信号表达式一样处理这个声音信号。采集到语音信号之后,需要对语音信号进行分析,如语音信号的时域分析、频谱分析、谱图分析。2.2.2 DIT-FFT 算法的基本原理快速傅里叶变换(FFT)是为提高 DFT 运算
8、速度而采用的一种算法。对一个有限长度序列 x(n)的 N 点的 DFT 为:所以,要求 N 点的 DFT,需要 N2次的复数乘法运算,N*(N-1)次复数乘法运算算。随着 N 的增加,运算量将急剧增加,而在实际问题中,N 往往是较大的,如当 N=1024 时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用 DSP 芯片,都需要消耗大量的时间,不能满足实时的要求,,不适合于对实时处理要求高的场合。为了能实时处理 DFT,要想减少 DFT 的运算量可以有两个途径:第一是降 N,N 的值减小了,运算量就减少了;第二是利用旋转因子的周期性,对称性和可约性。利用这两个途径实现 DF
9、T 的快速傅里叶变换(FFT) ,FFT 算法基本上可分为按时间抽取的 FFT 算法(DIT-FFT)和按频率抽取的 FFT 算法(DIF-FFT) 。旋转因子的性质:(1)周期性(2)共轭对称性 10 10,0, 1, 2,.,11,0, 1, 2,.,1Nnk N n Nnk N kX kx n WkNx nX k WnNN )()(Nnk NnNk Nkn NWWW*)(*)(nk Nnk Nkn NWWWmkn mNkn Nmkn mNkn NWWWW/ /,(3)可约性本次课设要求用用基 2 的按时间抽取的 FFT 算法(DIT-FFT)实现 FFT 功能,设序列 x(n)的长度为
10、N,且 N 满足 N=2M,M 为正整数。若 N 不能满足上述关系,可以将序列 x(n)补零实现。按时间抽取基 2-FFT 算法的基本思路是将 N点序列按时间下标的奇偶分为两个 N/2 点序列,计算这两个 N/2 点序列的 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 的计算。利用旋转因子的可约性,即:用蝶形运算可表示为如图 2 所示: 1N 021NN 0,2,4.1,3,5.1122212 NN 0,10,11122212 1N2N 0,10,1221N nknNN nknknnNNrkrkrrNNrkrkrrX kx n Wx n Wx n Wxr WxrWx r Wxr W2j2j2222eerkNrkrkrkNNNWW 112212220012, 01NNrkkrk NNN rrk NX kxr WWxr WXkW XkN()(k)图 2 DIT-FFT 蝶形运算流图符号12, 1 , 0,)() 12()()2(21 Nrrxrxrxrx以此类推,还可以把 x1(