教学课件-信号与系统实验(MATLAB版)(党宏社)_第1页
教学课件-信号与系统实验(MATLAB版)(党宏社)_第2页
教学课件-信号与系统实验(MATLAB版)(党宏社)_第3页
教学课件-信号与系统实验(MATLAB版)(党宏社)_第4页
教学课件-信号与系统实验(MATLAB版)(党宏社)_第5页
已阅读5页,还剩609页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、实验目的二、实验原理三、涉及的MATLAB函数四、实验内容与方法五、实验要求

六、思考题一、实验目的

(1)了解连续时间信号的特点;

(2)掌握连续时间信号表示的向量法和符号法;

(3)熟悉MATLABPlot函数等的应用。

二、实验原理

1.信号的定义

信号是随时间变化的物理量。信号的本质是时间的函数。

2.信号的描述

1)时域法

时域法是将信号表示成时间的函数f(t)来对信号进行描述的方法。信号的时间特性指的是信号的波形出现时间的先后,持续时间的长短,随时间变化的快慢和大小,周期的长短等。

2)频域(变换域)法

频域法是通过正交变换,将信号表示成其它变量的函数来对信号进行描述的方法。一般常用的是傅里叶变换。信号的频域特性包括频带的宽窄、频谱的分布等。

信号的频域特性与时域特性之间有着密切的关系。

3.信号的分类

按照特性的不同,信号有不同的分类方法。

(1)确定性信号:可以用一个确定的时间函数来表示的信号。

随机信号:不可以用一个确定的时间函数来表示,只能用统计特性加以描述的信号。

(2)连续信号:除若干不连续的时间点外,每个时间点t上都有对应的数值的信号。

离散信号:只在某些不连续的时间点上有数值,其它时间点上信号没有定义的信号。

(3)周期信号:存在T,使得等式f(t+T)=f(t)对于任意时间t

都成立的信号。

非周期信号:不存在使得等式f(t+T)=f(t)对于任意时间t都成立的信号。

绝对的周期信号是不存在的,一般只要在很长的时间内信号满足周期性就可以了。

(4)能量信号:总能量有限的信号。

功率信号:平均功率有限且非零的信号。信号的总能量计算公式为

信号的平均功率计算公式为

(5)奇信号:满足等式f(t)=-f(-t)的信号。

偶信号:满足等式f(t)=f(-t)的信号。三、涉及的MATLAB函数

1.plot函数

功能:在X轴和Y轴方向都按线性比例绘制二维图形。

调用格式:

plot(x,y):绘出x对y的函数的线性图。

plot(x1,y1,x2,y2,...):绘出多组x对y的线性曲线图。

2.ezplot函数

功能:绘制符号函数在一定范围内的二维图形。简易绘制函数曲线。调用格式:

ezplot(fun):在[-2π,2π]区间内绘制函数。

ezplot(fun,[min,max]):在[min,max]区间内绘制函数。

ezplot(funx,funy):定义为同一曲面的函数,默认的区间是[0,2π]。

3.sym函数

功能:定义信号为符号变量。

调用格式:

sym(fun):fun为所要定义的表达式。

4.subplot函数

功能:产生多个绘图区间。

调用格式:

subplot(m,n,p):产生m行n列的绘图区间的第p个绘图区间。四、实验内容与方法

1.验证性实验

连续信号的表示方法有两种:符号推理法与数值法。即连续信号的表示既可以用MATLAB提供的用于符号推理的符号数学工具箱(SymbolicMath)表示,也可将连续信号离散化后加以表示,下面就分别用这两种方法表示基本连续信号。常用的连续信号有直流信号、正弦信号、单位阶跃信号、单位门信号、单位冲激信号、符号函数、单位斜坡函数、单边衰减指数信号、抽样信号、随机信号等。参考给出的程序并观察产生信号的波形,还可以通过改变相关参数(例如频率、周期、幅值、相位、显示时间段、步长、加噪等),进一步熟悉这些在工程实际与理论研究中常用信号的特征。

1)直流信号f(t)=A

(1)符号推理法生成直流信号。

MATLAB程序:

t=-10:0.01:10;

f=sym(′4′);

%将信号的大小定义为符号变量

ezplot(f,[-16,16]);

%绘制范围在[-16,16]上f的图形

title(′直流信号′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

用符号法生成的直流信号如图1.1所示。图1.1符号法生成的直流信号

(2)数值法生成直流信号。

MATLAB程序:

t=-10:0.01:10;

a1=6;[DW]%信号的大小

plot(t,a1,′b′);title(′直流信号′);

xlabel(′时间(t)′);ylabel(′幅值(f)′);

用数值法生成的直流信号如图1.2所示。图1.2数值法生成的直流信号

2)正弦交流信号f(t)=sin(ωt+)

(1)符号推理法生成正弦交流信号。

MATLAB程序:

t=-0:0.001:1;

f=sym(′sin(2*pi*t)′);

ezplot(f,[0,1],′k′);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′正弦交流信号′);

用符号法生成的正弦交流信号如图1.3所示。图1.3符号法生成的正弦交流信号(2)数值法生成正弦交流信号。

MATLAB程序:

t=-0:0.001:1;

y=sin(2*pi*t);

plot(t,y,′k′);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′正弦交流信号′);

用数值法生成的正弦交流信号如图1.4所示。图1.4数值法生成的正弦交流信号3)单位阶跃信号f(t)=ε(t)

MATLAB程序:

t0=0;t1=-1;t2=3;

dt=0.01;

t=t1:dt:-t0;

