实验一、MATLAB 编程基础及典型实例一、实验目的(1)熟悉MATLAB 软件平台的使用;(2)熟悉MATLAB 编程方法及常用语句;(3)掌握MATLAB 的可视化绘图技术;(4)结合《信号与系统》的特点,编程实现常用信号及其运算。
示例一:在两个信号进行加、减、相乘运算时,参于运算的两个向量要有相同的维数,并且它们的时间变量范围要相同,即要对齐。
编制一个函数型m 文件,实现这个功能。
function [f1_new,f2_new,n]=duiqi(f1,n1,f2,n2)a=min(min(n1),min(n2));b=max(max(n1),max(n2));n=a:b;f1_new=zeros(1,length(n));f2_new=zeros(1,length(n));tem1=find((n>=min(n1))&(n<=max(n1))==1);f1_new(tem1)=f1;tem2=find((n>=min(n2))&(n<=max(n2))==1);f2_new(tem2)=f2;四、实验内容与步骤(2)绘制信号x(t)=)32sin(2t e t −的曲线,t 的范围在0~30s ,取样时间间隔为0.1s 。
t=0:0.1:30;y=exp(-sqrt(2)*t).*sin(2*t/3);plot(t,y);(3)在n=[-10:10]范围产生离散序列:⎩⎨⎧≤≤−=Othern n n x ,033,2)(,并绘图。
n=-10:1:10;z1=((n+3)>=0);z2=((n-3)>=0);x=2*n.*(z1-z2);stem(n,x);(4)编程实现如下图所示的波形。
t=-2:0.001:3;f1=((t>=-1)&(t<=1));f2=((t>=-1)&(t<=2));f=f1+f2;plot(t,f);axis([-2,3,0,3]);(5)设序列f1(k)={0,1,2,3,4,5},f2(k)={6,5,4,3,2,1,0}。
↓↓k=0k=0利用duiqi.m函数,求add_f(k)=f1(k)-f2(k),pro_f(k)=f1(k)×f2(k),并以子图形式画出f1(k)、f2(k)、add_f(k)、pro_f(k)。
f1=0:5;f2=6:-1:0;n1=-1:4;n2=-5:1;[f1_new,f2_new,n]=duiqi (f1,n1,f2,n2);add_f=f1_new+f2_new; pro_f=f1_new.*f2_new; subplot(2,2,1)stem(n1,f1);xlabel('n1');ylabel('f1');grid on;subplot(2,2,2)stem(n2,f2);xlabel('n2');ylabel('f2');grid on;subplot(2,2,3)stem(n,add_f);xlabel('n');ylabel('add-f(k)');grid on;subplot(2,2,4)stem(n,pro_f);xlabel('n');ylabel('pro-f(k)');grid on;五、实验报告要求(1)再调用某一函数文件时,该文件中除了输入、输出变量外的其它变量在调用函数结束后是否还存在?这些变量是全局还是局部变量?答:不存在,是局部变量。
(2)设n=-10:0.2:20,你可以通过那些方法查看向量n 的维数?经过关系运算y=(n>=3)以后,y 的维数是多少?y 又等于什么?答:Length ()函数或Workspace 中的变量类型。
维度不变,(3)通过MATLAB 的帮助系统,学习fliplr 函数的功能和使用方法。
在此基础上,写出能够产生如下图形的程序,其中x(n)=44,2≤≤−n n。
n=-4:4;x1=2.^n;figure(1);stem(n,x1);x2=fliplr(x1);figure(2);stem(n,x2);实验二、连续时间系统的时域分析一、实验目的(1)深刻理解卷积运算,掌握离散线性卷积、连续线性卷积的计算方法;(2)加深对线性时不变系统中零状态响应概念的理解,掌握其求解方法;(3)掌握给定连续系统的冲击响应和阶跃响应。
实例2:利用conv 函数,编制一个函数文件dconv ,其输出为两个序列卷积后的新序列以及与新序列对应的时间变量function[f,k]=dconv(f1,f2,k1,k2)f=conv(f1,f2);k_start=k1(1)+k2(1);k_end=length(f1)+length(f2)-2;k=k_start:(k_start+k_end);实例2:在dconv 函数和(*)的基础上,编制一个函数文件cconv ,利用离散卷积和来近似计算连续卷积积分。
function[f,k]=cconv(f1,f2,k1,k2,td)f=td*conv(f1,f2);k_start=k1(1)+k2(1);k_end=length(f1)+length(f2)-2;k=k_start:td:(k_start+k_end*td);四、实验内容与步骤(1)已知系统微分方程为)()(),()(2)(2)()1()1()2(t t f t f t y t y t y ε==++。
计算系统的零状态响应y (t )、冲击响应)(t δ和阶跃响应g (t ),并画出相应的图形。
t=0:0.01:10;f=ones(1001,1);a=[1,2,2];b=[1,0];sys=tf(b,a);y1=lsim(sys,f,t);y2=impulse(sys,t);y3=step(sys,t);subplot(1,3,1)plot(t,y1);subplot(1,3,2)plot(t,y2);subplot(1,3,3)plot(t,y3);(2)用MATLAB 计算如下连续列的卷积和,绘出它们的时域波形。
⎪⎪⎩⎪⎪⎨⎧====其它,01,10,21,1)(1k k k k f ⎩⎨⎧≤≤−=其它,022,1)(2k k f t=-6:6;z1=stepseq(-6,6,-1);z2=stepseq(-6,6,2);z3=delta(-6,6,0);f1=z1-z2+z3;z4=stepseq(-6,6,-2);z5=stepseq(-6,6,3);f2=z4-z5;[y,k]=dconv(f1,f2,t,t);stem(k,y);axis([-6,6,0,5])(3)编程实现如下所示的两个波形;并利用cconv函数计算这两个信号的卷积、画出卷积后的波形。
td=0.01;t=-5:td:5;z1=((t+1)>=0);z2=((t-1)>=0);y1=2*(z1-z2);z3=((t+2)>=0);z4=((t-2)>=0);y2=z3-z4;[y,k]=cconv(y1,y2,t,t,td);plot(k,y)axis([-10,10,0,5]);五、实验报告要求(1)在“实验内容与步骤”(1),零状态响应和阶跃响应是否相同?为什么?答:相同,因为零状态响应和阶跃响应在t<0时都没有输入。
(2)两序列进行卷积后得到的新序列,说明新序列在时域长度、时域区间上与与原来两序列的关系。
答:新序列的长度为原两个序列长度之和。
区间为原两个序列的区间首尾相加。
实验三、连续时间系统的频域分析一、实验目的(1)理解周期信号的傅里叶分解,掌握傅里叶系数的计算方法;(2)深刻理解和掌握非周期信号的傅里叶变换及其计算方法;(3)熟悉傅里叶变换的性质,并能应用其性质实现信号的幅度调制;(4)理解连续时间系统的频域分析原理和方法,掌握连续系统的频率响应求解方法,并画出相应的幅频、相频响应曲线。
四、实验内容及步骤(1)周期性三角波如下图所示,计算其傅里叶级数系数,演示其有限项级数逼近并绘图。
T=2;w=2*pi/T;a0=quadl(@singftr,-1,1)*2/T;N=10;an=zeros(1,N);bn=zeros(1,N);for k=1:Nan(k)=quadl(@ftrcos,-1,1,[],[],k,w)*2/T;bn(k)=quadl(@ftrsin,-1,1,[],[],k,w)*2/T;end;n=1:1:N;figure(1);subplot(1,2,1);stem(n,an,'-o');grid on;subplot(1,2,2);stem(n,bn,'-o');grid on;t=-3:0.01:3;x=pulstran(t+0.5,-3:2:3,'tripuls',1,1);figure(2);subplot(6,2,1);plot(t,x);axis([-3,3,-1,2]);grid on;subplot(6,2,2);plot(t,a0/2);grid on;wave=a0/2;for k=1:10wave=wave+an(k)*cos(k*w*t)+bn(k)*sin(k*w*t);subplot(6,2,k+2);plot(t,wave);grid on;end(2)计算如下所示的信号(cos(t π2))的傅里叶变换,并验证尺度变换和时移变换性质。
R=0.005;t=-2:R:2;f=cos(pi*t/2);%f=(abs(t)<=1);w1=40;N=1000;k=-N:N;w=k*w1/N;F=f*exp(-j*t'*w)*R;Fudu=real(F);figure(1);subplot(2,1,1);plot(t,f);xlabel('t');ylabel('f(t)');grid on;subplot(2,1,2);plot(w,Fudu);xlabel('w');ylabel('F(jw)');grid on;sf=cos(pi*t/4);w1=40;N=1000;k=-N:N;w=k*w1/N;SF=sf*exp(-j*t'*w)*R;SFudu=real(SF);figure(2);subplot(2,1,1);plot(t,sf);xlabel('t');ylabel('sf(t)');grid on;subplot(2,1,2);plot(w,SFudu);xlabel('w');ylabel('SF9jw)');grid on;mf=f.*cos(10*pi*t);figure(3);subplot(3,1,1);plot(t,cos(10*pi*t));ylabel('y(t)=cos(10*pi*t)');grid on;subplot(3,1,2);plot(t,mf);ylabel('f1(t)=f(t)*cos(10*pi*t)');gridon;MF=mf*exp(-j*t'*w)*R;MFudu=real(MF);subplot(3,1,3);plot(w,MFudu);xlabel('w');ylabel('MF(jw)');grid on;(3)设信号f(t)为中心为0,范围从-1到1,最大幅值为1的三角波,载波是频率为10Hz 的余弦信号cos(20πt),用MATLAB实现调幅信号,并观察信号和调幅信号频谱。