区间的6(n)。然而,更高明的方法是利用逻辑关系式n==0米实现6(n)。例如,要实现 [1,n=no 8(n-na)= l0,n≠no 在n1≤no≤n2区间内的值,我们可州如下的MATLAR听数: function x,n]impseg(no,nl,n2) %Generates x(n)=della(n-no);nl n <n2 %·— Ix,nl impseg(n0,nl n2) % n=nl:n2l;x=[(n-n0)==0]; 2.单位阶跃序列 m-628-{00} 在MATLAB中函数ones(1,N)产生由N个1组成的列向量。它可州来产生有限区间上 的u(n)。另一个高明的方法是使用逻辑关系式n>=0。在n1≤no≤n2区间内实现。 [1,n≥no u(n-no)= 1O,n<no 可以用如下的MATLAB函数。 function [x,n stepseg(no,nl,n2) Generates x(n)=u(n-n0);n1 n<n2 %[x,nl stepseg(no,nl,n2) % n=[nl:n2]x=1(n-n0)>=0]; 3.实数指数序列: x(n)=a”,Vn;a∈ 在:4:”:,屮,要用数组运算符“.”来实现一个实指数序列。例如要实现序列x()= 6
(0.9)n,0≤n≤10。应该用下列MATLAB程序: >>n=[0:10];x=(0.9).n; 4.复数指数序列: x(n)=elativon,yn 其中o称为阻尼系数而w0是以弧度为单位的角频率。MATI.AB函数exp可用来产生指 数序列。例如要产生x(n)=exp[(2+3)n],0≤n≤10,可以用下列MATLAB程序: >>n={0:10]:x=exp(2+3j)*n): 5.正余弦序列: x(n)=cos(won +0),n 其中B为以弧度为单位的相角。MATLAB函数cs(或sin)可用米产生正余弦序列。例 如,要产生x(n)=3cos(0.1πn+π/3)+2sin(0.5πn),0≤n≤10,应该用下列MATI,AB程 序。 >>n=[0:10];×=3*cos(0.】*pi*n+pi/3)+2米8in(0.5¥pi*n): 6.随机序列:许多实际的序列是不能像上面那样用数学式来描述的。这些序列称为随机 或S1 achastic序列并用相应的概率密度函数或统计矩来表征。在MATLAB中,有两种(伪)随 机序列可用。rand(1,N)产生其元茶在[0,1]之间均匀分布而长度为N的随机序列。randn (1,N)则产生均值为0,方差为1,长度为N的高斯随机序列。其他的随机序列都可用这两种 函数的变换得到。 7.周期序列:如果序列x(n)=x(n+W),Vn则x(n)称为周期的。满足上述关系的最 小数N称为基本周期。我们用元(n)来表示周期序列。要从-个周期1x(n),0≤n≤N-1} 产生有P个周期的序列x(n),可以把它复制P次: >xtilde =[x,x,....x]; 何是高明的方法是利用MATLAB的强有力的下标能力。先产生一个包含P行x()值 的矩阵,然后用结构(:)来把它的P行串接起来战为一个长行,不过这种结构只能用于列向。 所以我们往往还要用矩阵转置来把它扩展到行向。 >>xtilde=x'*ones(1,P);%P列x;x是一个行向量 7
>xtilde xtilde(:) %长的列向量 >xtilde=xtilde'; %长的行向量 注意后两行可合成一条命令以缩短代码,这可从例2.1中看到。 对序列的运算 这里将简要地介绍序列的基本运算和它们的MATLAB等效程序。 1.信号相加:这是一种对应的样本与样本之间的相加。表为: 1x1(n)}+{x2(n)f=1x1(n)+x2(n)1 在MATI,AB中它可用算术运算符“+”实现。然而x1(n》和x2(n)的长度必须相等。如 果序列长度不等,或者长度虽然相等但采样的位置不同,就不能用运算符“+”了。我们必须首 先给x1、n》和x2(n)以适当的参数使它们有同样的位置向量n(因而也有同样的长度)。这 需要非常注意MATLAB的下标运算。特别是逻辑与运算“&”,关系运算如“<=”和“=”,以 及要用ind函数来使xl(n)和x2(n)具有相同的长度。下面称为sigadd的函数演示了这些 运算。 function [y,n]sigadd(x1,nl,x2,n2) %实现y(n)=x1(n)+x2(n) % [y,n]sigadd(xl,nl,x2,n2) %y=在包括nl和n2的n上求和序列 %x1=长为nl的第一个序列 %x2=长为n2的第i个序列(n2可与nl不等) % n=min(min(nl),min(n2)):max(max(n1),max(n2)); %y(n)的长度 yl=zeros(1,length(n));y2=yl %初始化 yl(find((n>=min(nl))&(n<=max(n1))==1))=x1; %具有y(n)的长度的x1 y2(find((n>min(n2))(n<max(n2))==1))=x2; %具有y(n)的长度的x2 y=y1+y2; %序列相加 它的应用在例2.2中叙述。 2.信号相乘:这是对应采样值之间的相乘(即“点”乘),表为: Ix(n).x2(n)=1x1(n)x2(n) 在MAT1AB中,它由数组运算符“.*”实现。但它受到“+”运算符同样的限制。因此必 8
须建立一个新的与sigadd相仿的sigmult函数: function [y,n]=sigmult(x1,nl,x2,n2) %实现y(n)=x1(n)*x2(n) % %[y,n]sigmult(x1,n1,x2,n2) %y=在包括nl和n2的n上求和序列 %x1=长为nl的第一个序列 %x2=长为n2的第二个序列(n2可与n1不等) % n=min(min(nl),min(n2):max(max(nl),max(n2));%y(n)的长度 yl=zeros(1,length(n));y2=yI; %初始化 yl(find((n>=min(nl))&(n<=max(nl)==l)=xl;%具有y(n)的长度的xl y2(fird((n>=min(n2))&(n<=max(n2)==1)=x2;%其有y(n)的长度的x2 y=yl.y2; %序列相乘 其他判法也在例2.2中给出。 3.倍率:在此运算中,每个采样值乘以一个常数a alx(n)=ax(n) 在MATLAB中可用算术运算符“”来实现倍率运算。 4.移位:在这个运算中,x(n)的每一个样本都移动k个周期,移位后的序列y(n)。 y(n)=1x(n-k) 若令m=n-k,因而n=m+k,上述运算化成: y(m+k)=x(m) 州为这-一运算并不影响向量x,但是向量却因为每个元素都加了个k而变化了。这 些可在sigshift函数中看到: function [y,n]=sigshift(x,m,n0) %实现y(n)=x(n-n0) % [y.n]=sigshift(x,m,no) % n=m n0;y=x; 9
它的用法在例2.2中给出。 5.折叠:在这个运算中,x(n)的每个样本都对t=0翻转,得到一个折叠后的序列y(n)。 y(n)=ix(-n) 在MATLAB中,这-运算对采样值出iplr(x)函数实现,而i对采样位置则出-fliplr(n) 得到,这可从函数sigfold中看到。 function [y,n]=sigfold(x,n) %实现y(n)=x(-n) %·一 %[y,n」=sigfold(x,n) o y=fliplr(x);n=-fliplr(n); 6.样本和:本运算和信号相加运算不同,它把n1和n2之间所有的样本x(n)加起来: x(n)=x(n)+·+x(n2) 它由surm(x(n1:n2)函数实现。 7.样本积:本运算和信号柑乘运算不同,它把n1和2之间所有的样本x(n)乘起来: iix(a)=x(nm)x…×x(m) 它动prod(x(n1:n2)函数实现。 8.信号能量:序列x(n)的能量由下式给出: Ex= ∑x(n)x(n)=∑1x(n)2 其中上标表示共轭转置运算。有限长度序列的能量可用以下的MATLAB命令求得: >>Kx=sum(x·共conj(x);%一种方法 >>Ex=sum(abs(x).~2);%另一种方法 9,信号功率:基本周期为N的周期序列的平均功率由下式求得: 10