n=length(t);

t3=-t0:dt:t2;

n3=length(t3);

u=zeros(1,n);

u3=ones(1,n3);

plot(t,u);

holdon;

plot(t3,u3);

plot([-t0,-t0],[0,1]);

holdoff;

axis([t1,t2,-0.2,1.5]);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′单位阶跃信号′);

用数值法生成的单位阶跃信号如图1.5所示。图1.5数值法生成的单位阶跃信号4)单位冲激信号f(t)=δ(t)

(1)方法1。

MATLAB程序:

clear;

t0=0;t1=-1;t2=5;dt=0.1;

t=t1:dt:t2;

n=length(t);

x=zeros(1,n);

x(1,(t0-t1)/dt+1)=1/dt;

stairs(t,x);

axis([t1,t2,0,1/dt]);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′单位冲激信号′);

用方法1生成的单位冲激信号如图1.6所示。图1.6方法1生成的单位冲激信号(2)方法2。

MATLAB程序:

t0=0;t1=-1;t2=3;dt=0.001;

t=t1:dt:t2;

n=length(t);

k1=floor((t0-t1)/dt);

x=zeros(1,n);

x(k1)=1/dt;

stairs(t,x);

axis([-1,3,0,22]);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′单位冲激信号′);

用方法2生成的单位冲激信号如图1.7所示。图1.7方法2生成的单位冲激信号5)符号信号f(t)=sgn(t)

MATLAB程序:

clear

t1=-1;t2=5;dt=0.1;%可将精度调高,即d=0.01或0.001

t=t1:dt:t2;

n=sign(t);

plot(t,n);

axis([t1,t2,-1.5,1.5]);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′符号信号′);

用数值法生成的符号函数信号如图1.8所示。图1.8数值法生成的符号函数信号6)斜坡信号f(t)=tε(t)

MATLAB程序:

clear

t1=-1;t2=5;dt=0.01;

t=t1:dt:t2;

a1=5;%斜率

n=a1*t;plot(t,n);

axis([t1,t2,-1.5,20]);%横坐标及纵坐标的范围

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′斜坡信号′);

用数值法生成的斜坡信号如图1.9所示。图1.9数值法生成的斜坡信号7)单边衰减指数信号f(t)=e-αtε(t)

MATLAB程序:

clear

t1=-1;t2=10;dt=0.1;

t=t1:dt:t2;

A1=1;

%斜率

a1=0.5;

%斜率

n=A1*exp(-a1*t);

plot(t,n);

axis([t1,t2,0,1]);

xlabel(′时间(t)′);ylabel(′幅值(f)′);title(′单边衰减指数信号′);用数值法生成的单边衰减指数信号如图1.10所示。图1.10数值法生成的单边衰减指数信号8)复指数信号f(t)=e-(α+jβ)t

MATLAB程序:

%实现f(t)=e-3t+4jt

t=0:0.01:3;

a=-3;b=4;

z=exp((a+i*b)*t);

subplot(2,2,1)

plot(t,real(z)),title(′实部′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

subplot(2,2,2)

plot(t,imag(z)),title(′虚部′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

subplot(2,2,3)

plot(t,abs(z)),title(′模′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

subplot(2,2,4)

plot(t,angle(z)),title(′相角′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

用数值法生成的复指数信号如图1.11所示。图1.11数值法生成的复指数信号9)连续时间虚指数信号f(t)=1

MATLAB程序:

%连续时间虚指数信号f(t)=a*exp(w*i*t)

%t1:绘制波形的起始时间

%t2:绘制波形的终止时间

%w:虚指数信号角频率

%a:虚指数信号的幅度

a=1;

w=pi/2;%函数参数

t=t1:0.01:t2;

X=a*exp(i*w*t);

Xr=real(X);

Xi=imag(X);

Xa=abs(X);

Xn=angle(X);

subplot(2,2,1)

plot(t,Xr)axis([t1,t2,-(max(Xa)+0.5),max(Xa)+0.5])

title(′实部′);

xlabel(′时间(t)′);

ylabel(′幅值(f)′);

subplot(2,2,2)

plot(t,Xi)

axis([t1,t2,-(max(Xa)+0.5),max(Xa)+0.5])

title(′虚部′);

xlabel(′时间(t)′);

ylabel(′幅值(f)′);

subplot(2,2,3)

plot(t,Xa)

axis([t1,t2,0,max(Xa)+1])

title(′模′);

xlabel(′时间(t)′);

ylabel(′幅值(f)′);

subplot(2,2,4)

plot(t,Xn)

axis([t1,t2,-(max(Xa)+1),max(Xa)+1])

title(′相角′);

xlabel(′时间(t)′);

ylabel(′幅值(f)′);

用数值法生成的连续时间虚指数信号如图1.12所示。图1.12数值法生成的连续时间虚指数信号10)Dirichlet函数

MATLAB程序:

x=linspace(0,4*pi,300);

y1=diric(x,7);

y2=diric(x,8);

subplot(121),plot(x,y1);

title(′Dirichlet函数′);xlabel(′时间(t)′);ylabel(′幅值(f)′);subplot(122),plot(x,y2);

title(′Dirichlet函数′);xlabel(′时间(t)′);ylabel(′幅值(f)′);用数值法生成的Dirichlet函数信号如图1.13所示。图1.13数值法生成的Dirichlet函数信号11)叠加随机噪声的正弦波信号

MATLAB程序:

t=(0:0.001:50);

y=sin(2*pi*50*t);

s=y+randn(size(t));

plot(t(1:50),s(1:50));

title(′随机噪声的正弦波′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

用数值法生成的叠加随机噪声的正弦波信号如图1.14所示。图1.14叠加随机噪声的正弦波信号12)周期方波信号

MATLAB程序:

t=(0:0.0001:1);

y=square(2*pi*15*t);%产生方波

plot(t,y);axis([0,1,-1.5,1.5]);

title(′周期方波′);xlabel(′时间(t)′);ylabel(′幅值(f)′);用数值法生成的周期方波信号如图1.15所示。图1.15数值法生成的周期方波信号13)周期锯齿波信号

