数字信号处理及其MATLAB实现
信号处理中的matlab 采用matlab来实现数字信号处理的一些相关函数和方程第一章绪论第一节数字信号处理概述数字信号处理,或者说对信号的数字处理,是60年代前后发腰起来的一门新兴学科。进入70年代以来,随着电子计算机、大规模集成电路(LSI)和超大规模集成电路(VLSI),以及微处理器技术的迅猛发展,数字信号处理无论在理论上还是在工程应用中,都是目前发展最快的学科之一,并且趋完善和成熟由于数字计算机和大规模集成电路的发展和普及,有人似乎认为现在是“数字万能”的时代了,这是一种偏见,作为一次信息源,或称为原始信号源例如谱音、图像等模拟信号,它的重要性今后也不会改变然而数字技术的发晨却为模拟信号的数字处理开胖辟了广阁的前景。对数字信号处理没有一个严格的定义我们不妨把用包括钦件在内的数字技术来处理摸拟信号叫做数字信号处理。或者简单地说数字信号处理就是用效竽的方法对信号进行变换和处理从学科的内容看数宇滤波器和快速傅里叶变换是数字信号处理的两个最重要的学科分支也是数字信弓处理的核心内容。如果仅仅用数宇滤波器代替某个系统中的模拟滤波器,则还不能充分发挥数字技术的特长、事实上,对信号进行调制、滤波、变换、增强、压缩检测、估计、识别等都是数字信号处理的研究范围。用数字的方法实现具有各种功能的信号处理系统,可以使系统做到更加经济和小型化进而有可能实现过大用模拟技术难以实现的各种功能图1-1给出了模拟信号数字化处理系统的简化框图。此系统先将模拟信号变换为数字信号经数字倌号处理后,再变换成模拟信号输出。其中抗混叠滤波器的作用是将输入信号rt)中高于拆叠频率(其值等于采样频率的一)的分量港除,以防信号颏谱的混叠。随后,信号经采样和AD变换后,交成数字信号x(n)。数字信号处理器对r(n)进行处理,得到输出数字信号y(n),经冂A变换器变成模拟信号。此信号经低通滤滅器,滤除不需要的高频分量最后输出平滑的模拟信号y(t)抗混壁可(t数字信号gR)低通xi()H A/D滤证器处埋滤波器图1-1数字信号处理系绕的简化框图实际的数字信号处理系统并不一定要包括图」所示的所与方框。自些系统只需数字信号输出就不需要D/A变换器;有些系统的蝓入已经是数字信号,那么就不需要AD变换器;对于纯数字系统,则只需要数字信号处理器这·核心部分就行了。目前数字信号处理技术已广泛应用于数字通信雷达遥感声纳普音合成、图像处理、量与控制、高褙晰度电视、数字睿响、多媒体投术、地球物理学生物医学工程振动工程以及机器人等各个领域而且随着科学技术的发展其究范围和应用领域还在不断地发展和扩大信号是如何被处理的?我们在实际中所遇到的信号大部分是擷拟信号、它们的幅度随时间连续地变化。通常用由无源或冇源器件组成的屯网帑对它们作处理ε人所共知,这种方法称为模拟信号理(AsP)例如线电和电视接收机模拟信号:xn(1)>模拟信号处理器|>模拟信号y(t)它们也可以用包括加法器乘法器、和逻望元件或用做处理器组成的数字硬件来处理。但是必须先把模拟信号变成适合于数字硬件来处理的形式。这样的信号形式称为数字信号。它在-…定的时间间隔内只取有限数日的数值之一,因而它能月二进制数或位来表示:数字信号的处理称为DSP,亡可用框图表示:等效模拟信号处理器核拟二LPFi→「ADC→(数)→sP]→(数字)→[AC→[R一=模拟离散系统图中各个方框的意义介绍如下:P恥:这是—个前置滤波器或反泄漏滤波器,它限制了模拟信号以防止泄漏ADC:模数转换器,它由模拟信号产生出一个二进制流数字信号处理:这是DSP的心脏,它可以代表一个通用计算机或专用处理器,或数字硬件等等DAC:这是ABC的逆还辨,称为数-模转换器,它由一个一进制流产生一个阶娣波形,作为形成模拟信号的第一步PoF:这是一个后置滤波器,它把阶稊波形平滑成为预期的模拟信号。从上面两种信号处理的方法中可以看到,DSP力法比看来简单的ASP方法更加复杂,包括更多的元件c因此人们要问:为什么要用数字方法处理信号?答案在于DSP带来的很多优DSP胜于ASP的优点Asp的主要缺点是在作复杂信号处理时只有有限的能力。这造成了处理的不灵活性和系统时同的复杂性。这也造成了产品的昂贵。另一方面采用DSP方法,它可以把一个便官的个人汁算机变成一个强大的信号处理器。DSP的一些重要的优点如下:用DSP方法的系统的开发可以用通用计算机亠的软件来进行。因此D少P比较谷易开发和测式,而软件是可移植的2.〕SP运算是单纯地基于加法和乘法,这导致特別稳定的处理性能—例如不受温度影3.Dsp运算可方便地作实时的修改,通常只要改变程序,或对寄存器重新加载4.由于超大规模集成电路(ⅵsⅠ)降低了存储器、门、微处理器等等的价格,DSP比较便DsF的主要缺点是运算速度低,特别是对很高频的信号。主要由于它的上述优点,DSP现在巨是许多技术和应用中的首选方法,诸如消费电子通信、无绳电话和医学图象等DSP的两个要类别大部分DSP运算可分为信号分析任务和信号滤波任务两类,图示如下数宇信号讠分析数宁滤波测量数字信号信号分析本任务涉及信号特性的测量。它通常是个频域的运算。它的一些应用为:≯谱(频率和/或相位〕分析语音分析说话人识别若目标检测信号滤波本任务的特征是“信号人信号出”的情况。实现这个任务的系统通常被称为派波器。它通常〔但不总是}作时域运算。它的一些用途为:兴滤除不需要的背景噪声去除于批共频带分割信号谱的成形在某些应用中,例如语音合成、首先要对信号进行分析,研究它的特征。然后再用于数字滤波器中来产生合成的声音本书的前半部讨论DSP的信号分析部分。在篇二章中,我们从离散信号和系统的描述开始、第二章对这些信号和系统在频域进行了分析。第四章介绍了频域描述的普遍方法——称为2变换。第五章讨论了讨算付利叶变换的实际算法,包括离散付利叶变换和快速付利叶变换本书的后半部讨论DSP的信号滤波方而。在第六章中我们描述了数字洁波器的不同状和结均,在第七章中给出了一种滤波器—有限长度脉疖响应(FIR滤波器的设计技术和算法。而在第八章中给出了另一种称为无限长度脉冲响应(IR)滤波器的设计方法。在这两章中,我们只讨论滤波器设计中简单而度用的技术,没有讨论更先进的技术。最后,在最末两章以设任务的形式给出了些实际应用题,它们可以用前八章所学的内容来完成第九章介绍了且适应滤波,讨论了系统辫识、干扰抑制、自适应线路信号增强等等的简单设计任务第十章绐出了数字通信的一个简单的介绍,并给出有关 PCM DPCM和LPC等方面论题的设订托务:在所有各章十,中心主题是聪明地应用和适当地演示 MATLAC工具。对已有的DSP中太多数的 MATLAB函数都作了详细的说明,在许多例子中演示∮如何正确地使用它:们此外还开发了许多新的 MATLAR函数,以便深入领会一些算法工作的内涵我们相信这种亲自动手的厅法将能信学生去除对P的害怕心理并提供丰富的学习经验关于 MATI.AR的一些说明MATLAB是一种交互式的以矩阵为基础的系统,它用干科学和工程的计算与可视化。它的力量在丁它只需用其他编程语言(如 FORTRAN或C)的几分之一的时间即可方便地解决复杂的数值计算问题、它的强有力也在于它那相对简单的编程功能:M4TIAR很容易扩展和创造新的命令和凶数MATLAB能在很多计算环境卜还行: Sun/hp,Ⅴ AXstation作站、80x86PC、 Apple acushL,'AX和些炸行计算机。 MATLAR的基本程序已经由于近年来出现的大量的工具箱(即对某-专題开发的函数集)而得到进一步的加强。本书中的信息一般均适用于所有上述环境:本#的开发开始于在D0S下运行的 MATlAB3.5专业坂c比较便宜包含较少的工具箱和函数的学生版也由 Prentice-Hal!出版社提供了。因此我们决定使本书中开发的M4TLAB程序和其他内容能与学生版兼容。然而当前的主流版本已经是具有图形用户界面的MATAB4.2版,而且包含了增强了的新丁具箱的貝有图形用户界面(GU)的新的学生版也已于i995年月推出,本书也完全与这个版本蒹容。我们尽了最大努力来弄清那些存在而可用的新函数。在学生版中新加了一个符号运算( Symbolic)工具箱,它是基于 MAPLE的。因为数字信号处理主要用到数值计算,在本书中既未讨论也未用到符号运算工具箱MATLAB的范围和能力远远超过了在木节中说的这些。再给出 MATLAB的详细的信息和教材是没有意义的,闲为在这个论题已经有很多的优秀书籍和手册可用了。学生应该参阅 MATLAB用户手册12和参考手册1]同样学生应该尝试[3]中的教科书。上面所给的参考书中的信息,以及在线帮助的义件,通营对使用本书学生已是足够了。第二章离散时间信号和系统我们从离散时间的信号和系统开始研究。本章将介绍许多重要类型的信号和它们的运算。线性和时不变系统讨论得最多因为它们最容易分析和实现。对卷积和差分方程表示式给予了特别的注意,因为它们在数字信号处理和 MATLAB中的重要性。本享的重点是用MATLAB表示和实现信号和系统离散时间信号信号可以粗略地分为模拟信号和数字信号。模拟信号将用x(r)表示其巾变量t可以表示江何物浬量,但我们假定它代表以秒为单位的时间。离散信号用x(n)表示。其中变量n为整数并代表时问的离散时刻。因此它也称为离散时间信号。他是一个数字的序列并可用以下符号之一来表述x(n)={x(n川={.,x(-1),x(0),x(1),其中,向上的箭头表示在n=0处的取样。在 MATLAB中,我们可以用一个列向量来表示一个有限长度的序列。然而这样一个向量并没有包含采样位置的信息。因此,x(n)的正确表示方式应该包括分别表示x和n两个向量。例如序列x(n)=12,1,-1,0,1,437在 MATLAB中表示为:>>n=-3,-2,-1,0,1.2,3,4];x=[2,1,-1,0,1,4,3,7];当不需要采样位置信息或这个信息是多余的时候(例如该序列从n=0开始),我们可以只用x向量来表示。由于有限的内存 MATLAB无法表示一个任意无限序列。序列的类型为了分析的需要,在数宇信号处理中用了一些基本的序列。它们的定义和 MATLAB表达式如下1单位采样序列Sm)=.,0,0,1,0,0,U,a≠0在 MATLAB中,函数 eros(1,N)产生一个由N个零组成的外向量它可用米实现有限区间的δ(n)。然而,更高明的方法是利用逻辑关系式n==0来实现合(n)。例姻,要实现1,h=D6(n-n0)在n1≤n≤n2区间内的值我们可用如下的 MATLAB函数function Lx.n=impseq(nO, nI, n2)c Generates x(n)=delta(n-nO);nl <=n<= n2:ixn= inipscgi( no,nl. n2)n=[n:n2];x=:(a-m0)==0]2.单位阶跃序列u(n0,t<0在 MATLAB中函数one(1,N)产生由N个1组成的列向量。它可用来产生有張区间上的t(:)。另一个高明的方法是使用逻辑关系式a>=0。在n1≤m0≤n2区间内实现。R之7可以用如下的 MATLAB函数。function [x,n]= stcpscq(no,n1, n2c Generates x(n)=u(n-n0): n1 <=n<=n2[x,n]%n=[n1:n2]:x=[(n-m03实数指数序列}}yn;a∈R在4!·…中,要用数组运算符“,来实现一个实指数序列。例如要实现序列x(n)(0.9),0≤n≤10应该用下列 MATLAB程序>;n={0:10];x=(0.9).;4.复数指数序列其中a称为阻尼系数而a0是以弧度为单位的角频率。 MATLAB函数expb可用来产生指数序列。例如要产生x(n)=exp[(2+3)n],≤n≤0,可以用下列 MATLAB程序n=[0:10];x=exp((2+3j)*n)5正余弦序列:(n)=cos(oo n+8),V其中为以弧度为单位的相角。 MATLAB函数cos(或sin)可用来产生正余弦序列。例如,要产生x(n}=3cs(0.1n+/3)+2sin(0,5mn),0≤n≤10,应该用下列 MATLAB程序n=[0:10];x=3兴eos(,【兴pn+p/3)+2*sin(0.5*pi“n6随机序列:许多实际的序列是不能像上面那样用数学式来描述的。这些序列称为随机或 Stachiaztic序列并用相应的概率密度函数或统计矩来表征。在 MATLAB中,有两种(伪)随机序列可用 rand(1,N)产生其元素在[0,】]之间均匀分布而长度为N的随机序列。 randn(1,N)则产生均值为0,方差为1,长度为N的高斯随机序列。其他的随机序列都可用这两种函数的变换得到。7周期序列:如果序列x(n)=x(n+N),n则x(m)称为周期的。满足上述关系的最小数N秫为基本周期。我们用(m)来表示周期序列。要从一个周期!x(n),0≤n≤N-1}产生有P个周期的序列x(n),可以把它复制P次:tilde =lx, x,.,x]:但是高明的方法是利用 MATLAB的强有力的下标能力。先产生一个包含P行t(n)值的矩阵,然后用结构(:)来把它的P行串接起来成为一个长行,不过这种结构只能用于列向所以我们往往还要用矩阵转置來把它扩展到行向。>> tilde=x'“ones(1,P);%P列x;x是个行向量S tilde= xtilde!: )i%长的列问量atilde= tilde’;%长的行向量注意后两行可合成一条命令以缩短代码,这可从例2.1中看到对序列的运算这里将简要地介绍序列的基本运算和它们的 MATLAB等效程序1.信号相加:这是一种对应的样本与样本之间的相加。表为:π}+{x2(n)}=1xn(n)+x2(在 MATLAB中它可用算术运算符“+"实现。然而x1(n)和x2(n)的长度必须相等。如果序列长度不等,或者长度虽然相等但采样的位置不同,就不能用运算符“+”了。我们必须首先给x1、n)和x2(n)以适当的参数使它们有同样的位置向量n(因而也有同样的长度)。这需要非莒注意 MATLAB的下标运算。特别是逻辑与运算“&”,关系运算如“<=”和“=”,以及要用id函数来使x1(n)和x2(n)具有相同的长度。下面称为sgad的函数演示∫这些运算function [y, a]=sigadd(x1,n1, x2, n2%实现y(n)=x1(n)+x2(n)%%o [y, n]=sigadu(xl, n1, x2, n2%y〓在包括n和n2的n上求和序列%x1=长为n的第一个序列%x2=长为n2的第二个序列(n2可与n1不等)n= in( lin (nl), min(n2)); max( max(nl), max(n2)):%y(n)的长度Y1= zeros(1, length(n): y2=y‰初始化l(fnl(n>=min(n)!(n<=max(n)==1)=x1;%具有yn)的长度的x1y2ind(n>=mn(n2)&(n<=max(n2))==1)=x2;%具有y(n)的长度的x2%序列相它的应用在例2.2中叙述。2信号相乘:这是对应采样值之间的相乘(即“点乘)表为:t(n21x1(几)x在 MATLAB中,它由数组运算符.兴”实现。但它受到“+"运算符同样的限制。因此必
下载地址
用户评论