![数字信号处理及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=1738930064-i5Aixc05HXBTG7gxnaBDZ9nLpUrWldRJ-0-fc43c005df7a38ec8028fed69e0ee392)
此处向上的箭头↑指出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=1738930064-A6D4FAFxhfFT7sR86GLWcoydFjLJGBaB-0-e53a606c0608e5ba874de0004fa6b10c)
产生离散时间信号的常用方法是对模拟信号进行采样。例如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=1738930064-ORt7Wc43pSbtODCmk3PGZlp2dPYa8s9t-0-c127bcc4193b25bcee70b492d8c508a8)
单位取样序列是最简单也是使用最多的序列之一,仅在n=0时,其值为1,其他各值均为0。它类似于模拟信号中的单位冲激函数δ(t),不同的是δ(t)在t=0时,取值无穷大。单位取样序列和单位冲激函数如图2-1所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_02.jpg?sign=1738930064-aRYhHZhdXTRJptQVbaTJe2h9mz4tDCHW-0-b4c0675ec3ea41948e51f9751bed235a)
图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=1738930064-h6Le84mgsB2RtNur7YDQ5Iv1isCykloB-0-8efdf671ebe9a09c100de2fe02afec77)
在命令窗口输入MATLAB脚本:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_04.jpg?sign=1738930064-YgqzOzYQJOiS8lu6jQ9AM13hh17XKFN4-0-a44f67eb63cd42d564e9abec58b02638)
输出图形如图2-2所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/17_05.jpg?sign=1738930064-qsA2FUFhdcIDYoXTryWZBRnmGL7JrMLM-0-047d0e64ea3285e2cace1cf683e9c8ff)
图2-2 MATLAB中生成的单位取样序列δ(n-1)
(二)单位阶跃序列u(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_01.jpg?sign=1738930064-XaLdma0kc2Lxy2WgWClBy8Te6abeKHJp-0-0063731d3432ee99cb081e22af12bb52)
单位阶跃序列如图2-3所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_02.jpg?sign=1738930064-r3tUIJGv5EJBTQxzsgSfQFBWJQKz3LP7-0-f631c432f45dd747539073fd701ba7d8)
图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=1738930064-2Vu33v696MBIbTIKdORUmu2kcigC30a3-0-4ce4212357b499252605f911abcb6b5c)
在命令窗口输入MATLAB脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_04.jpg?sign=1738930064-56BYAQThnLTxDW0cOPvV1m4k27hJHy9F-0-62756f3df5964381d26caa22b9513833)
输出图形如图2-4所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_05.jpg?sign=1738930064-s5ZQiLBeeOh4ZHzUyhnb5Gkt9vyppVNe-0-53bae6fb988d654a34030949ff062b2a)
图2-4 MATLAB中生成的单位阶跃序列u(n)
单位阶跃序列与单位取样序列之间具有下列关系:
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/18_06.jpg?sign=1738930064-D4klDJaS5ljxNljTrtWgT83m00ACqDLT-0-aa63159ace8e66cf8bf26869b9189808)
式(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=1738930064-1u5i92GWxXMxm3BgilwzE78vYQRIAJun-0-d8b1b9bded3943fbff0d0a2d56c44fff)
式中,N为矩形序列的长度。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_01.jpg?sign=1738930064-jc4Hpe63ggtTuFqDHbA2I5EnpS3zpczg-0-2100c3965f578f44bd9bd206f1466a1b)
图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=1738930064-309BZZP1aQzNdzsR0We8GZGsfleWMpAe-0-134276accc2c3e16a42f52944d4580ba)
图2-6 矩形序列R3(n)
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_03.jpg?sign=1738930064-2w5FEDxJP6T6Z9hgrr2iroFlin8d27UQ-0-9e8352bbc36ecd2bb844720bd8f6ac76)
(四)正弦序列
常见到形如
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/19_04.jpg?sign=1738930064-zwrCydYd4LCqdCM90SVl9LU1KCcOU9X7-0-7c51e148ddad6de16a7c6196dfc29945)
的正弦序列,其中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=1738930064-Nvhy8L8a0f6tyDTxiaUuikF4TSSg8sms-0-fdd7b495803f3ef2dc211d0d038c38e7)
图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=1738930064-fk5rIyWd3KxCCHuNFM7JuNurGvPglv2p-0-25495267a0b0162031b01cc16b435a73)
的序列称为指数序列。其中,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=1738930064-r9vMrhpz9Txa0VQZ6Q3w7G0RQkk6o70H-0-67fcb9b760f4c5c72b57efacde02c675)
继续输入脚本
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_01.jpg?sign=1738930064-DiZcEmg1RqXS0aonxITUznAfW1HWvscy-0-f9e1e94b01b2e1f19a7923fe35c319cc)
图2-7 余弦序列x(n)=1.5cos(ω0n)在ω0取不同值时的波形
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_02.jpg?sign=1738930064-hX2aFoxJeWCaHfeTr8ra8sEt9WUJmaC9-0-a174128a804554e8ff95a78f486a0621)
生成的图形如图2-8所示。
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_03.jpg?sign=1738930064-6FKqfsLaa7FyNmTTmmCGDEmnULne4Olq-0-9d088698cf03f1f431855bb6bfa85249)
图2-8 x(n)=0.9n
当a为复数时,可表示成,系数A也可表示成A=|A|ejφ,则
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/20_05.jpg?sign=1738930064-rEhi2iKUjAv5jUWKAbKZtE3lW8dJt0oV-0-0d66b15b3a09b03331f9553ed55d1676)
式中,是复指数序列x(n)的振幅。
其实部和虚部分别为
![](https://epubservercos.yuewen.com/688291/21570843601309506/epubprivate/OEBPS/Images/21_01.jpg?sign=1738930064-95ucwjSy5lB8W9QreuRvmEV1h7AUp5x0-0-8840417b935b987353023f808dad042a)
可用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=1738930064-u220WXbewRiliBnrnY3xjuRWzP3vQkJM-0-88e7aa8479c2f4c592602138710279eb)
(六)周期序列
满足等式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=1738930064-hVTwVCCW5SE9tnhTzBnZNV8pilRTKata-0-17f8febed7610988296c0923f8784097)
图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=1738930064-DmhhJUGNp3vENB524x6ihXLLHcg3u5mr-0-c7aedc5a4530fc6fd5a520a43539341f)
图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=1738930064-xdUoSrQq580WdmYtcHbowSkFCJUGQx6e-0-12dce662e5bf3fc6087b4affa3893987)
图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=1738930064-tGk09lKyD105SDRpRIEjoxPFtngIaC0s-0-3e11460b3ac3b79572f3050d135f204b)
图2-12 信号尺度变换