哈尔滨工程大学实验报告实验名称:用matlab描述基本信号班级:电子信息工程4班学号:姓名:实验时间:2016年10月10日成绩:________________________________指导教师:栾晓明实验室名称:数字信号处理实验室哈尔滨工程大学实验室与资产管理处制实验一用matlab描述基本信号一、冲激信号1、原理:最简单的信号是(移位的)单位冲激信号:δ[n-n0]=0001nnnn()在MATLAB中产生冲激信号,必须先确定所关注信号部分的长度。如果准备用冲激信号δ[n]来激励因果LTI系统,可能需要观察从n=0到n=L-1总共L个点。若选择L=31,下面的MATLAB代码将产生一个“冲激信号”。1.L=31;2.nn=0:(L-1);3.imp=zeros(L,1);4.imp(1)=1;注意,根据MATLAB编址约定,n=0标号必须对应imp(1)。例:产生移位冲激信号程序(函数文件)function[x,n]=impseq(n0,n1,n2)%产生x(n)=delta(n-n0);n1=n0=n2%----------------------------------------------%[x,n]=impseq(n0,n1,n2)%if((n0n1)|(n0n2)|(n1n2))error('参数必须满足n1=n0=n2')endn=[n1:n2];%x=[zeros(1,(n0-n1)),1,zeros(1,(n2-n0))];x=[(n-n0)==0];以上函数文件可以产生指定区间内的冲激移位脉冲。例1—1:调用这个函数文件生成并绘制:x(n)=2δ[n+2]-δ[n-4]-5≤n≤5程序%x(n)=2*delta(n+2)-delta(n-4),-5=n=5n=[-5:5];x=2*impseq(-2,-5,5)-impseq(4,-5,5);stem(n,x);title('例的序列图')ylabel('x(n)');axis([-5,5,-2,3]);text,-2,'n')-5-4-3-2-1012345-2-1.5-1-0.500.511.522.53例1-1的序列图x(n)n2、实验内容(1)函数x1[n]=δ[n-5]n=[1:20];%区间1到20的点x=*impseq(5,1,20);%调用impseq函数stem(n,x);%绘图title('x1序列图')ylabel('x(n)')xlabel('n')(2)函数x2[n]=δ[n]0246810121416182000.10.20.30.40.50.60.70.80.9x1序列图x(n)n-15-10-505101500.10.20.30.40.50.60.70.8x2序列图x(n)nn=[-15:15];x=*impseq(0,-15,15);stem(n,x);title('x2序列图')ylabel('x(n)')xlabel('n')(3)函数x3[n]=δ[n-333]n=[330:350];x=*impseq(333,330,350);stem(n,x);title('x3序列图')ylabel('x(n)')33033233433633834034234434634835000.511.5x3序列图x(n)nxlabel('n')(4)函数x4[n]=δ[n+7]n=[-10:0];x=*impseq(-7,-10,0);stem(n,x);title('x4序列图')ylabel('x(n)')xlabel('n')3、结果及分析由实验代码及绘制出图形可以看出,产生移位冲激信号的函数功能正常,可以按要求产生移位冲激信号二、正弦信号-10-9-8-7-6-5-4-3-2-1000.511.522.533.544.5x4序列图x(n)n1、原理:另一个非常基本的信号是正弦信号。一般地,完备地描述实正弦信号需要三个参数:振幅A、频率ω0和相位φ。x[n]=Acos(ω0n+φ)产生并绘出下列每一个序列。使用MATLAB的向量功能求解此问题,将向量参数赋予余弦(或正弦)函数,再利用一个函数调用。在每种情形下,应只在指定的区间上展开并相应标注水平n轴。使用stem指令显示每个序列。2、实验内容(1)x1[n]=sin(πn/17)0≤n≤25L=26;%区间长度范围nn=0:25;0510152025-1-0.8-0.6-0.4-0.200.20.40.60.81%区间0到25x1=sin(pi*nn/17);%x1[n]与自变量关系xlabel('n');stem(nn,x1);(2)x2[n]=sin(πn/17)-15≤n≤25L=41;nn=-15:25;x2=sin(pi*nn/17);xlabel('n');stem(nn,x2);-15-10-50510152025-1-0.8-0.6-0.4-0.200.20.40.60.81nx205101520253035404550-1-0.8-0.6-0.4-0.200.20.40.60.81nx4(3)x3[n]=sin(3πn+π/2)-10≤n≤10L=21;nn=-10:10;x3=sin(3*pi*nn+pi/2);stem(nn,x3);xlabel('n');ylabe(‘x3’);(4)x4[n]=cos(23n)0≤n≤50-10-8-6-4-20246810-1-0.8-0.6-0.4-0.200.20.40.60.81nx3L=51;nn=0:50;x4=cos(pi*sqrt(23)*nn);stem(nn,x4);xlabel('n');ylabel('x4');4、结果及分析由代码及绘制出图形可知,离散正弦信号不一定是周期信号,例如x[4]就是非周期信号,离散正弦信号是周期的需满足w0/2pi为两个整数之比三、指数信号1、原理:(1)衰减的指数信号是数字信号处理中的基本信号。因为它是线性常系数差分方程的解。(2)在许多推导中,指数信号序列须在有限区间上求和。这个和以实验讲义33页式闭合式表示。(3)指数序列在信号处理中常常出现的一个原因是,时移并不改变其信号特征。(4)产生指数信号另外的方法是使用差分方程给出的递归表示式。当输入是一个冲激信号的时候,信号是实验讲义33页式差分方程的解。2、实验内容(1)研究下面的MATLAB函数,看它如何产生离散时间指数信号。然后使用函数在区间n=0,1,2,…,20上绘出指数信号x[n]=n。指数函数functiony=genexp(b,n0,L)%GENEXPgenerateanexponentialsignal:b^n%usage:Y=genexp(B,N0,L)%Binputscalargivingratiobetweenterms%N0startingindex(integer)%Llengthofgeneratedsignal%YoutputsignalY(1:L)if(L=0)error('GENEXP:lengthnotpositive')endnn=n0+[1:L]'-1;%---vectorofindicesy=b.^nn;%数组乘方end函数x[n]=nL=21;%区间长度nn=0:20;%区间起点与终点x1=genexp,0,21);%调用函数stem(nn,x1)xlabel('n')ylabel('x1')0246810121416182000.10.20.30.40.50.60.70.80.91nx1(2)在许多推导中,指数信号序列anu[n]须在有限区间上求和。这个和以下面闭合式表示:aaaLLnn1110,a≠1()使用(1)部分中的函数产生一个指数信号然后对其求和;将结果与式比较。a.用公式求和y1=(^21)/)%将a数值代入式,对指数信号序列求和y1=b.直接求和s=0;%直接对指数信号序列求和,验证式fori=0:20s=s+^i;endss=结果分析:由y1及s数值相等可以公式()对于序列求和计算的正确性(3)指数序列在信号处理中常常出现的一个原因是,时移并不改变其信号特征。证明一有限长指数信号满足移位关系:y[n]=ay[n-1],1≤n≤L-1比较向量y(2:L)和a*y(1:L-1)。在MATLAB中移位有限长度信号的时候,因为不能自动补零,所以必须留意信号终点。y(2:10)%在命令窗口直接显示指数信号序列y(1:L)ans=*y(1:9)%在命令窗口显示移位后乘以a的指数信号序列%证明有限长指数信号满足式的移位关系ans=结果分析:由两组序列值比较可知,时移并不改变信号特征(4)产生指数信号另外的方法是使用差分方程给出的递归表示式。当输入x[n]是一个冲激信号的时候,信号y[n]=anu[n]是下面差分方程的解:y[n]-ay[n-1]=x[n],初始条件y[-1]=0由于假定差分方程以因果方式递归(即n增大),n=-1的初始条件是必需的。用MATLAB的filter函数可实现差分方程。使用filter函数产生与(a)部分中信号相同的信号(即a=)。函数filter的用法如下所示yout=filter(b,a,xin)假设描述离散系统输入与输出关系的线性常系数差分方程为00()()NMkkkkaynkbxnk那么01[,,,]Mbbbb和01[,,,]Naaaa是差分方程中的系数组成的向量,xin是输入信号向量(filter()函数只向y返回与x中样本个数一样多的样本)。a=[1,];%a代表左侧y式的系数对应的向量b=[1];0246810121416182000.10.20.30.40.50.60.70.80.91%b代表x的系数nn=0:20;xin=zeros(21,1);xin(1)=1;%xin为一冲击信号,yout=filter(b,a,xin);stem(nn,yout);%利用filter函数生成指数%信号序列,并且显示出来3、结果分析:由这些实验验证了指数序列在有限区间求和的公式,指数序列信号时移特性,以及利用差分方程给出的递归表达式来产生指数信号的方法四、复值信号1、原理:产生和处理实值信号并将其转化成复值信号非常有用,MATLAB中real函数和imag函数分别代表实部和虚部要想同时绘出实部和虚部,在stem指令之前的subplot(211)和subplot(212)指令会把两个绘图放置在同一屏幕上,位置为上下关系。2、实验内容:nn=0:25;xx=exp(1i*nn/3);%复指数subplot(211)stem(nn,real(xx))title('实部')xlabel('INDEX(n)')subplot(212)stem(nn,imag(xx))0510152025-1-0.500.51实部INDEX(n)0510152025-1-0.500.51虚部INDEX(n)title('虚部')xlabel('INDEX(n)')3、结果分析:该实验内容熟悉了复数用matlab分解为实部以及虚部分别绘制图形的方法五、复指数信号1、原理:实指数信号表示式可以扩展成包含正弦信号和余弦信号的复指数信号形式。这些信号构成了傅里叶变换的基础。2、实验内容(1)在MATLAB中,复信号是实指数信号的自然扩展。这样参数a可以用来作为一个复数产生这些信号。再用Euler公式表示复指数信号(以单一形式给出信号):x[n]=(z0)n=nzjze)(ln00=rnejθn=rn(cosθn+jsinθn)此处z0=rejθ=r∠θ。使用这一关系式产生z0=∠45°时的复指数信号。绘出区间0≤n≤20上的x[n]的实部和虚部。注意z0的幅角控制正弦信号的频率。nn=0:20;%自变量区间xx=.^(nn).*(cos((pi./4).*nn)+1i.*sin((pi./4).*nn));%有自变量产生xx函数值subplot(211)stem(nn,real(