数字信号处理及MATLAB实现
上QQ阅读APP看书,第一时间看更新

第一节 时域离散信号

信号是一个值会随时间和空间变化的物理量。如果信号的值随连续的时间而变化,则称为连续时间信号或者模拟信号,用xat)表示,变量t代表时间,一般以秒(s)计。日常生活中连续信号的例子有温度、压力、水位、化学浓度、电压与电流、位置、速度、加速度、力与扭矩等。如果信号仅在离散时间点上取值有效,这样的信号被称为时域离散信号,也称离散时间信号,用xn)表示,其中变量n是整数值并在时间上代表一些离散时刻。因此,xn)是一个数值的序列

此处向上的箭头↑指出n=0时的样本。

在MATLAB中可用行向量来表示一个有限长序列。其样本的位置信息可用另一个行向量表示。例如,序列xn)={xn)}={-1,2,-2,1↑,2,4,3,5}在MATLAB中表示为

产生离散时间信号的常用方法是对模拟信号进行采样。例如xa=sin(t)表示一个正弦信号,它也是一个连续时间信号。如果对这个信号每隔T时间间隔取一个样点,可表示成

xn)=xat)|t=nT=sin(nT)={0,0.1987,0.3894,0.5646,0.7174,0.8415,…}(T=0.2s)

如果xn)的幅度取值用有限精度的数来表述,则这种幅度有限精度量化取值的序列称为数字信号。例如将xanT)|T=0.2的值用四位二进制数表示,便得到相应的数字信号,即

xn)=xanT)|T=0.2={0.0000,0.0100,0.0110,0.0111,0.1000,…}

当一个系统或算法的输入是一个数字信号xn),它的输出是另一个数字信号yn)时,它被称为数字信号处理器。数字信号处理技术有着广泛的应用,并且在现代社会中起到了越来越重要的作用。

本章首先介绍数字信号和数字系统的表征和分类,然后阐述一个连续时间信号如何产生一个等效的离散时间信号,这个过程定义为采样。与采样处理密切相关的问题是:满足什么条件的采样样本xn)才能包含恢复重建信号xat)所需的全部信息?这个问题读者可通过阅读下文得到答案。

一、基本序列

(一)单位取样序列δ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)

(二)单位阶跃序列un

单位阶跃序列如图2-3所示。

图2-3 单位阶跃序列

在MATLAB中,函数ones(1,N)产生一个N个1的行向量,利用它可以实现在一个有限区间上的un)。编写函数stepseq(n0,n1,n2)来实现un-n0),其中n1和n2表示序列un-n0)起点和终点的位置。函数stepseq(n0,n1,n2)的参考程序如下:

在命令窗口输入MATLAB脚本

输出图形如图2-4所示。

图2-4 MATLAB中生成的单位阶跃序列un

单位阶跃序列与单位取样序列之间具有下列关系:

式(2-3)的含义如图2-5所示,式(2-4)表示un)可由δn)向右移动1位、2位……之和表示。

(三)矩形序列RNn

式中,N为矩形序列的长度。

图2-5 δn)=un)-un-1)

N=3时,RNn)的波形如图2-6所示。矩形序列也可用单位取样序列或单位阶跃序列表示。

图2-6 矩形序列R3n

(四)正弦序列

常见到形如

的正弦序列,其中Aω0φ都是实数,分别为xn)的振幅、频率和相位(弧度rad)。可用MATLAB函数cos( )或sin( )产生余弦序列或正弦序列。例如,要生成序列xn)=3sin(0.2πn+π/3)+2cos(0.3πn),0≤n≤10,可在MATLAB软件的命令窗口输入脚本

图2-7表示余弦序列xn)=1.5cos(ω0n)在ω0取不同值时的波形图。ω0从0逐渐增大到π的过程中,xn)的波形振动越来越快,在ω0=π附近,振动最快;然后ω0从π增加到2π,波形振动越来越慢,在ω0=2π处,波形与ω0=0处一样。因此,在一个周期[0,2π)内,通常称ω0=0附近为低频,ω0=π附近为高频。