MATLAB程序:

t=(0:0.001:2.5);

y=sawtooth(2*pi*30*t);%产生锯齿波

plot(t,y),axis([0,0.2,-1,1]);

title(′周期锯齿波′);xlabel(′时间(t)′);ylabel(′幅值(f)′);

用数值法生成的周期锯齿波信号如图1.16所示。图1.16数值法生成的周期锯齿波信号14)Sinc函数

MATLAB程序:

t=(0:0.001:2.5);

x=linspace(-5,5);

y=sinc(x);

plot(x,y);

title(′Sinc函数′);xlabel(′时间(t)′);ylabel(′幅值(f)′);用数值法生成的Sinc函数信号如图1.17所示。图1.17数值法生成的Sinc函数信号5)三角波信号

MATLAB程序:

t=(-3:0.001:5);

y=tripuls(t,4,0.5);

plot(t,y);title(′三角波′)

xlabel(′时间(t)′);ylabel(′幅值(f)′);

用数值法生成的三角波信号如图1.18所示。图1.18数值法生成的三角波信号

2.程序设计实验

自己编制程序,生成如下信号:

sqrt(a*x),[1-2*abs(x)]/a,sin(x)/x,5exp(-x),3sinx,

u(t-3),u(t+5),r(t-4),r(t+3),u(t-3)+r(t+7),sint,sin2t,

sin3t,δ(t-1),δ(t+5),cos3t+sin2t等。五、实验要求

(1)在MATLAB中输入程序,验证实验结果,并将实验结果存入指定存储区域。

(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得出实验结果。

(3)在实验报告中写出完整的自编程序,并给出实验结果。

六、思考题

(1)冲激信号与阶跃信号各有什么特性?

(2)如何利用基本信号表示方波、三角波等信号?

(3)信号的时域分解有哪几种方法?一、实验目的二、实验原理三、涉及的MATLAB函数四、实验内容与方法五、实验要求六、思考题

一、实验目的

(1)了解离散时间信号的特点;

(2)掌握离散时间信号表示的向量法和符号法;

(3)熟悉stem函数的应用;

(4)会用MATLAB语言表示常用基本离散信号。

二、实验原理

信号是随时间变化的物理量。离散信号是只在某些不连续的时间点上有信号值,其它时间点上信号没有定义的一类信号。离散信号一般可以利用模数转换由连续信号而得到。计算机所能处理的只是离散信号。三、涉及的MATLAB函数

stem函数

功能:绘制二维杆图即离散序列图。

调用格式:

stem(x,y):在x坐标上绘制高度为y的杆图。

四、实验内容与方法

1.验证性实验

常用的离散信号有正弦信号序列、单位阶跃序列、单位门序列、单位冲激信号、单位斜坡序列、单边衰减指数序列、随机序列等。参考给出的程序,产生信号并观察信号的波形,通过改变相关参数(例如:频率、周期、幅值、相位、显示时间段、步长、加噪等),进一步熟悉这些在工程实际与理论研究中常用的信号。

1)离散时间信号

MATLAB程序:

k1=-3;k2=3;k=k1:k2;

f=[1,3,-3,2,3,-4,1];

stem(k,f,′filled′);

axis([-4,4,-5,5]);

title(′离散时间信号′)

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的离散时间信号如图2.1所示。图2.1数值法生成的离散时间信号2)单位脉冲序列

MATLAB程序:

k1=-3;k2=6;k=k1:k2;

n=3;%单位脉冲出现的位置

f=[(k-n)==0];

stem(k,f,′filled′);title(′单位脉冲序列′)

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的单位脉冲序列如图2.2所示。图2.2数值法生成的单位脉冲序列3)单位阶跃序列

MATLAB程序:

k0=0;%单位阶跃开始出现的位置

k1=-3;k2=6;k=k1:k0-1;

n=length(k);

k3=-k0:k2;

n3=length(k3);

u=zeros(1,n);

u3=ones(1,n3);

stem(k,u,′filled′);

holdon;

stem(k3,u3,′filled′);

holdoff;

axis([k1,k2,-0.2,1.5]);

title(′单位阶跃序列′);

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的单位阶跃序列如图2.3所示。图2.3数值法生成的单位阶跃序列4)复指数序列

MATLAB程序:

clf;

c=-(1/12)+(pi/6)*i;

K=2;

n=0:40;

x=K*exp(c*n);

subplot(2,1,1);

stem(n,real(x));

ylabel(′幅值f(k)′);

title(′实部′);

subplot(2,1,2);

stem(n,imag(x));

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

title(′虚部′);

用数值法生成的复指数序列如图2.4所示。图2.4数值法生成的复指数序列5)指数序列

MATLAB程序:

clf;

k1=-1;k2=10;

k=k1:k2;

a=-0.6;

A=1;

f=A*a.^k;

stem(k,f,′filled′);

title(′指数序列′);

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的指数序列如图2.5所示。图2.5数值法生成的指数序列6)正弦序列

