![数字信号处理及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=1739368326-46Dgp31xgGXBdwTqnDJhLediuyOCySO7-0-dee63a1fdf5fc825613eb953d37d246b)
此处向上的箭头↑指出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=1739368326-T2zYYxPwbLLKfhwsxFthzvkE4YcAQMqB-0-8c677ead24aa97c05c4519cc515281f1)
产生离散时间信号的常用方法是对模拟信号进行采样。例如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=1739368326-MXPzR70wXBIu9vX3RTdkgnVacD8hears-0-5cf35495dcc2e64a4fcc0b01595fa2ed)
单位取样序列是最简单也是使用最多的序列之一,仅在n=0时,其值为1,其他各值均为0。它类似于模拟信号中的单位冲激函数δ(t),不同的是δ(t)在t=0时,取值无穷大。单位取样序列和单位冲激函数如图2-1所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_02.jpg?sign=1739368326-r0ZDaLyHgOXqUm9V8ND9ve4KyH4TPd99-0-4f6407c23e9ddf80e268a2c3a650df90)
图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=1739368326-kQDRKX8SWUNwt1mykyytTO48OmuuoCDh-0-bfaa7a45ac9ceffd2531d450c9f873df)
在命令窗口输入MATLAB脚本:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_04.jpg?sign=1739368326-wjCYtPly2d0uxIWPleGa8deR2wOQichB-0-6342722acd436817930770aa7773b573)
输出图形如图2-2所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_05.jpg?sign=1739368326-iYTaZ4f2UVtZxE8fxp4JLDV2QKJhW64M-0-85110fe7df4b24a8b87e040b581edd5f)
图2-2 MATLAB中生成的单位取样序列δ(n-1)
(二)单位阶跃序列u(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_01.jpg?sign=1739368326-ITs2BZ736R0b5mDAg3pesl9PdNPPdGh0-0-77cdd3328ac7e6b6c17a718335ab1b33)
单位阶跃序列如图2-3所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_02.jpg?sign=1739368326-oRqMxgM8Ra7LD0KeLwXlUiAGZijlJVvM-0-eb4afcb8dbfeea1497fdd45a31910569)
图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=1739368326-52zbn8bf8dl16tvl9CteG7enJjFd5Qo3-0-1920078a588127dcf8facded745334a2)
在命令窗口输入MATLAB脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_04.jpg?sign=1739368326-O8U9vbkWuIOEqiLTFJnvyZFKeYrUcn3Z-0-36d132527fb0b78360936bccc6bc7c70)
输出图形如图2-4所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_05.jpg?sign=1739368326-NOCb5iGHxRNC6YfQfzGI3B2PmL4jMYCJ-0-8d85d45c1a8f1637d8418d58559785ac)
图2-4 MATLAB中生成的单位阶跃序列u(n)
单位阶跃序列与单位取样序列之间具有下列关系:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_06.jpg?sign=1739368326-gOka0rHKNeztzJPqsGJPm6fnMwiQfIzi-0-4ac180de704ac9e05e7e7a69a0064864)
式(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=1739368326-eNhjgyuc75fK19l48Sse01NAcsHbIZbi-0-ecdc3ff66fbe0bf9af0df3751a901afe)
式中,N为矩形序列的长度。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_01.jpg?sign=1739368326-0G7F6Z7glG1COsfuEmBn27THSyKvl318-0-1b8806a8c733925a07fab6271f290072)
图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=1739368326-NSNuieJi5frhINjqM5S6zxEw44s3edNv-0-459b34fbd4fbb7bd085b8db398bc8100)
图2-6 矩形序列R3(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_03.jpg?sign=1739368326-MCzHB77ZcZYTNs03tNQXIMh3R7SjUxZs-0-142bcb55a1dbc0aefaa9720f7cbb06a9)
(四)正弦序列
常见到形如
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_04.jpg?sign=1739368326-py2otTF17buHVGRxyQNt3SEEs8CqbCNg-0-31db36d68b19c3c74faf3834eb973dd4)
的正弦序列,其中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=1739368326-n1AvCc1jtI1cTa6dYBPrXntFfPfEwp4D-0-af1f391f0d71426135f75d7dfaaabf39)
图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=1739368326-L4qc2sSpf1rVDN9XxlDZ6nc2rnyOQcZz-0-a2266c460b73368ddde6497bd42d33e4)
的序列称为指数序列。其中,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=1739368326-1bDWlVCMWDQhzuYqgNrquLBfVVT3EPUb-0-77add4f1120919f738daa8bb0a90c7f9)
继续输入脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_01.jpg?sign=1739368326-fmxlNid522z3br4N9JGFyheDo9vexrqc-0-1df8024c704f0ba5993eef0fcbcdc45c)
图2-7 余弦序列x(n)=1.5cos(ω0n)在ω0取不同值时的波形
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_02.jpg?sign=1739368326-y9Yhi1xLLBjqoRJH07C8pd2hT0fpj8jT-0-08e7c1d6f41e40e827887c8d543beb4e)
生成的图形如图2-8所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_03.jpg?sign=1739368326-dqctXH4EZCx6u8H7pNn4zQQcQpgqrSV8-0-234059daa4819440be38e103e9ccaefc)
图2-8 x(n)=0.9n
当a为复数时,可表示成,系数A也可表示成A=|A|ejφ,则
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_05.jpg?sign=1739368326-GaaFYcs1eDhJrMDMTZV4Ae7UjSS7ExjR-0-1d580d94e910b659391482ddbd4bc472)
式中,是复指数序列x(n)的振幅。
其实部和虚部分别为
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/21_01.jpg?sign=1739368326-xzBsAwY45ao1m0w1PCbXvfmkCTFAwyic-0-4146c8d1c8f58f7f98a22d4a03a529b9)
可用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=1739368326-8rjPaYWdTq5rAT16KhfFIbiKWErHOlm4-0-38fd23434ba1115e6c61b1f6dc8348e8)
(六)周期序列
满足等式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=1739368326-TwyTWWmgO11zslkRIpD2299uRFOrVhxw-0-b280c4aead3736667ca2b109a41ec6c1)
图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=1739368326-VzGYVCipZtExkbMgv0FHsiEltrefgbHS-0-bcc5bcf380d91828863a971bff1356ae)
图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=1739368326-XdklfcUdwFR45zchxjW1GhnCSQkLEzNj-0-ab16d9fa870ae1c17161a5e432c327df)
图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=1739368326-AWAY2q54BQN5i0mk4mHGdL930U6Xsl87-0-caa1e6cd264f97453724332736a6ef05)
图2-12 信号尺度变换