仅供个人参考不得用于商业用途第5章MATLAB信号处理基础知识在前面的章节中,我们对MATLABR2007a的基本知识作了详细的介绍,目的是让读者对MATLAB的应用环境以及基本功能有个初步的了解。随着MATLAB版本不断升级,其功能日益强大,应用范围更是日益广泛,覆盖了工业、电子、医疗、建筑等众多领域。特别是MATLAB主要用于矩阵运算,在数据分析、信号处理、自动控制等方面具有非常强大的功能,已成为科研人员和工程技术人员必不可少的工具之一。从本章开始,我们将介绍MATLAB在特定领域内的应用。数字信号处理是当前的热门学科之一,相应的MATLABR2007a所提供的信号处理工具箱则对该方面的研究提供了非常全面的支持。本章将基于信号处理工具箱,介绍MATLAB信号处理的基础知识,包括信号处理工具箱的简介、信号表示方法、数据读入方式、一些典型的离散序列和常用波形如何产生等内容。Forpersonaluseonlyinstudyandresearch;notforcommercialuse熟悉信号处理工具箱的基本功能和特性掌握信号的表示方法和数据的读入方式掌握几种典型的离散序列掌握常用波形发生器分别生成单位抽样序列0和5。分别生成单位阶跃序列0u和5u。生成正弦型序列8/sinn。分别生成实指数序列n4/3和n3/4。生成复指数序列nje6/05.0。产生均值为0.5,方差为0.1的白噪声序列。将实指数序列n4/3扩展为具有3个周期的序列。学学习习目目标标练练习习案案例例仅供个人参考不得用于商业用途生成一个方波信号,要求正信号所占百分比为60%。生成0.5s的锯齿波和三角波信号,频率都为10Hz,采样频率为10kHz。已知输入变量x,生成sinc函数波形。生成一个线性扫频信号。产生一个二次型扫频信号,要求二次型扫频信号频谱为凹状。绘出狄立克莱(Dirichlet)函数图形。绘出中心频率为50kHz的高斯正弦脉冲,要求相对带宽60%,包络下降到峰值的40dB之下。分别产生一个对称的和一个非对称的三角脉冲。产生一个矩形脉冲,要求脉冲宽度为2s。产生一个锯齿形脉冲序列,要求重复频率为3Hz,锯齿宽度0.1s,信号总长度1s,采样频率1kHz。产生一个幅度递减的高斯脉冲序列,每个脉冲的中心频率10kHz,带宽40%,脉冲重复频率为1kHz,采样率50kHz,脉冲序列长度为10ms,脉冲幅度每次递减0.8。假设一个输入信号为三角波,绘出该信号经压控振荡器的输出波形,已知采样频率10kHz。5.1信号处理工具箱简介MATLAB工具箱中包含了许多用于解决具体问题的应用程序专用M文件,而信号处理工具箱则包含了许多执行信号处理算法的函数,如滤波器设计与实现、频谱分析、加窗、转换等等。本节将简要介绍一下信号处理工具箱的基本情况。5.1.1什么是信号处理工具箱信号处理工具箱(SignalProcessingToolbox)是基于MATLAB数值计算环境的一系列工具(函数)的集合。工具箱支持各种形式的信号处理操作,从波形产生到滤波器设计和实现、参数建模和谱分析等等。工具箱提供了两大类工具:命令行函数和图形用户界面(GUI),其中命令行函数主要应用于以下几个方面:离散时间滤波器设计、分析和实现模拟滤波器设计、分析和实现线性系统变换窗函数谱分析和倒谱分析(cepstralanalysis)变换(transforms)统计信号处理参数建模线性预测多速率信号处理仅供个人参考不得用于商业用途波形产生而交互式的图形用户界面主要应用于:滤波器设计和分析窗函数设计和分析信号作图和分析谱分析滤波处理5.1.2信号的表示方法在MATLAB环境中,大部分数据都是以数值阵列的形式表示,即将一组实数或虚数按一定顺序排列在两维或更多维空间内。因而采集到的基本信号(包括一维信号或序列、多通道信号、二维信号等)都要表示成阵列的形式。对于一维采样信号或序列,在MATLAB中用向量表示。所谓向量是1×n或n×1的阵列,这里n是序列的采样值个数。引入一个序列的方法之一是在命令提示符后输入一列元素。例如:x=[538-607]这条语句产生了一个简单的行向量,该向量由6个实数组成的序列构成。转置变换就会将该序列变成一个列向量:x=x'结果为:x=538-607对于单通道信号而言,最好采用列向量进行表示,这是因为列向量较易扩展到多通道。对于多通道数据而言,一个矩阵中的每一列都对应于一个通道,而矩阵中的每一行对应于一组采样点。一个包含x、2x和x/2的三通道信号可以表示为y=[x2*xx/2]将上面的x值代入,得到结果:y=5.000010.00002.50003.00006.00001.50008.000016.00004.0000-6.0000-12.0000-3.00000.00000.00000.0000仅供个人参考不得用于商业用途7.000014.00003.50005.1.3数据的读入方式在MATLAB工作环境内读入在后续章节当中的一些具体范例,数据的获取一般通过以下两种方式:直接输入,即在键盘上手动输入数据;利用MATLAB或工具箱函数,例如sin、cos、sawtooth、square等等;在MATLAB工作环境外读入在某些应用场合,可能需要从MATLAB工作环境之外输入。根据数据的格式,可以采用以下几种方法读入:利用MATLAB的“load”命令,从ASCII文件或MAT文件中加载数据,该函数的使用方法已在第二章中给出介绍,这里不再赘述;利用一个低层文件I/O函数将数据读入MATLAB,例如“fopen,fread,fscanf”等;开发一个MEX文件来读取数据;将数据转换为MAT文件也可利用其他资源读入数据,例如高级程序语言(Fortran或者C等)可将数据写成MAT文件形式,再用MATLAB“load”命令读取。提示:信号处理工具箱仅支持双精度输入。如果输入单精度浮点型或整数型数据,将得不到正确的结果。将滤波器设计工具箱与定点工具箱联合使用,可使单精度浮点和定点类型数据能够用于滤波处理及滤波器设计。5.1.4工具箱的核心功能信号处理工具箱函数大部分是一些以M文件表示的算法,能够实现多种信号处理功能。这些函数是在MATLAB计算与制图环境之外的专门用于信号处理领域的功能扩展。信号与系统工具箱函数所处理的基本实体是信号和系统。这些函数专门用于处理数字(或离散)信号,而非模拟(或连续)信号。工具箱支持的主要滤波器类型是单输入单输出的线性非时变滤波器。可以利用一个或几个模型(例如传递函数、状态空间、零极点增益等)来表示线性时不变系统,当然,这些不同表达形式之间可以进行相互转换。滤波器设计分析与实现信号处理工具箱提供滤波器设计功能,即按照特定需求,使用者可以自行设计滤波器。工具箱中包含的滤波器设计功能主要包括FIR和IIR滤波器设计分析和实现、滤波阶数估计、模拟滤波器原型设计与转换等。线性系统转换工具箱拥有大量的转换函数,包括二次剖面、状态空间、零极点、网格或梯形函数、以及传递函数之间的转换等。仅供个人参考不得用于商业用途窗函数工具箱提供了许多常用的窗函数,同时也提供了图形用户界面(GUI)以便于查看和比较这些窗函数,以及利用这些窗函数设计滤波器。谱分析采用参量和非参量方法,工具箱函数可用于估计功率谱密度、均方谱和伪谱。工具箱中包含的一些谱分析方法有Burg法、协方差法、特征向量法、周期图法、Welch和Yule-Walker法等等。其他的函数可用于计算功率谱密度平均能量和单边谱,以及将DC分量移动到谱中心位置等功能。变换函数工具箱包含各种类型的变换和逆变换函数,包括傅立叶变换、Z变换、离散余弦变换、希尔伯特变换等二次剖面、状态空间、零极点、网格或梯形函数、以及传递函数之间的转换等。统计信号处理工具箱包含计算相关、互相关、协方差和自相关等统计信息的函数。参数建模工具箱提供了一些用于自回归参数建模的方法,有:Burg法、协方差法、Yule-Walker法等,同时也提供了一些函数用于拟合模拟滤波器或离散时间滤波器的频率响应。线性预测工具箱包含了一些函数用于计算线性预测系数,以及自相关函数与预测多项式、反射系数和线谱频率之间的转换。多速率信号处理抽取、增降采样、重采样和三次样条插值等多速率信号处理功能,在工具箱中也有相应函数来实现。波形产生多种周期和非周期波形也可用工具箱中的相应函数来产生,包括线性调频脉冲、高斯射频脉冲、高斯单脉冲、脉冲串、矩形波、三角波、锯齿波、方波等等。其他功能工具箱函数除了能够实现以上各种功能之外,还包括倒谱分析、调制、解调,以及各种绘图方法。5.2典型离散序列在实际中的信号往往是连续的,经过采样和量化之后就变成离散的序列,才可送入计算机或数字滤波器进行处理,因此,我们这里关注的都是离散序列,或者说MATLAB处理的都是离散序列。首先给出一些常用的、比较典型的离散序列信号形式。5.2.1单位抽样序列单位抽样序列的定义为仅供个人参考不得用于商业用途0001nnn单位抽样序列n在离散信号处理中的作用类似于连续信号处理中的冲激函数t,但不同的是t是一个极限概念的信号,在0t时脉宽趋于零,幅值趋于无穷大,因而并非一个现实的信号,而n在0n时幅值为1,形式简单便于计算。如果将n在时间轴上延迟了k个采样周期,则相应表达式为knknkn01在MATLAB中可借助函数zeros(1,N)来实现单位抽样序列。函数zeros(1,N)产生一个长度为N的向量,向量中的每个元素都为零。下面通过具体例子看一下单位抽样序列的MATLAB生成方法。例5-1分别生成单位抽样序列0和5。%实现单位抽样序列0程序k=-10:10;delta=[zeros(1,10),1,zeros(1,10)];stem(k,delta)%实现单位抽样序列5程序k=-10:10;delta=[zeros(1,15),1,zeros(1,5)];stem(k,delta)程序运行结果如图5-1所示。(a)0(b)4图5-1单位抽样序列波形5.2.2单位阶跃序列单位阶跃序列的定义为0001nnnu单位抽样序列与单位阶跃序列关系密切,可互相表示,表达式为仅供个人参考不得用于商业用途1nunun0kknnu在MATLAB中可利用函数ones(1,N)来实现单位阶跃序列。函数ones(1,N)产生长度为N的向量,向量中的每个元素都为单位1。MATLAB生成单位阶跃序列的方法通过下面的例子给出。例5-2分别生成单位阶跃序列0u和5u。%实现单位阶跃序列0uk=-10:10;delta=[zeros(1,10),ones(1,11)];stem(k,delta)%实现单位阶跃序列5uk=-10:10;delta=[zeros(1,15),ones(1,6)];stem(k,delta)程序运行结果如图5-2所示。(a)0u(b)4u图5-2单位阶跃序列波形提示:MATLAB产生的都是有限长序列,因此这里的单位阶跃序列为有限区间上的u(n)。5.2.3正弦型序列正弦序列的定义如下00sinnAnx这里A为幅度,0为数字角频率,0为初始相位。正弦序列可对连续正弦波信号采样后得到。在MATLAB中,利用函数sin或cos产生正(余)弦序列,这与连续正弦信号类似,只不过绘图采用stem函数,而非plot函数。下面是产生正弦序列8sinn的MATLAB程序范仅供个人参考不得用于商业用途例。例5-3生成正弦型序列8sinn。%实现正弦型序列程序n=0:50;x=sin(pi/8*n);stem(n,x)程序运行结果如图5-3所示。图5