MATLAB程序:

clf;

k1=-20;k2=20;

k=k1:k2;

f=sin(k*pi/6);

stem(k,f,′filled′);

title(′正弦序列′);

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的正弦序列如图2.6所示。图2.6数值法生成的正弦序列7)单位斜坡序列

MATLAB程序:

clf;

k1=-1;k2=20;

k0=0;

n=[k1:k2];

ifk0>=k2

x=zeros(1,length(n));

elseif(k0<k2)&(k0>k1)

x=[zeros(1,k0-k1),[0:k2-k0]];

else

x=(k1-k0)+[0:k2-k1];

end

stem(n,x);

title(′单位斜坡序列′);

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的单位斜坡序列如图2.7所示。图2.7数值法生成的单位斜坡序列8)随机序列

MATLAB程序:

clf;

R=51;

d=0.8*(rand(R,1)-0.5);

m=0:R-1;

stem(m,d′,′b′);

title(′随机序列′);

xlabel(′k′);ylabel(′f(k)′);

用数值法生成的随机序列如图2.8所示。图2.8数值法生成的随机序列9)扫频正弦序列

MATLAB程序:

n=0:100;

a=pi/2/100;

b=0;arg=a*n.*n+b*n;

x=cos(arg);

clf;stem(n,x);

axis([0,100,-1.5,1.5]);

grid;axis;title(′扫频正弦序列′);

xlabel(′k′);ylabel(′f(k)′);

用数值法生成的扫频正弦序列如图2.9所示。图2.9数值法生成的扫频正弦序列10)幅值调制序列

MATLAB程序:

clf;

n=0:100;

m=0.4;fH=0.1;fL=0.01;

xH=sin(2*pi*fH*n);

xL=sin(2*pi*fL*n);

y=(1+m*xL).*xH;

stem(n,y);grid;

title(′幅值调制序列′);

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的幅值调制序列如图2.10所示。图2.10数值法生成的幅值调制序列11)信号平滑

MATLAB程序:

clf;

R=51;

d=0.8*(rand(1,R)-0.5);%随机噪声

m=0:R-1;

s=2*m.*(0.9.^m);%正常信号

x=s+d;%加噪声后的信号

xL=sin(2*pi*fL*n);

y=(1+m*xL).*xH;

stem(n,y);grid;

title(′幅值调制序列′);

xlabel(′时间(k)′);ylabel(′幅值f(k)′);

用数值法生成的幅值调制序列如图2.10所示。subplot(2,1,1);

plot(m,d,′r-′,m,s,′g--′,m,x,′b-.′);

title(′信号平滑′)

xlabel(′n′);ylabel(′f(n)′);

legend(′d[n]′,′s[n]′,′x[n]′);

x1=[00x];x2=[0x0];x3=[x00];

y=(x1+x2+x3)/3;

subplot(2,1,2);

plot(m,y(2:R+1),′r-′,m,s,′g--′);

legend(′y[n]′,′s[n]′);

xlabel(′n′);ylabel(′f(n)′);

信号平滑结果如图2.11所示。图2.11信号平滑12)滑动平均

MATLAB程序:

n=0:100;

s1=cos(2*pi*0.05*n);

%低频信号

s2=cos(2*pi*0.47*n);

%高频信号

x=s1+s2;混合信号

M=input(′滤波器长度=′);

num=ones(1,M);

y=filter(num,1,x)/M;

clf;

subplot(2,2,1);

plot(n,s1);

axis([0,100,-2,2]);

xlabel(′时间n′);ylabel(′幅值′);

