您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > dsp基于matlab的fft算法实现
课程设计说明书目录1摘要..........................................................................................................................12设计目的和内容......................................................................................................23基2DIT-FFT算法..................................................................................................33.1DIT-FFT算法的基本原理.............................................错误!未定义书签。3.2DIT-FFT算法的运算规律及编程思想.........................错误!未定义书签。3.3原位计算.........................................................................错误!未定义书签。3.4倒序计算.........................................................................错误!未定义书签。3.5蝶形运算........................................................................................................94MATLAB运行界面图..........................................................................................124.1fs=1000;n=2000时的原始的语音信号时域图..........................................124.1fs=1000;n=2000时的原始的语音信号频域图..........................................124.3原始语音信号FFT频谱图与原始语音信号自编FFT频谱图比较错误!未定义书签。44.4原始语音信号FFT频谱图与原始语音信号自编FFT频谱图比较........155设计总结................................................................................................................16参考文献......................................................................................................................19附录..............................................................................................................................20课程设计说明书11引言傅里叶变换在信号处理中具有十分重要的作用,但是基于离散时间的傅里叶变换具有很大的时间复杂度,根据傅里叶变换理论,对一个有限长度且长度为的离散信号,做傅里叶变换的时间复杂度为,当很大时,其实现的时间是相当惊人的(比如当为时,其完成时间为(为计算机的时钟周期)),故其实现难度是相当大的,同时也严重制约了DFT在信号分析中的应用,故需要提出一种快速的且有效的算法来实现。正是鉴于DFT极其复杂的时间复杂度,1965年和巧妙地利用因子的周期性和对称性,提出了一个DFT的快速算法,即快速傅里叶变换(FFT),从而使得DFT在信号处理中才得到真正的广泛应用。本文基于时间抽选奇偶分解,利用Matlab软件实现快速傅里叶变换。基于所编的FFT源程序应用的一个实例,本文对有限长度离散时间和连续时间信号进行频谱分析。DFT是一种应用广泛的数学变换工具,MATLAB是一款功能强大的科学计算语言。MATLAB提供的fft函数解决了DFT的快速计算问题,但由于它是内建函数而不能了解到软件实现的过程。文章以按时间抽取的基2FFT算法为例,根据快速傅里叶变换的原理和规律,绘出了算法实现的程序框图,列出了MATLAB环境下软件实现的程序,建立了从算法理论到程序实现的完整概念。在信号处理中,DFT(离散傅里叶变换)的计算具有举足轻重的地位。但是基于其复杂的计算,直接应用起来十分麻烦,基于此,本文利用Matlab软件对有限长度信号的DFT进行改进,提出FFT(快速傅里叶变换),并利用FFT对所给连续时间和离散时间信号做了频谱分析。语音信号的处理与滤波的设计主要是用MATLAB作为工具平台,设计中涉及到声音的录制、播放、存储和读取,语音信号的抽样、频谱分析,滤波器的设计及语音信号的滤波,通过数字信号处理课程的理论知识的综合运用。从实践上初步实现对数字信号的处理。课程设计说明书22设计目的和内容MATLAB全称是MatrixLaboratory,是一种功能强大、效率高、交互性好的数值和可视化计算机高级语言,它将数值分析、矩阵运算、信号处理和图形显示有机地融合为一体,形成了一个极其方便、用户界面友好的操作环境。。经过多年的发展,已经发展成为一种功能全面的软件,几乎可以解决科学计算中所有问题。MATLAB软件还提供了非常广泛和灵活的用于处理数据集的数组运算功能。综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理这次课程设计的主要目的是综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB或者DSP开发系统作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。通过对声音的采样,将声音采样后的频谱与滤波。MATLAB全称是MatrixLaboratory,是一种功能强大、效率高、交互性好的数值和可视化计算机高级语言,它将数值分析、矩阵运算、信号处理和图形显示有机地融合为一体,形成了一个极其方便、用户界面友好的操作环境。。经过多年的发展,已经发展成为一种功能全面的软件,几乎可以解决科学计算中所有问题。MATLAB软件还提供了非常广泛和灵活的用于处理数据集的数组运算功能。在本次课程设计中,主要通过MATLAB来编程对语音信号处理与滤波,设计滤波器来处理数字信号并对其进行分析。通过理论推导得出相应结论,并利用MATLAB或者DSP开发系统作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。通过对声音的采样,将声音采样后的频谱与滤波。录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;在Matlab环境下编写基2DIT-FFT算法;利用自己编写的算法对已采集的语音信号进行频谱分析,并画出语音信号的时域与频谱图,并与Matlab数字信号处理工具箱中的fft函数进行对比研究,验证自编算法的正确性。课程设计说明书3分析和处理音频信号,首先要对声音信号进行采集,MATLAB的数据采集工具箱提供了一整套命令和函数,通过调用这些函数和命令,可以直接控制声卡进行数据采集。windows自带的录音机程序也可驱动声卡来采集语音信号,并能保存为wav格式文件,提供MATLAB相关函数直接读取、写入和播放。课设以wav格式音频信号作为分析处理的输入数据。用MATLAB处理音频信号的基本流程是:现将wav格式音频信号经wavread函数转化成MATLAB列数组变量;再用MATLAB强大的运算能力进行数据分析和处理,如时域分析、频域分析、数字滤波、信号合成、信号变换等等;处理后的数据如是音频数据,可用sound、wavplay等函数直接回放。我们可以利用前面设计好的各种滤波器来实现对某些声音信号的滤波,从而改变输入信号所包含的频率成分的相对比例或滤出某些频率成分。下面介绍一下具体的操作过程。(1)利用wavread函数把指定路径下的WAV格式的声音文件读入矢量中,采样率是22050Hz。[x,fs,bits]=wavread('D:\3.wav');(2)利用sound函数以同样的码率对原声进行再现。sound(x,22050);(3)利用filter函数对样本信号进行滤波处理,以设计好的FIR滤波器为例,z=filter(bd,ad,x);(4)利用sound函数对滤波之后的信号进行再现。sound(z);(5)利用plot函数分别作出信号在滤波前后的时域波形图,以作对比。plot(x(:,1));plot(z(:,1));(6)利用fft函数对滤波前后的信号进行1024点的快速傅里叶变换FFT,采用一次基2按时间抽取。X=fft(x);Z=fft(z);(7)利用plot函数分别作出信号在滤波前后的频域波形图,以作对比。plot(f,abs(X(1:n/2)));plot(f,abs(Z(1:n/2)));MATLAB全称是MatrixLaboratory,是一种功能强大、效率高、交互性好的数值和可视化计算机高级语言,它将数值分析、矩阵运算、信号处理和图形显示有机地融合为一体,形成了一个极其方便、用户界面友好的操作环境。。经过多年的发展,已经发展成为一种功能全面的软件,几乎可以解决科学计算中所有问题。MATLAB软件还提供了非常广泛和灵活的用于处理数据集的数组运算功能。在本次课程设计中,主要通过MATLAB来编程对语音信号处理与滤波,课程设计说明书4设计滤波器来处理数字信号并对其进行分析。通过理论推导得出相应结论,并利用MATLAB或者DSP开发系统作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。通过对声音的采样,将声音采样后的频谱与滤波。录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;在Matlab环境下编写基2DIT-FFT算法;利用自己编写的算法对已采集的语音信号进行频谱分析,并画出语音信号的时域与频谱图,并与Matlab数字信号处理工具箱中的fft函数进行对比研究,验证自编算法的正确性。课程设计说明书53基2DIT-FFT算法3.1FFT算法有限长序列x(n)的N点DFT定义为:10)()(NnnkNWnxkX,式中NjNeW2,其整数次幂简称为旋转因子。直接进行DFT运算大约需要22N次三角函数计算、24N次实数乘法计算和)12(2NN次实数加法计算,且需许多索引和寻址操作[2]。文[3]列出了直接DFT的MATLAB程序,这种直接DFT运算概念清楚、编程简单,但占用内存大、运算速度低,在实际工作中并不实用。基2FFT算法的基本思想是把原始的N点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的DFT,再进行适当的组合,得到原N点序列的DFT,最终达到减少运算次数,提高运算速度的目的。按时间抽取的基2FFT算法,先是将N点输入序列x(n)在时域按奇偶次序分解成2个N/2点序列x1(n)和x2(n),再分别进行DFT运算,求出与之对应的X1(k)和X2(k),然后利用图1所示的运算流程进行蝶形运算,得到原N点序列的DFT。只要N是2的整数次幂,这种分解就可一直进行下去,直到其DFT就是本身的1点时域序列。一
本文标题:dsp基于matlab的fft算法实现
链接地址:https://www.777doc.com/doc-2871060 .html