当前位置:文档之家› 信号的频谱分析及matlab实现

信号的频谱分析及matlab实现

摘要DFT是在时域和频域上都已离散的傅里叶变换,适于数值计算且有快速算法,是利用计算机实现信号频谱分析的常用数学工具。

文章介绍了利用DFT 分析信号频谱的基本流程,重点阐述了频谱分析过程中误差形成的原因及减小分析误差的主要措施。

实例列举了MATLAB环境下频谱分析的实现程序。

通过与理论分析的对比,解释了利用DFT分析信号频谱时存在的频谱混叠、频谱泄漏及栅栏效应,,并提出了相应的改进方法。

关键词:语音信号处理MATLAB 频谱分析语音合成关键词:频谱分析;离散傅里叶变换;频谱混叠;频谱泄漏;栅栏效应目录摘要 (1)目录 (2)第1章引言 (3)第2章MATLAB简介 (3)第3章分析流程 (4)第4章分析误差 (5)4.1混叠现象 (5)4.2截断效应 (5)4.3栅栏效应 (6)第5章分析实例 (7)结束语 (10)参考文献 (10)第1章引言信号的频谱分析就是利用傅里叶分析的方法,求出与时域描述相对应的频域描述,从中找出信号频谱的变化规律,以达到特征提取的目的[1]。

不同信号的傅里叶分析理论与方法,在有关专业书中都有介绍,但实际的有待分析信号一般没有解析式,直接利用公式进行傅里叶分析非常困难。

DFT是一种时域和频域均离散化的傅里叶变换,适合数值计算且有快速算法,是分析信号的有力工具。

本文以连续时间信号为例,介绍利用DFT分析信号频谱的基本流程,重点阐述频谱分析过程中可能存在的误差。

实例列出MATLAB环境下频谱分析的实现程序。

第2章matlab简介MATLAB是美国Math Works公司推出的一种面向工程和科学计算的交互式计算软件,它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式工作环境中。

同时由于MATLAB是一个数据分析和处理功能十分强大的工程实用软件,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

MATLAB是解决工程技术问题的技术平台。

利用它能够轻松完成复杂的数值计算,数据分析,符号计算和数据可视化等任务。

MATLAB软件由主包和各类工具箱构成。

其中,主包基本是一个用C/C++等语言编写成的函数库。

该函数库提供矩阵(或数组)的各种算法以及建立在此基础上的各种应用函数和一些相关的用户有好操作界面。

而工具箱从深度和广度上大大扩展了MATLAB主包的功能和应用领域。

随着自身的不断完善和发展,MATLAB 功能越来越强大,应用也越来越广泛。

随着计算机技术和信息技术的发展,语音交互已经成为人机交互的必要手段,而语音信号的采集和处理是人机交互的前提和基础。

声卡是计算机对语音信号进行加工的重要部件,它具有对信号滤波、放大、采样保持、A/D 和D/A转换等功能。

尽管在Windows附件的娱乐中带有一个录音机,通过它可以驱动声卡采集语音信号并保存为语音文档。

但是要对采集的信号进一步分析处理就必须另外编程或通过其它软件,而且Windows附件中的录音机功能极其有限且不能扩展。

MATLAB是美国Math Works公司推出的一种面向工程和科学计算的交互式计算软件,它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式工作环境中。

在MATLAB环境中,可以通过多种编程方法驱动声卡,实现对语音信号的采集和回放。

同时由于MATLAB是一个数据分析和处理功能十分强大的工程实用软件,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

第3章分析流程实际信号一般没有解析表达式,不能直接利用傅里叶分析公式计算频谱,虽然可以采用数值积分方法进行频谱分析,但因数据量大、速度慢而无应用价值。

DFT在时域和频域均实现了离散化,适合数值计算且有快速算法,是利用计算机分析信号频谱的首选工具。