title(′信号#1′);

subplot(2,2,2);

plot(n,s2);

axis([0,100,-2,2]);

xlabel(′时间n′);ylabel(′幅值′);

title(′信号#2′);

subplot(2,2,3);

plot(n,x);

axis([0,100,-2,2]);

xlabel(′时间n′);ylabel(′幅值′);

title(′输入信号′);

subplot(2,2,4);

plot(n,y);

axis([0,100,-2,2]);

xlabel(′时间n′);ylabel(′幅值′);

title(′输出信号′);

axis;

信号的滑动平均如图2.12所示。图2.12信号的滑动平均

2.程序设计实验

(1)编制程序,生成如下信号:

5exp(-k),3sin(k),u(k-3),u(k+5),r(k-4),r(k+3),

u(k-3)+r(k+7),sin(k),sin(2k),sin(3k),δ(k-1),δ(k+5),cos(3k)+sin(2k)等。

(2)寻找一些函数,编制程序生成信号。五、实验要求

(1)在计算机中输入程序,验证实验结果,并将实验结果存入指定存储区域。

(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得出实验结果。

(3)在实验报告中写出完整的自编程序,并给出实验结果。六、思考题

(1)单位冲激函数与单位脉冲函数有什么区别?

(2)信号的时域分解有哪几种方法?一、实验目的二、实验原理三、涉及的MATLAB函数四、实验内容与方法五、实验要求六、思考题

一、实验目的

(1)掌握连续时间信号时域运算的基本方法;

(2)掌握相关函数的调用格式及作用;

(3)掌握连续信号的基本运算。

二、实验原理

信号的基本运算包括信号的相加(减)和相乘(除)。信号的时域变换包括信号的平移、翻转、倒相以及尺度变换。这里要介绍的信号处理之所以要强调“基本运算”,是为了与

后面将要介绍的信号的卷积、相关等复杂的处理方法相区别。(1)加(减):f(t)=f1(t)±f2(t)

(2)乘:f(t)=f1(t)·f2(t)

(3)延时或平移:f(t)→f(t-t0)

t0>0时右移;t0<0时左移

(4)翻转:f(t)→f(-t)

(5)尺度变换:f(t)→f(at)

|a|>1时尺度缩小;|a|<1时尺度放大;

a<0时,还必须包含翻转;(6)标量乘法:f(t)→af(t)

(7)倒相:f(t)→-f(t)

(8)微分:f(t)→

(9)积分:f(t)→

f(τ)dτ

三、涉及的MATLAB函数及实现

1.stepfun函数

功能:产生一个阶跃信号。

调用格式:

stepfun(t,t0)

其中,t是时间区间,在该区间内阶跃信号一定会产生;t0是信号发生从0到1跳跃的时刻。2.diff函数

调用格式:

diff(f):求函数f对预设独立变数的一次微分值。

diff(f,′t′):求函数f对独立变数t的一次微分值。

3.int函数

调用格式:

int(f):函数f对预设独立变数的积分值。

int(f,′t′):函数f对独立变数t的积分值。四、实验内容与方法

1.验证性实验(直接利用符号法进行编程)

1)相加

实现两个连续信号的相加,即f(t)=f1(t)+f2(t)

MATLAB程序:

clearall;

t=0:0.0001:3;

b=3;

t0=1;u=stepfun(t,t0);

n=length(t);

fori=1:n

u(i)=b*u(i)*(t(i)-t0);

end%产生一个斜坡信号

y=sin(2*pi*t);%产生一个正弦信号

f=y+u;

%信号相加

plot(t,f);

xlabel(′时间(t)′);ylabel(′幅值f(t)′);title(′连续信号的相加′);

两个连续信号的相加结果如图3.1所示。图3.1两个连续信号的相加2)相乘

实现两个连续信号的相乘,即f(t)=f1(t)×f2(t)

MATLAB程序:

clearall;

t=0:0.0001:5;

b=3;

t0=1;u=stepfun(t,t0);

n=length(t);

fori=1:n

u(i)=b*u(i)*(t(i)-t0);

end

y=sin(2*pi*t);

f=y.*u;

plot(t,f);

xlabel(′时间(t)′);ylabel(′幅值f(t)′);title(′连续信号的相乘′);

两个连续信号的相乘结果如图3.2所示。图3.2两个连续信号的相乘结果3)移位

实现连续信号的移位,即[WTBX]f(t-t0),或者f(t+t0),常数t0>0。

[WTBZ]

MATLAB程序:

clearall;

t=0:0.0001:2;

y=sin(2*pi*(t));

y1=sin(2*pi*(t-0.2));

plot(t,y,′-′,t,y1,′--′);

ylabel(′f(t)′);xlabel(′t′);title(′信号的移位′);

信号及其移位结果如图3.3所示。图3.3信号及其移位4)翻转

信号的翻转就是将信号的波形以纵轴为对称轴翻转180°,将信号f(t)中的自变量t替换为-t即可得到其翻转信号。MATLAB程序:

clearall;

t=0:0.02:1;t1=-1:0.02:0;

g1=3*t;

g2=3*(-t1);

gridon;plot(t,g1,′--′,t1,g2);

xlabel(′t′);ylabel(′g(t)′);

title(′信号的反折′);

信号及其反折结果如图3.4所示。图3.4信号及其反折5)尺度变换

将信号f(t)中的自变量t替换为at。

MATLAB程序:

clearall;

t=0:0.001:1;

a=2;

y=sin(2*pi*t);

y1=sin(2*a*pi*t);

subplot(211)

plot(t,y);

ylabel(′y(t)′);xlabel(′t′);

title(′尺度变换′);

subplot(212)

plot(t,y1);

ylabel(′y1(t)′);xlabel(′t′);

信号及其尺度变换结果如图3.5所示。图3.5信号及其尺度变换6)倒相

将信号f(t)以横轴为对称轴对折得到-f(t)。

MATLAB程序:

clearall;

t=-1:0.02:1;

g1=3.*t.*t;

g2=-3.*t.*t;

gridon;

plot(t,g1,′-′,t,g2,′--′);

xlabel(′t′);ylabel(′g(t)′);title(′倒相′);

信号及其倒相结果如图3.6所示。图3.6信号及其倒相7)微分

求信号的一阶导数。

MATLAB程序:

clearall;

t=-1:0.02:1;

g=t.*t;

d=diff(g);

subplot(211);

plot(t,g,′-′);

xlabel(′t′);ylabel(′g(t)′);title(′微分′);

subplot(212)

plot(d,′--′);xlabel(′t′);ylabel(′d(t)′);

信号及其微分结果如图3.7所示。图3.7信号及其微分8)积分

求信号f(t)在区间(-∞,t)内的一次积分。

MATLAB程序:

clearall;

t=-1:0.2:1;symst

g=t*t;

d=int(g);subplot(211);

ezplot(g);

xlabel(′t′);ylabel(′g(t)′);title(′积分′);

subplot(212)

ezplot(d);xlabel(′t′);ylabel(′d(t)′);

信号及其积分结果如图3.8所示。图3.8信号及其积分

9)综合

已知信号f(t)=

×[ε(t+2)-ε(t-2)],分别求出下列信号的数学表达式,并绘制其时域波形。

f(t+2);f(t-2);f(-t);f(2t);-f(t)

MATLAB程序:

symst

f=sym(′(t/2+1)*(heaviside(t+2)-heaviside(t-2))′);

