本文第一部分首先比较了DFT与FFT的异同,并解释了为何FFT能极大的提高计算效率的原理,之后对利用FFT对连续及离散信号进行频谱分析的原理进行了阐述,此后结合相关的实例给出了基于Matlab的解决方案,并给出相关的代码,最后对实验的结果给出了分析与比较.本文的第二部分首先对滤波器的分类进行介绍并对模拟滤波器与数字滤波器进行了比较,其后进一步对数字滤波器做详细的解释并对两种以时域特性来划分的不同的数字滤波器进行比较,随后简单描述了窗函数法设计滤波器的原理,给出了相关的公式,紧接着本文对几种常见的不同窗函数进行了对比,给出了同一窗口长度下不同窗函数的相关参数,并对窗函数的选取理由进行了解释,此后又对Matlab中滤波器的设计工具进行了简单的阐述,最后结合具体的实例给出了各种不同数字滤波器的解决方案,并结合上一节的实验结果对滤波器的滤波结果进行了分析解释.基于DSP 的硬件实验和基于Matlab 的软件实验是数字信号处理实验的两种重要手段.采用Matlab进行软件模拟较之于基于DSP的硬件实验具有方便、快速的优点,有助于我们更好的加深对数字信号处理中基本概念、原理及方法的理解与应用.为此本文给出了利用Matlab软件解决相关实例问题的方法,最后对实验结果进行分析比较,以期这些方法对相关问题能起到一定的指导作用.
2 信号的频谱分析
2.1 DFT与FFT
频谱分析中最强大的工具是傅里叶变换,它是建立在“信号”与“频谱函数”之间的关系,其中“信号”以时间作为自变量,而“频谱函数”以频率作为自变量 .两种自变量取值的连续与离散性,就构成了不同的傅里叶变换.
利用离散傅里叶变换(DFT)可以对信号的频谱、线性卷积和功率谱进行计算,因而其在实际应用中是非常重要的.离散傅立叶变换(DFT)的计算方法是 ,设 是一个有限长序列,则它的 点DFT:
若 为 项的复数序列,则根据DFT变换的运算规则,计算每个 都会产生 次复数乘法和 次复数加法,而每一次复数乘法可以分解为四次实数乘法以及两次实数加法,一次复数加法可以分解为两次实数加法,即会产生 次加法以及 次乘法.因此当 较大时,相应的计算量也会变得非常巨大.如, =10000,则 =100000000,这样的计算量即使对于实时信号处理是无法接受的.而在FFT中,利用 的周期性和对称性,将所有的序列不停的进行“一分为二”,直到分成两两一组的DFT运算单元,在计算完2点DFT后再进行合并操作,那么 点的DFT变换就只需要 次的运算,在上例中计算量仅有40000左右,是先前的直接算法的1%,参与计算的点数越多,FFT带来的计算量的减少就越大,这便是FFT较之于DFT的优越性 ,因此在实际的操纵中,我们多采用DFT的演进形式快速傅里叶变换(FFT)进行频谱分析.本文中也采用FFT对信号进行频谱分析,用以更深入的研究信号的频率成分和幅值.
2.2 利用FFT进行信号频谱分析原理
在数字信号处理中,经常会遇到信号的频谱分析.所谓信号的谱分析,就是计算信号的傅立叶变换.通过信号的傅立叶变换可以分析信号中的频率成分的分布情况,从而根据实际的需要来对信号进行处理.
若信号是离散信号,且 本身是有限长的序列,它的傅里叶变换为:
如果序列无限长,对其做截断处理.利用计算机计算序列的频谱就是直接对序列进行FFT运算求得 ,就代表了序列在 之间的离散频谱值,即:
若信号是连续信号,它的傅里叶变换为