![数字信号处理及MATLAB实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/677/41398677/b_41398677.jpg)
第一节 时域离散信号
信号是一个值会随时间和空间变化的物理量。如果信号的值随连续的时间而变化,则称为连续时间信号或者模拟信号,用xa(t)表示,变量t代表时间,一般以秒(s)计。日常生活中连续信号的例子有温度、压力、水位、化学浓度、电压与电流、位置、速度、加速度、力与扭矩等。如果信号仅在离散时间点上取值有效,这样的信号被称为时域离散信号,也称离散时间信号,用x(n)表示,其中变量n是整数值并在时间上代表一些离散时刻。因此,x(n)是一个数值的序列
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/16_01.jpg?sign=1738868104-YWu8dF7Nwu8q40OGRsGz2VPS4XyYWYkQ-0-4c92c38ba72415522e2243439372a9f7)
此处向上的箭头↑指出n=0时的样本。
在MATLAB中可用行向量来表示一个有限长序列。其样本的位置信息可用另一个行向量表示。例如,序列x(n)={x(n)}={-1,2,-2,1↑,2,4,3,5}在MATLAB中表示为
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/16_02.jpg?sign=1738868104-GHHmM0TixzCb53CbWzjpAF4hcmtbG6Im-0-edae759ae1b32711376eb7cddc4cbecd)
产生离散时间信号的常用方法是对模拟信号进行采样。例如xa=sin(t)表示一个正弦信号,它也是一个连续时间信号。如果对这个信号每隔T时间间隔取一个样点,可表示成
x(n)=xa(t)|t=nT=sin(nT)={0,0.1987,0.3894,0.5646,0.7174,0.8415,…}(T=0.2s)
如果x(n)的幅度取值用有限精度的数来表述,则这种幅度有限精度量化取值的序列称为数字信号。例如将xa(nT)|T=0.2的值用四位二进制数表示,便得到相应的数字信号,即
x(n)=xa(nT)|T=0.2={0.0000,0.0100,0.0110,0.0111,0.1000,…}
当一个系统或算法的输入是一个数字信号x(n),它的输出是另一个数字信号y(n)时,它被称为数字信号处理器。数字信号处理技术有着广泛的应用,并且在现代社会中起到了越来越重要的作用。
本章首先介绍数字信号和数字系统的表征和分类,然后阐述一个连续时间信号如何产生一个等效的离散时间信号,这个过程定义为采样。与采样处理密切相关的问题是:满足什么条件的采样样本x(n)才能包含恢复重建信号xa(t)所需的全部信息?这个问题读者可通过阅读下文得到答案。
一、基本序列
(一)单位取样序列δ(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_01.jpg?sign=1738868104-f1vHBNtH3evRIUroxGYeFRBopBurcobv-0-af6baafd45e981f9cfa7e8c5836dafc1)
单位取样序列是最简单也是使用最多的序列之一,仅在n=0时,其值为1,其他各值均为0。它类似于模拟信号中的单位冲激函数δ(t),不同的是δ(t)在t=0时,取值无穷大。单位取样序列和单位冲激函数如图2-1所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_02.jpg?sign=1738868104-h5bcXd7ALRSvaeiQ1zANduMBdyx7w2E3-0-8024c9b941f29c14908ab63b91147766)
图2-1 单位取样序列δ(n)和单位冲激函数δ(t)
在MATLAB中,函数zeros(1,N)产生一个N个零的行向量,利用它可以产生一个有限区间上的δ(n)。编写函数impseq(n0,n1,n2)来实现δ(n-n0),其中n1和n2表示序列δ(n-n0)起点和终点的位置。函数impseq(n0,n1,n2)参考程序如下:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_03.jpg?sign=1738868104-skyIXM5LaCjslj6g1WgM3uio0usL39T1-0-fb6d02ef2ada73adc5381b60a6acf211)
在命令窗口输入MATLAB脚本:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_04.jpg?sign=1738868104-b163nvXhr27ijPkFLQi73uVmVDpkZDNb-0-41e76e71d613d2c2a2c64f344e06a46a)
输出图形如图2-2所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_05.jpg?sign=1738868104-ougmrf2tythCHIuTYC0vPUxCjMLT3nBV-0-286fac51614d119c3b1339c0a6430278)
图2-2 MATLAB中生成的单位取样序列δ(n-1)
(二)单位阶跃序列u(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_01.jpg?sign=1738868104-EZjnv6Nnk9TL0f1XxDhRDZxV1AUpCCus-0-6f28b6a8df276033fdb5bcef930addc9)
单位阶跃序列如图2-3所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_02.jpg?sign=1738868104-yayIjeFTlUP4JyYplfFeS9GgF8tqb3Xe-0-bdedd3074c0213b8a1c6df2126713cd6)
图2-3 单位阶跃序列
在MATLAB中,函数ones(1,N)产生一个N个1的行向量,利用它可以实现在一个有限区间上的u(n)。编写函数stepseq(n0,n1,n2)来实现u(n-n0),其中n1和n2表示序列u(n-n0)起点和终点的位置。函数stepseq(n0,n1,n2)的参考程序如下:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_03.jpg?sign=1738868104-PfTRvkDg6UbN1qPE15KwoCzdEWvQWUHd-0-63dae9bd05d8fe61ad0428447a9b73c7)
在命令窗口输入MATLAB脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_04.jpg?sign=1738868104-lGPYn184VK76F79waN4idJCbJOcTP3Vn-0-4213be51cc80e2c5d7fb3924fd08dc7e)
输出图形如图2-4所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_05.jpg?sign=1738868104-l96PplY2x9V4SRThrAK8rmviptE46bUi-0-fb4d8efc6149ca9f616f4755105940b5)
图2-4 MATLAB中生成的单位阶跃序列u(n)
单位阶跃序列与单位取样序列之间具有下列关系:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_06.jpg?sign=1738868104-gcl6SLhAPqBYx5nGeGzDI1LRoJYZT2QL-0-8e833407dc8cdfccfc10688f44ed7f53)
式(2-3)的含义如图2-5所示,式(2-4)表示u(n)可由δ(n)向右移动1位、2位……之和表示。
(三)矩形序列RN(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_07.jpg?sign=1738868104-bz0Cbd3dJUXSwoyjuHwa6Nd3IFdO6jwb-0-6802e3128de8f09e234a5bcb92a343bf)
式中,N为矩形序列的长度。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_01.jpg?sign=1738868104-QMJIov3BioqEGCJDyNDBRfknRY6XCKqj-0-545cc70b6a1250b69e3632d92dbce389)
图2-5 δ(n)=u(n)-u(n-1)
当N=3时,RN(n)的波形如图2-6所示。矩形序列也可用单位取样序列或单位阶跃序列表示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_02.jpg?sign=1738868104-fi0ryIG8hWkbFZ2z7ma3lJBl9z9zjazY-0-c7ce3f3eede4be541e1723f2109afefc)
图2-6 矩形序列R3(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_03.jpg?sign=1738868104-PdHDciW703dWO7mt7JuDGDPRn0B9DT8R-0-f7f8034f85a8b72abbb0a7e95527e4b4)
(四)正弦序列
常见到形如
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_04.jpg?sign=1738868104-g4HW1nNdOFmfzq0oHBqnULDjPQ60lk22-0-c98c4fbf04ef6af3f7f34c2fd8a2b275)
的正弦序列,其中A,ω0和φ都是实数,分别为x(n)的振幅、频率和相位(弧度rad)。可用MATLAB函数cos( )或sin( )产生余弦序列或正弦序列。例如,要生成序列x(n)=3sin(0.2πn+π/3)+2cos(0.3πn),0≤n≤10,可在MATLAB软件的命令窗口输入脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_05.jpg?sign=1738868104-TwScxrfd5tYArSsPqgNAJnlssnnsC9HG-0-10f7607d2f21b39384e1cf1a0c80d18e)
图2-7表示余弦序列x(n)=1.5cos(ω0n)在ω0取不同值时的波形图。ω0从0逐渐增大到π的过程中,x(n)的波形振动越来越快,在ω0=π附近,振动最快;然后ω0从π增加到2π,波形振动越来越慢,在ω0=2π处,波形与ω0=0处一样。因此,在一个周期[0,2π)内,通常称ω0=0附近为低频,ω0=π附近为高频。
(五)指数序列和复指数序列
形如
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_06.jpg?sign=1738868104-0CjNyIADTZ7q3uUCJnFcChwtoMT1gCao-0-5b7e0241c3c6a79b165b0724712d44ce)
的序列称为指数序列。其中,A和a可为实数或复数,若为实数,则为实指数序列。在MAT-LAB中,使用算符“.^”实现一实指数序列。例如,要生成序列x(n)=0.9n,0≤n≤20,可在MATLAB软件的命令窗口输入脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_07.jpg?sign=1738868104-YWHm0vLV3hcHT12mo4BO42yz7aVJnZmF-0-71ecf0bfc66058f904c9b441715b163b)
继续输入脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_01.jpg?sign=1738868104-BozEfnbkxYDUq9XaT4z8BtV5D0tfRrsZ-0-f62498b3240084a57c95193bfa230d06)
图2-7 余弦序列x(n)=1.5cos(ω0n)在ω0取不同值时的波形
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_02.jpg?sign=1738868104-ocAukZBu981kr7AHxNXfQU90mrqbYU4A-0-d89ef81948d7211ce947fd93f4b45a11)
生成的图形如图2-8所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_03.jpg?sign=1738868104-neIK76rpsAdvGoh1BWBFON9A1PE5YeFo-0-97dcde269c0aee1fdce626c8d713f61d)
图2-8 x(n)=0.9n
当a为复数时,可表示成,系数A也可表示成A=|A|ejφ,则
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_05.jpg?sign=1738868104-wx6Tx7hVW5OA1ZyoiRrr7yyPgsTZJhuR-0-d10ceddefba84ccd3102bb687a9635bd)
式中,是复指数序列x(n)的振幅。
其实部和虚部分别为
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/21_01.jpg?sign=1738868104-iaP2O5aA3iNs5NpP0QBRl4pGC1Wh2Icv-0-ac92005834a186bb2e22ebd4e59077b1)
可用MATLAB函数exp()产生指数序列。例如,要生成序列x(n)=e(3+j5)n,0≤n≤20,可在MATLAB命令窗口输入脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/21_02.jpg?sign=1738868104-7x7A0A7kB1bMYbH4drh9Osz5ixpZaRe0-0-dbf9f13cc9674d00658883ea5f6c0b94)
(六)周期序列
满足等式x(n)=x(n+N)(N为正整数)的序列称为周期序列。用这个条件来检验离散时间余弦(或正弦)序列的周期性,即Acos(ω0n+φ)=Acos[ω0(n+N)+φ],不难求出ω0N=2πk,式中k为整数,也可写成,下面讨论N的几种可能情况:
1)当为整数时,k=1,则
即为正弦序列的周期。
2)当为非整数,但它是一个有理数时,设
,其中P和Q是互为素数的整数,这时,取k=Q,则N=P为正弦序列的周期。
3)当为无理数时,此正弦序列为非周期序列。
由于复指数序列可表示成余弦(或正弦)序列的形式,因此,其周期性的讨论与上述完全相同。下面举例分析几个序列的周期性。
例2-1 计算以下序列的周期:
(1)
(2)
(3)
解:(1),该序列为周期序列,且周期为3。
(2)序列的周期为4,序列cos(πn)的周期为2,均为整数,因此该序列一定为周期序列,且两个周期的最小公倍数4即为该序列的周期。
(3),是无理数,因此,该指数序列是非周期序列。
二、序列的运算
(一)信号相加
两个信号相加要求长度必须相同。如果两个序列长度不同或者长度相同,但是样本位置不同,也不能相加。可将序列增加若干零值延长,使得序列长度相等且样本位置一致。
例如:有这样两个序列x1(n)={1,2,3,4n=0,1,2,3}和x2(n)={1,2,3,4|n=-1,0,1,2},它们长度相等,但是位置不一致(即n的取值不一致)。若要将两个序列相加,必须对它们进行延长,将两个序列n的取值范围都扩展成-1≤n≤3,扩展位置的序列值取零,此时,这两个序列分别为x1(n)={0,1,2,3,4|n=-1,0,1,2,3}和x2(n)={1,2,3,4,0|n=-1,0,1,2,3},如图2-9所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/22_01.jpg?sign=1738868104-TF4OY2ccvFnEGglcWyab4JgcIQNGU7MG-0-216315044f72db44fc96130f5fece038)
图2-9 信号的相加
(二)信号相乘
信号相乘即两个信号位置相同处的数值相乘,原理与信号相加类似,这里不再举例说明。
(三)信号移位
序列y(n)与x(n)的关系表示为y(n)=x(n-k),其中k为整数。当k>0时,表示序列y(n)是将x(n)向右平移k个单位的结果;当k<0时,表示序列y(n)是将x(n)向左平移k个单位的结果。例如:x(n)={1,2,3,4|n=0,1,2,3},当y(n)=x(n+2)时,y(n)={1,2,3,4|n=-2,-1,0,1},如图2-10所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/22_02.jpg?sign=1738868104-HUfN0qhh0m9cUTpBVzvI2zroBZEvOSdh-0-52d67aef391f378064cba4aec54387b2)
图2-10 信号的移位
(四)信号反转
序列y(n)与x(n)的关系表示为y(n)=x(-n),称y(n)是x(n)的信号反转,即y(n)是将原信号x(n)以y轴为对称轴镜像得到的。例如,序列x(n)={1,2,3,4|n=0,1,2,3}的反转,如图2-11所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/23_01.jpg?sign=1738868104-XXRXdoLKzCd4RHQjFgZtHSpiQHcRgpjI-0-d38117209264366f1bbbe1a5513dc31c)
图2-11 信号的反转
(五)信号尺度变换
信号y(n)与x(n)的关系用公式y(n)=x(mn)表示,其中m取整数,表示每隔m单位取一个样本。例如,已知x(n)={1,2,3,4|n=0,1,2,3},y(n)=x(2n)表示将原序列每隔2个单位取一个点,如图2-12所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/23_02.jpg?sign=1738868104-XyT1AVNFQsNOaYYCedDXoTHLBGkgtuxR-0-0126ab98bb91ecab6b46a9d488beef8e)
图2-12 信号尺度变换