subplot(2,3,1);ezplot(f,[-3,3]);y1=subs(f,t,t+2);subplot(2,3,2);ezplot(y1,[-5,1]);y2=subs(f,t,t-2)subplot(2,3,3);ezplot(y2,[-1,5]);

y3=subs(f,t,-t);subplot(2,3,4);ezplot(y3,[-3,3]);

y4=subs(f,t,2*t);subplot(2,3,5);ezplot(y4,[-2,2]);y5=-f;subplot(2,3,6)ezplot(y5,[-3,3]);

注:在运行以上程序时,需先建立Heaviside的M文件函数。Heaviside的函数M文件如下:

function[x,n]=Heaviside(n0,n1,n2)

n=[n1:n2];x=[(n-n0)==0];

各个信号的波形如图3.9所示。图3.9各个信号的波形

2.程序设计实验

(1)已知信号f1(t)=(-t+4)[ε(t)-ε(t-4)],f2(t)=sin(2πt),用MATLAB绘出下列信号的时域波形。要求写出全部程序,并绘制出信号时域波形。

(a)f3(t)=f1(-t)+f1(t)(b)f4(t)=-[f1(-)+f1(t)]

(c)f5(t)=f2(t)×f3(t)

(d)f6(t)=f1(t)×f2(t)

(2)已知信号f(t)的波形如图3.10所示。试画出下列各函数对时间t的波形。

(a)f(-t)(b)f(-t+2)(c)f(-t-2)(d)f(2t)

(e)f

(f)f(t-2)(g)f

(h)

(i)

f(2-τ)dτ

图3.10信号f(t)的波形五、实验要求

(1)在计算机中输入程序,验证实验结果,并将实验结果存入指定存储区域。

(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得出实验结果。

(3)在实验报告中写出完整的自编程序,并给出实验结果。

六、思考题

(1)什么是信号的翻转、尺度变换、平移?

(2)能否将信号f(2t+2)先平移后尺度变换得到信号f(t)?一、实验目的二、实验原理三、涉及的MATLAB函数四、实验内容与方法五、实验要求六、思考题

一、实验目的

(1)掌握离散时间信号时域运算的基本实现方法。

(2)熟悉相关函数的调用格式及作用。

(3)掌握离散信号的基本运算。

(4)掌握信号的分解,会将任意离散信号分解为单位脉冲信号的线性组合。

二、实验原理

信号的基本运算包括信号的相加和相乘。信号的时域变换包括信号的平移、反折、倒相以及尺度变换。这里要介绍的信号处理之所以要强调“基本运算”,是为了与后面将要介绍的信号的卷积、相关等复杂的处理方法相区别。三、涉及的MATLAB函数

fliplr函数

功能:实现矩阵行元素的左右翻转。

调用格式:

B=fliplr(A):其中A指要翻转的矩阵。

四、实验内容与方法

1.验证性实验(参考程序)

1)序列的加法

MATLAB程序:

x1=-2:2;

%序列1的值

k1=-2:2;x2=[1,-1,1];%序列2的值

k2=-1:1;k=min([k1,k2]):max([k1,k2]);

f1=zeros(1,length(k));f2=zeros(1,length(k));

f1(find((k>=min(k1))&(k<=max(k1))==1))=x1;

f2(find((k>=min(k2))&(k<=max(k2))==1))=x2;

f=f1+f2;stem(k,f,′filled′);

axis([min(min(k1),min(k2))-1,max(max(k1),max(k2))+1,min(f)-0.5,max(f)+0.5

]);

两个序列的加法如图4.1所示。图4.1两个序列的加法2)序列的乘法

MATLAB程序:

x1=-2:2;%序列1的值

k1=-2:2;

x2=[1,-1,1];%序列2的值

k2=-1:1;k=min([k1,k2]):max([k1,k2]);

f1=zeros(1,length(k));f2=zeros(1,length(k));

f1(find((k>=min(k1))&(k<=max(k1))==1))=x1;

f2(find((k>=min(k2))&(k<=max(k2))==1))=x2;

f=f1*f2;stem(k,f,′filled′);

axis([min(min(k1),min(k2))-1,max(max(k1),max(k2))+1,min(f)-0.5,[JP]max(f)+0.5]);

两个序列的乘法如图4.2所示。图4.2两个序列的乘法

3)序列的翻转

MATLAB程序:

x1=-2:2;%序列1的值

k1=-2:2;

k=-fliplr(k1);

f=fliplr(x1);

stem(k,f,′filled′);

axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5]);

序列及其翻转如图4.3所示。图4.3序列及其翻转4)序列的倒相

MATLAB程序:

x1=-2:2;%序列1的值

k1=-2:2;k=k1;

f=-x1;

stem(k,f,′filled′);

axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5]);

序列及其倒相如图4.4所示。图4.4序列及其倒相5)序列的平移

MATLAB程序:

x1=-2:2;%序列1的值

k1=-2:2;k0=2;

k=k1+k0;f=x1;

stem(k,f,′filled′);

axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5]);

序列及其平移如图4.5所示。图4.5序列及其平移

2.程序设计实验

已知序列f(k)={2,3,1,2,3,4,3,1},对应的k值为-3≤k≤4,分别绘出下列信号的图形:

f1(k)=f(k-2),f2(k)=f(-k),f3(k)=f(k-1)ε(k),

f4(k)=f(-k+2),f5(k)=f(k+1),f6(k)=f(k-2)ε(k),f7(k)=f(k+2)ε(k)五、实验要求

(1)在计算机中输入程序,验证并记录实验结果,经过分析、比较来完成实验报告。