(五)指数序列和复指数序列

形如

的序列称为指数序列。其中,Aa可为实数或复数,若为实数,则为实指数序列。在MAT-LAB中,使用算符“.^”实现一实指数序列。例如,要生成序列xn)=0.9n,0≤n≤20,可在MATLAB软件的命令窗口输入脚本

继续输入脚本

图2-7 余弦序列xn)=1.5cos(ω0n)在ω0取不同值时的波形

生成的图形如图2-8所示。

图2-8 xn)=0.9n

a为复数时,可表示成,系数A也可表示成A=|A|ejφ,则

式中,是复指数序列xn)的振幅。

其实部和虚部分别为

可用MATLAB函数exp()产生指数序列。例如,要生成序列xn)=e(3+j5)n,0≤n≤20,可在MATLAB命令窗口输入脚本

(六)周期序列

满足等式xn)=xn+N)(N为正整数)的序列称为周期序列。用这个条件来检验离散时间余弦(或正弦)序列的周期性,即Acos(ω0n+φ)=Acos[ω0n+N)+φ],不难求出ω0N=2πk,式中k为整数,也可写成,下面讨论N的几种可能情况:

1)当为整数时,k=1,则即为正弦序列的周期。

2)当为非整数,但它是一个有理数时,设,其中PQ是互为素数的整数,这时,取k=Q,则N=P为正弦序列的周期。

3)当为无理数时,此正弦序列为非周期序列。

由于复指数序列可表示成余弦(或正弦)序列的形式,因此,其周期性的讨论与上述完全相同。下面举例分析几个序列的周期性。

例2-1 计算以下序列的周期:

(1)

(2)

(3)

:(1),该序列为周期序列,且周期为3。

(2)序列的周期为4,序列cos(πn)的周期为2,均为整数,因此该序列一定为周期序列,且两个周期的最小公倍数4即为该序列的周期。

(3),是无理数,因此,该指数序列是非周期序列。

二、序列的运算

(一)信号相加

两个信号相加要求长度必须相同。如果两个序列长度不同或者长度相同,但是样本位置不同,也不能相加。可将序列增加若干零值延长,使得序列长度相等且样本位置一致。

例如:有这样两个序列x1n)={1,2,3,4n=0,1,2,3}和x2n)={1,2,3,4|n=-1,0,1,2},它们长度相等,但是位置不一致(即n的取值不一致)。若要将两个序列相加,必须对它们进行延长,将两个序列n的取值范围都扩展成-1≤n≤3,扩展位置的序列值取零,此时,这两个序列分别为x1n)={0,1,2,3,4|n=-1,0,1,2,3}和x2n)={1,2,3,4,0|n=-1,0,1,2,3},如图2-9所示。

图2-9 信号的相加

(二)信号相乘

信号相乘即两个信号位置相同处的数值相乘,原理与信号相加类似,这里不再举例说明。

(三)信号移位

序列yn)与xn)的关系表示为yn)=xn-k),其中k为整数。当k>0时,表示序列yn)是将xn)向右平移k个单位的结果;当k<0时,表示序列yn)是将xn)向左平移k个单位的结果。例如:xn)={1,2,3,4|n=0,1,2,3},当yn)=xn+2)时,yn)={1,2,3,4|n=-2,-1,0,1},如图2-10所示。

图2-10 信号的移位

(四)信号反转

序列yn)与xn)的关系表示为yn)=x(-n),称yn)是xn)的信号反转,即yn)是将原信号xn)以y轴为对称轴镜像得到的。例如,序列xn)={1,2,3,4|n=0,1,2,3}的反转,如图2-11所示。

图2-11 信号的反转

信号尺度变换

信号yn)与xn)的关系用公式yn)=xmn)表示,其中m取整数,表示每隔m单位取一个样本。例如,已知xn)={1,2,3,4|n=0,1,2,3},yn)=x(2n)表示将原序列每隔2个单位取一个点,如图2-12所示。

图2-12 信号尺度变换