由于DFT要求信号时域离散且数量有限,如果是时域连续信号则必须先进行时域采样,即使是离散信号,如果序列很长或采样点数太多,计算机存储和DFT计算都很困难,通常采用加窗方法截取部分数据进行DFT运算。

对于有限长序列,因其频谱是连续的,DFT 只能描述其有限个频点数据,故存在所谓栅栏效应。

总之,用DFT分析实际信号的频谱,其结果必然是近似的。

即使是对所有离散信号进行DFT变换,也只能用有限个频谱数据近似表示连续频谱;如果对离散信号进行了加窗处理,则会因截断效应产生吉伯斯现象;倘若是连续信号,则还会出现频谱混叠。

但如果合理选择参数,分析误差完全可以控制在允许范围内,利用DFT 分析信号的频谱在工程上是完全可行的[2]。

分析信号频谱的基本流程如图 1 所示。

LPF A/D DFTxw(n)x(k)x(t)x’(t)x(n)w(n)图(1)第4章分析误差利用DFT(实际是用FFT)对连续或离散信号进行频谱分析时,如果信号连续一般要进行采样和截断,即使信号离散也往往需要进行加窗截断。

用有限的离散数据进行DFT 变换,得到有限个DFT 数据值,与原信号的频谱肯定不同,这种不同就是分析误差。

下面按信号频谱分析的基本流程,分别介绍误差形成的原因及减小分析误差的主要措施,为实际分析过程中适当选择参数提供理论依据。

4.1混叠现象对连续信号进行频谱分析时,先要对信号进行采样,理论上要求采样频f必须大于两倍信号的最高频率[3]。

在满足采样定理条件下,采样序列的率s数字频谱能准确反映连续信号的模拟频谱,否则会发生频谱混叠现象。

严格地讲,实际信号的持续时间有限、频谱无限,为了尽可能减少频谱混叠,信号在采样之前一般都要进行预滤波处理。

预滤波也不可能是理想低通,所以频谱混叠不可避免。

在实际工作中,为了减小频谱混叠的影响,可通过适当提高防混叠滤波器的指标和适当增大采样频率来实现,采样频率常取信号最高频率的2.5~3倍。

各类连续信号采样频率的选取原则与方法可参考文[2]。

4.2截断效应利用计算机对离散序列或连续信号的采样序列进行DFT 运算时,往往要进行截断,即将离散序列进行加窗处理。

对离散序列的加窗实际上是将离散序列与窗函数相乘,加窗后信号的频谱是加窗前信号的频谱与窗函数频谱的卷积,造成截断后信号的频谱与截断前信号的频谱不同,这就是所谓截断效应。

截断效应对频谱分析的影响主要表现在两个方面:(1) 频谱泄漏原序列经截断后,频谱会向两边展宽,通常称这种展宽为泄漏。

频谱泄漏使频谱变模糊,分辨率变差,泄漏程度与窗函数幅度谱主瓣宽度有关。

窗型一定,窗口越长,主瓣越窄,频谱泄漏越小。

窗口长度一定,矩形窗主瓣最窄,频谱泄漏最小,但其旁瓣的幅度最大。

(2) 谱间干扰对原序列截断,频谱不仅会向附近展宽,还会形成许多旁瓣,引起不同频率间的干扰,简称谱间干扰。

特别是强信号谱的旁瓣可能湮没弱信号的主谱或误认为是另一假信号的主谱线。

矩形窗的旁瓣幅度大,谱间干扰严重。

相对而言, 布莱克曼窗的旁瓣幅度比矩形窗小,谱间干扰小,但其主瓣过渡带宽,分辨率差。

采样频率或采样周期是在满足混叠误差前提下选取的,当采样频率或采样周期确定后,适当增加窗口长度有利于减小截断效应。

工程上,可用试探法确定窗口长度M ,即将M 加倍,分别进行DFT 运算,直到相邻两个长度的计算结果接近,取长度较小的M ,这样既可满足截断效应要求, 又可使存储单元最小且运算速度最快。