(2)对于设计性实验,应自行编制完整的实验程序,重复验证性实验的过程,并在实验报告中给出完整的自编程序。六、思考题

将信号分解为冲激信号序列有何实际意义?一、实验目的二、实验原理三、涉及的MATLAB函数四、实验内容与方法五、实验要求六、思考题

一、实验目的

(1)熟悉卷积的定义和表示;

(2)掌握利用计算机进行卷积运算的原理和方法;

(3)熟悉连续信号卷积运算函数conv的应用。

二、实验原理

1.卷积的定义

卷积积分可以表示为

f(t)=f1(t)*f2(t)=

2.卷积计算的几何解法

卷积积分的计算从几何上可以分为四个步骤:翻转→平移→相乘→叠加(积分)。

3.卷积积分的应用

卷积积分是信号与系统时域分析的基本手段,主要用于求系统零状态响应,它避开了经典分析方法中求解微分方程时需要求系统初始值的问题。

设一个线性零状态系统,已知系统的单位冲激响应为h(t),当系统的激励信号为x(t)时,系统的零状态响应为

也可简单记为

yzs(t)=x(t)*h(t)由于计算机技术的发展,通过编程的方法来计算卷积积分已经不再是冗繁的工作,并可以获得足够的精度。因此,信号的时域卷积分析法在系统分析中得到了广泛的应用。

卷积积分的数值运算实际上可以用信号的分段求和来实现,即:

f(t)=f1(t)*f2(t)=

f1(kΔ)·f2(t-kΔ)·Δ如果我们只求当t=nΔ(n为正整数)时f(t)的值f(nΔ),则由上式可以得到:

f(nΔ)=

f1(kΔ)·f2(nΔ-kΔ)·Δ

f1(kΔ)·f2[(n-k)Δ]上式中的f1(kΔ)·f2[(n-k)Δ]实际上就是连续信号f1(t)和f2(t)经等间隔Δ均匀抽样的离散序列f1(kΔ)和f2(kΔ)的卷积和,当Δ足够小时,f(nΔ)就是f1(t)和f2(t)卷积积分的数值近似。因此,在利用计算机求两个连续信号的卷积时,实质上是先将其转化为离散信号,然后再计算,这样可以利用离散信号的卷积的结论。三、涉及的MATLAB函数

conv函数

功能:实现信号的卷积运算。

调用格式:

w=conv(u,v):计算两个有限长度序列的卷积。

说明:该函数假定两个序列都从零开始。四、实验内容与方法

1.验证性实验

利用离散conv函数实现连续运算,并寻找其他方法。

1)函数卷积计算

若f1(t)=δ(t),f2(t)=u(t),试利用给出的参考程序,计算

f(t)=f1(t)*f2(t),f(t)=f1(t)*f1(t),f(t)=f2(t)*f2(t)(利用conv函数)。MATLAB程序:

%连续函数卷积计算

a=1000;

t1=-5:1/a:5;

f1=stepfun(t1,0);

f2=stepfun(t1,-1/a)-stepfun(t1,1/a);

subplot(231);

plot(t1,f1);axis([-5,5,0,1.2]);%xlabel(′时间(t)′);

ylabel(′f1(t)′);title(′单位阶跃函数′);

subplot(232);plot(t1,f2);ylabel(′f2(t)′);title(′单位冲激函数′);

y=conv(f1,f2);r=2*length(t1)-1;t=-10:1/a:10;

subplot(233);plot(t,y);axis([-5,5,0,1.2]);

title(′f1与f2的卷积′);

ylabel(′y(t)′);

f11=conv(f1,f1);f22=conv(f2,f2);

subplot(234);plot(t,f11);title(′f1与f1的卷积′);

ylabel(′f11(t)′);axis([-5,5,0,5000]);

subplot(235);plot(t,f22);title(′f2与f2的卷积′);ylabel(′f22(t)′);

连续函数卷积计算结果如图5.1所示。图5.1连续函数卷积计算结果2)连续函数卷积计算1(利用conv函数)

MATLAB程序:

%计算连续信号的卷积积分

%f:函数的样值向量

%k:对应时间向量

%s:采样时间间隔

s=0.01;

k1=0:s:2;%生成k1的时间向量k2=k1;%生成k2的时间向量

f1=3*k1;%生成f1的样值向量

f2=3*k2;%生成f2的样值向量

f=conv(f1,f2);

f=f*s;

k0=k1(1)+k2(1);%序列f非零样值的起点

k3=length(f1)+length(f2)-2;%序列f非零样值的宽度k=k0:s:k3*s;

subplot(3,1,1);%f1(t)的波形

plot(k1,f1);

title(′f1(t)′);

subplot(3,1,2);%f2(t)的波形

plot(k2,f2);

title(′f2(t)′);

subplot(3,1,3);%f3(t)的波形

plot(k,f);

title(′f(t)′);

连续函数卷积计算(利用conv函数)结果如图5.2所示。图5.2连续函数卷积计算结果(利用conv函数)3)连续函数卷积计算2(不利用conv函数)

MATLAB程序:

%f为第一个信号的样值序列,h为第二个信号的样值序列,T为采样间隔

clearall;

T=0.1;t=0:T:10;f=sin(t);

h=0.5*(exp(-t)+exp(-3*t));Lf=length(f);Lh=length(h)

fork=1:Lf+Lh-1y(k)=0;

fori=max(1,k-(Lh-1)):min(k,Lf)

y(k)=y(k)+f(i)*h(k-i+1);

end

