- 数字信号处理及MATLAB实现
- 刘芳 周蜜编著
- 2981字
- 2021-11-12 11:20:02
第一节 时域离散信号
信号是一个值会随时间和空间变化的物理量。如果信号的值随连续的时间而变化,则称为连续时间信号或者模拟信号,用xa(t)表示,变量t代表时间,一般以秒(s)计。日常生活中连续信号的例子有温度、压力、水位、化学浓度、电压与电流、位置、速度、加速度、力与扭矩等。如果信号仅在离散时间点上取值有效,这样的信号被称为时域离散信号,也称离散时间信号,用x(n)表示,其中变量n是整数值并在时间上代表一些离散时刻。因此,x(n)是一个数值的序列
此处向上的箭头↑指出n=0时的样本。
在MATLAB中可用行向量来表示一个有限长序列。其样本的位置信息可用另一个行向量表示。例如,序列x(n)={x(n)}={-1,2,-2,1↑,2,4,3,5}在MATLAB中表示为
产生离散时间信号的常用方法是对模拟信号进行采样。例如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)
单位取样序列是最简单也是使用最多的序列之一,仅在n=0时,其值为1,其他各值均为0。它类似于模拟信号中的单位冲激函数δ(t),不同的是δ(t)在t=0时,取值无穷大。单位取样序列和单位冲激函数如图2-1所示。
图2-1 单位取样序列δ(n)和单位冲激函数δ(t)
在MATLAB中,函数zeros(1,N)产生一个N个零的行向量,利用它可以产生一个有限区间上的δ(n)。编写函数impseq(n0,n1,n2)来实现δ(n-n0),其中n1和n2表示序列δ(n-n0)起点和终点的位置。函数impseq(n0,n1,n2)参考程序如下:
在命令窗口输入MATLAB脚本:
输出图形如图2-2所示。
图2-2 MATLAB中生成的单位取样序列δ(n-1)
(二)单位阶跃序列u(n)
单位阶跃序列如图2-3所示。
图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)的参考程序如下:
在命令窗口输入MATLAB脚本
输出图形如图2-4所示。
图2-4 MATLAB中生成的单位阶跃序列u(n)
单位阶跃序列与单位取样序列之间具有下列关系:
式(2-3)的含义如图2-5所示,式(2-4)表示u(n)可由δ(n)向右移动1位、2位……之和表示。
(三)矩形序列RN(n)
式中,N为矩形序列的长度。
图2-5 δ(n)=u(n)-u(n-1)
当N=3时,RN(n)的波形如图2-6所示。矩形序列也可用单位取样序列或单位阶跃序列表示。
图2-6 矩形序列R3(n)
(四)正弦序列
常见到形如
的正弦序列,其中A,ω0和φ都是实数,分别为x(n)的振幅、频率和相位(弧度rad)。可用MATLAB函数cos( )或sin( )产生余弦序列或正弦序列。例如,要生成序列x(n)=3sin(0.2πn+π/3)+2cos(0.3πn),0≤n≤10,可在MATLAB软件的命令窗口输入脚本
图2-7表示余弦序列x(n)=1.5cos(ω0n)在ω0取不同值时的波形图。ω0从0逐渐增大到π的过程中,x(n)的波形振动越来越快,在ω0=π附近,振动最快;然后ω0从π增加到2π,波形振动越来越慢,在ω0=2π处,波形与ω0=0处一样。因此,在一个周期[0,2π)内,通常称ω0=0附近为低频,ω0=π附近为高频。
(五)指数序列和复指数序列
形如
的序列称为指数序列。其中,A和a可为实数或复数,若为实数,则为实指数序列。在MAT-LAB中,使用算符“.^”实现一实指数序列。例如,要生成序列x(n)=0.9n,0≤n≤20,可在MATLAB软件的命令窗口输入脚本
继续输入脚本
图2-7 余弦序列x(n)=1.5cos(ω0n)在ω0取不同值时的波形
生成的图形如图2-8所示。
图2-8 x(n)=0.9n
当a为复数时,可表示成,系数A也可表示成A=|A|ejφ,则
式中,是复指数序列x(n)的振幅。
其实部和虚部分别为
可用MATLAB函数exp()产生指数序列。例如,要生成序列x(n)=e(3+j5)n,0≤n≤20,可在MATLAB命令窗口输入脚本
(六)周期序列
满足等式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所示。
图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所示。
图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所示。
图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所示。
图2-12 信号尺度变换