如对频率分辨率0F 有要求,则窗口长度M 可取0/s f f 或大于且接近该值的2的整数次幂。

在窗口长度一定情况下, 如果希望引起频谱扩展的过渡带窄,可选矩形窗,但其旁瓣大,谱间干扰严重。

若选用布莱克曼窗,旁瓣幅度小,谱间干扰相对较小,但主瓣过渡带更宽,分辨率会进一步下降[4]4.3栅栏效应对加窗后的序列进行DFT 运算时,DFT 长度必须大于或等于加窗序列的长度,否则会作自动截断处理。

实际的DFT 运算一般采用FFT 算法,其长度取大于或等于加窗序列的2的整数幂,不足进行补零处理,得到的DFT 值是对加窗序列的连续谱进行等间隔取样的结果。

这就好比通过一个有很多缝隙的栅栏去观察一个连续频谱,很多地方会被栅栏挡住,故称栅栏效应。

在加窗序列的尾部补零可使频谱的取样点更密,相当于加密了栅栏的缝隙, 使原来看不到的谱分量可能看得到,减小了栅栏效应,但由于被观察的连续谱并没有发生变化,故频率分辨率并没有提高,最多只能说可视分辨率提高了[5]。

要提高信号的频率分辨率,选择主瓣窄的截断窗可有一定的改善, 但谱间干扰会更严重,根本上只能通过增加原始信号的长度来实现。

第5章 分析实例对信号进行频谱分析时,由于信号不同,傅里叶分析的频率单位也可能不同,频率轴有不同的定标方式。

为了便于对不同信号的傅里叶分析进行对比,这里统一采用无量纲的归一化频率单位,即模拟频率对采样频率归一化; 模拟角频率对采样角频率归一化;数字频率对2π归一化;DFT 的k 值对总点数归一化。

同时,为了便于与理论值进行对比,理解误差的形成和大小,这里以确定信号的幅度谱分析为例进行分析说明。

假设信号为:-(t)=e (t)t x u 分析过程:首先利用 CTFT 公式计算其模拟频谱的理论值;然后对其进行等间隔理想采样,得到x(n)序列,利用DTFT 公式计算采样序列的数字连续频谱理论值,通过与模拟频谱的理论值对比,理解混叠误差形成的原因及减小误差的措施;接下来是对x(n)序列进行加窗处理,得到有限长加窗序列 xw ( n ), 再次利用 DTFT 公式计算加窗后序列 xw ( n )的数字连续频谱, 并与加窗前 x(n)的数字连续频谱进行对比, 理解截断误差形成的原因及减小误差的措施; 最后是对加窗序列进行DFT 运算, 得到加窗后序列 xw ( n )的 DFT 值, 它是对xw(n)数字连续频谱进行等间隔采样的采样值,通过对比,理解栅栏效应及 DFT 点数对栅栏效应的影响。

利用 MATLAB 实现上述分析过程的程序如下:clc ;close all ;clear ;%CTFT 程序, 以 x(t)=exp(-t) t>=0 为例%利用数值运算计算并绘制连续信号波形L=4, %定义信号波形显示时间长度fs=4,T=1/fs ; %定义采样频率和采样周期t_num=linspace(0,L ,100);%取若干时点, 点数决定作图精度xt_num=exp(-1*t_num);%计算信号在各时点的数值subplot(3,2,1);plot(t_num ,xt_num),%绘信号波形xlabel('时间(秒)'),ylabel('x(t)'),%加标签grid,title('(a) 信号时域波形'),%加网格和标题%利用符号运算和数值运算计算连续信号幅度谱的理论值syms t W %定义时间和角频率符号对象xt=exp(-1*t)*heaviside(t),%连续信号解析式XW=fourier(xt,t,W),%用完整调用格式计算其傅氏变换%在0 两边取若干归一化频点,点数决定作图精度w1=[linspace(-0。

相关主题