yzsappr(k)=T*y(k);

end

subplot(3,1,1);%f(t)的波形

plot(t,f);title(′f(t)′);

subplot(3,1,2);%h(t)的波形

plot(t,h);title(′h(t)′);

subplot(3,1,3);%卷积近似计算结果的波形

plot(t,yzsappr(1:length(t)));title(′卷积的近似计算结果)′);xlabel(′时间′);

连续函数卷积计算(不利用conv函数)结果如图5.3所示。图5.3连续函数卷积计算结果(不利用conv函数)2.程序设计实验

(1)若f1(t)=δ(t),f2(t)=u(t),f3(t)=u(t)-u(t-4),试证明卷积满足如下结论:

①f1(t)*f2(t)=f2(t)*f1(t);

②f1(t)*[f2(t)+f3(t)]=f1(t)*f2(t)+f1(t)*f3(t)。

(2)自己寻找两个不同的函数,重复上述操作,比较所得结果。五、实验要求

(1)在计算机中输入程序,验证实验结果,并将实验结果记录下来,经过分析、比较来完成实验报告。

(2)对于设计性实验,应自行编制完整的实验程序,重复验证性实验的过程,并在实验报告中给出完整的自编程序。六、思考题

(1)函数conv既不给出也不接受任何时间信息,怎样才能得到卷积以后的时间信息(即卷积的起点和终点)?请利用卷积函数编写一个可以得到时间信息的改进程序。一、实验目的二、实验原理三、涉及的MATLAB函数四、实验内容与方法五、实验要求六、思考题

一、实验目的

(1)熟悉连续LTI系统在典型激励信号下的响应及其特征;

(2)掌握连续LTI系统单位冲激响应的求解方法;

(3)重点掌握用卷积法计算连续时间系统的零状态响应;

(4)熟悉MATLAB相关函数的调用格式及作用;

(5)会用MATLAB对系统进行时域分析。二、实验原理

连续时间线性非时变系统(LTI)可以用如下的线性常系数微分方程来描述:

any(n)(t)+an-1y(n-1)(t)+…+a1y′(t)+a0y(t)

=bmf

(m)(t)+…+b1f′(t)+b0f(t)

其中,

n≥m,系统的初始条件为y(0-),y′(0-),y″

(0-),…,y(n-1)(0-)

系统的响应一般包括两个部分,即由当前输入所产生的响应(零状态响应)和由历史输入(初始状态)所产生的响应(零输入响应)。对于低阶系统,一般可以通过解析的方法得到响应。但是,对于高阶系统,手工计算就比较困难,这时MATLAB强大的计算功能就能比较容易地确定系统的各种响应,如冲激响应、阶跃响应、零输入响应、零状态响应、全响应等。

1.直接求解法

涉及到的MATLAB函数有:impulse(冲激响应)、step(阶跃响应)、roots(零输入响应)、lsim(零状态响应)等。在MATLAB中,要求以系数向量的形式输入系统的微分方程,

因此,在使用前必须对系统的微分方程进行变换,得到其传递函数。其分别用向量a和b表示分母多项式和分子多项式的系数(按照s的降幂排列)。

2.卷积计算法

根据系统的单位冲激响应,利用卷积计算的方法,也可以计算任意输入状态下系统的零状态响应。设一个线性零状态系统,已知系统的单位冲激响应为h(t),当系统的激励信号为f(t)时,系统的零状态响应为

yzs(t)=

f(τ)h(t-τ)dτ=

f(t-τ)h(τ)dτ也可简单记为

yzs(t)=f(t)*h(t)

由于计算机采用的是数值计算,因此系统的零状态响应也可用离散序列卷积和近似为

yzs(k)=

f(n)*h(k-n)T=f(k)*h(k)

式中yzs(k)、f(k)和h(k)分别对应以T为时间间隔对连续时间信号yzs(t)、f(t)和h(t)进行采样得到的离散序列。三、涉及的MATLAB函数

1.impulse函数

功能:计算并画出系统的冲激响应。

调用格式:

impulse(sys):其中sys可以是利用命令tf、zpk或ss建立的系统函数。

impulse(sys,t):计算并画出系统在向量t定义的时间内的冲激响应。

Y=impulse(sys,t):保存系统的输出值。

2.step函数

功能:计算并画出系统的阶跃响应曲线。

调用格式:

step(sys):其中sys可以是利用命令tf、zpk或ss建立的系统。

step(sys,t):计算并画出系统在向量t定义的时间内的阶跃响应。

3.lsim函数

功能:计算并画出系统在任意输入下的零状态响应。

调用格式:

lsim(sys,x,t):其中sys可以是利用命令tf、zpk或ss建立的系统函数,x是系统的输入,t定义的是时间范围;

lsim(sys,x,t,zi):计算出系统在任意输入和零状态下的全响应,sys必须是状态空间形式的系统函数,zi是系统的初始状态。4.roots函数

功能:计算齐次多项式的根。

调用格式:

r=roots(b):计算多项式b的根,r为多项式的根。四、实验内容与方法

1.验证性实验

(1)求系统y(2)(t)+6y(1)(t)+8y(t)=3x(1)(t)+9x(t)的冲激响应和阶跃响应。MATLAB程序:

%求系统的冲激响应

b=[39];a=[168];

sys=tf(b,a);

t=0:0.1:10;

y=impulse(sys,t);

plot(t,y);

xlabel(′时间(t)′);ylabel(′y(t)′);title(′单位冲激响应′);系统的冲激响应如图6.1所示。图6.1系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论