浙江理工大学信号与系统实验
实验一 连续时间信号及其MATLAB实现
一、实验目的
1.掌握MATLAB语言的基本操作,学习基本的编程功能;
2.掌握MATLAB产生常用连续时间信号的编程方法;
3.学会用MATLAB进行信号基本运算的方法,了解信号运算对信号所起的作用。
二、实验仪器
装有MATLAB软件的微型计算机1台
三、实验原理
- 连续信号MATLAB实现原理
从严格意义上讲,MATLAB数值计算的方法并不能处理连续时间信号。然而,可用连续信号在等时间间隔点的取样值来近似表示连续信号,即当取样时间间隔足够小时,这些离散样值能够被MATLAB处理,并且能较好地近似表示连续信号。
MATLAB提供了大量生成基本信号的函数。比如常用的指数信号、正余弦信号等都是MATLAB的内部函数。为了表示连续时间信号,需定义某一时间或自变量的范围和取样时间间隔,然后调用该函数计算这些点的函数值,最后画出其波形图。
- 典型信号的MATLAB表示
(1) 实指数信号:f(t)=Keat,式中K,a为实数。在MATLAB中可以利用exp()函数实现,其语句格式为:y=Kexp(at)。
如,调用格式为 ft=Aexp(at) 程序是
t=0:0.01:10; %定义时间点
ft=A*exp(a*t); %计算这些点的函数值
plot(t,ft); %画图命令,用直线段连接函数值表示曲线
grid on; %在图上画方格
(2) 正弦信号:f(t)=Ksin(ωt+φ)或f(t)=Kcos(ωt+φ),其中K为振幅,ω是角频率;φ是初相位。在MATLAB中可以利用sin()或cos()函数实现,其语句格式为Ksin(ωt+phi),Kcos(ωt+phi)。
如,调用格式为 ft=Asin(wt+phi)
```A=1; w=2*pi; phi=pi/6;
```
t=0:0.01:8; %定义时间点
ft=A*sin(w*t+phi); %计算这些点的函数值
plot(t,ft); %画图命令
grid on; %在图上画方格
(3) 单位冲击/阶跃信号:
单位冲击/阶跃信号在MATLAB中可以用比较赋值语句产生。MATLAB表达式“y = ( t==0 )”的含义就是t = 0时y =1,而当t ≠ 0时y =0。 MATLAB表达式“y = ( t >=0)”的含义就是t ≥ 0时y =1,而当t < 0时y =0。
以下为单位阶跃信号示例:
t=-1:0.01:5;
y=(t>=0);
plot(t,y);
grid on;
axis([-1,5,-0.5,1.5]);
在MATLAB中,将dirac函数定义为冲击信号函数,heaviside函数定义为阶跃信号函数。
(4) 复指数信号:f(t)=Kest =Ke(σ+jω)t= Keσtcos(ωt)+j Keσtsin(ωt),其中,s=σ+jω是复变量;σ、ω为实数。在MATLAB中可以利用exp()函数表示复指数信号,MATLAB中默认变量i为虚部单位,求取实部用real()函数,求取虚部用imag()函数,求取模用abs()函数,求取相角用angle()函数。
如f(t)=Ke****(σ+jω)t,调用格式为f=Kexp((σ+jω)*t)
t=0:0.01:3;
K=3; sigma=-1; omega=10;
f=K*exp((sigma +j*omega)*t);
subplot(2,2,1),plot(t,real(f)),title('实部')
subplot(2,2,3),plot(t,imag(f)),title('虚部')
subplot(2,2,2),plot(t,abs(f)),title('模')
subplot(2,2,4),plot(t,angle(f)),title('相角')
(5)矩形脉冲信号:在MATLAB中可用rectpuls()函数产生,其语句格式为y=rectpuls(t,width),该函数用于产生一个幅值为1、宽度为width、相对于t=0 点左右对称的矩形波信号。该函数的横坐标范围由向量t决定,是以t=0为中心向左右各展开width/2 的范围。width的默认值为1。
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;
周期性矩形波信号或方波在MATLAB中可用square函数产生,其语句格式为square(t,DUTY)。该函数用于产生一个周期为2π、幅值为1的周期性方波信号,其中,DUTY参数用来表示信号的占空比为DUTY%,即在一个周期内脉冲宽度(正值部分)与脉冲周期的比值,占空比默认值为0.5。
例如频率为30Hz 的周期性方波信号的MATLAB源程序如下:
t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);%DUTY=75(percent)
plot(t,y);axis([-0.0625 0.0625 -1.5 1.5]);
grid on;
(6)三角波脉冲信号:在MATLAB中,可以用tripuls()函数生成,其语句格式为ft=tripuls(t,width,skew),该函数用于产生幅度为1,宽度为width,且以0为中心左右各展开width/2大小,斜度为skew的三角波。width的默认值是1,skew的取值范围是-1~+1之间。一般最大幅度1出现在t=(width/2)*skew的横坐标位置,默认时skew=0,此时产生对称三角波。
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
grid on;
axis([-3,3,-0.5,1.5]);
周期性三角波信号在MATLAB中用sawtooth函数来表示,其调用形式为:
Y=sawtooth(t,WIDTH )
用以产生一个周期为2p、最大幅度为1、最小幅度为-1的周期性方波信号(锯齿波)信号,其中的WIDTH 参数表示最大幅度出现的位置:在一个周期内,信号从t =0 到WIDTH2p时,函数值是从-1到1 线性增加的,而从WIDTH**2p到2p时函数值又是从1到-1 线性递减的;在其他周期内依次类推。
例如周期性三角波信号的MATLAB源程序如下:
t=-5*pi:pi/10:5*pi;
x=sawtooth(t,0.5);
plot(t,x);axis([-16 16 -1.5 1.5]);
grid on;
- 信号的基本运算
信号基本运算是乘法、加法、尺度、反转、平移、微分、积分,实现方法有数值法和符号法。
(1)信号的乘法与加法
例如:已知f1(t)=sin(wt) , f2(t)=sin(8wt) , w=2π , 求f1(t)+f2(t)和f1(t)f2(t) 的波形图
w=2*pi;
t=0:0.01:3;
f1=sin(w*t);
f2=sin(8*w*t);
subplot(211)
plot(t,f1+1,':',t,f1-1,':',t,f1+f2)
grid on,title('f1(t)+f2(t))')
subplot(212)
plot(t,f1,':',t,-f1,':',t,f1.*f2)
grid on,title('f1(t)*f2(t)')
(2)信号自变量的变换
如前所述,MATLAB可以有两种方法来表示连续信号。用这两种方法均可实现连续信号的时域变换,但用符号运算的方法则较为简便。
*①**移位*
对于连续信号f(t),若有常数t0>0,延时信号f(t-t0)是将原信号沿正t轴方向平移时间t0,而f(t+t0)是将原信号沿负t轴方向移动时间t0。我们可用下面的命令来实现连续信号的平移及其结果可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量,subs命令则将连续信号中的时间变量t用t-t0替换:
y=subs(f,t,t-t0);
ezplot(y)
*②**反折*
连续信号的反折,是指将信号以纵坐标为轴反折,即将信号f(t)中的自变量t换为-t。实现如下:
y=subs(f,t,-t);
ezplot(y)
*③**尺度变换*
连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f(t)中的自变量t换为at,当a>1时,信号f(at)以原点为基准,沿横轴压缩到原来的1/a;当0<a<1时,就展宽至原来的1/a倍。实现如下:
y=subs(f,t,a*t);
ezplot(y)
*④**倒相*
连续信号的倒相是指将信号f(t)以横轴为对称轴对折得到-f(t)。实现如下:
y=-f;
ezplot(y)
对于以上的命令,可在画图命令之后加入坐标轴的调整的命令(即加入axis( )命令),以使画出的图形更清晰、直观。
例如:以f(t)为三角信号为例,求f(2t) , f(2-2t)
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
subplot(3,1,1);
plot(t,ft); grid on;
title ('f(t)');
ft1= tripuls(2*t,4,0.5);
subplot(3,1,2);
plot(t,ft1); grid on;
title ('f(2t)');
ft2= tripuls(2-2*t,4,0.5);
subplot(3,1,3);
plot(t,ft2); grid on;
title ('f(2-2t)');
(3)微分与积分
符号算法也可实现信号的运算,以信号的微积分运算为例说明符号算法应用。
微分的调用格式为 diff(function,’variable’,n)
积分的调用格式为 int(function,’variable’,a,b)
式中function表示要微分或积分的函数,variable表示运算变量,n表示求导阶数,默认值是求一阶导数,a是积分下限,b是积分上限,a、b默认是求不定积分。在符号运算中,若要调用它必须用sym定义后,才能实现。
例如:求一阶导数的例题,已知,
clear
syms a x y1 y2 %定义符号变量a, x ,y1, y2
y1=sin(a*x^2); %符号函数y1
y2=x*sin(x)*log(x); %符号函数y2
dy1=diff(y1, 'x') %无分号消隐直接显示结果
dy2=diff(y2) %无分号消隐直接显示结果
例如:求积分的例题,,
clear
syms a x y3 y4
y3=x^5-a*x^2+sqrt(x)/2;
y4=(x*exp(x))/(1+x)^2;
iy3=int(y3,'x')
iy4=int(y4,0,1)
四、实验内容
1. 验证实验原理中程序
(1) 实指数信号:
A=1; a=-0.4;
t=0:0.01:10; %定义时间点
ft=A*exp(a*t); %计算这些点的函数值
plot(t,ft); %画图命令,用直线段连接函数值表示曲线
grid on; %在图上画方格
(2) 正弦信号:
A=1; w=2*pi; phi=pi/6;
t=0:0.01:8; %定义时间点
ft=A*sin(w*t+phi); %计算这些点的函数值
plot(t,ft); %画图命令
grid on; %在图上画方格
(3) 单位冲击/阶跃信号:
单位阶跃信号:
t=-1:0.01:5;
y=(t>=0);
plot(t,y);
grid on;
axis([-1,5,-0.5,1.5]);
(4) 复指数信号:
t=0:0.01:3;
K=3; sigma=-1; omega=10;
f=K*exp((sigma +j*omega)*t);
subplot(2,2,1),plot(t,real(f)),title('实部')
subplot(2,2,3),plot(t,imag(f)),title('虚部')
subplot(2,2,2),plot(t,abs(f)),title('模')
subplot(2,2,4),plot(t,angle(f)),title('相角')
(5)矩形脉冲信号:
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;
周期性方波信号:
t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);%DUTY=75(percent)
plot(t,y);axis([-0.0625 0.0625 -1.5 1.5]);
grid on;
(6)三角波脉冲信号:
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
grid on;
axis([-3,3,-0.5,1.5]);
周期性三角波信号:
t=-5*pi:pi/10:5*pi;
x=sawtooth(t,0.5);
plot(t,x);axis([-16 16 -1.5 1.5]);
grid on;
(7)信号的乘法与加法
已知f1(t)=sin(wt) , f2(t)=sin(8wt) , w=2π , 求f1(t)+f2(t)和f1(t)f2(t) 的波形图
w=2*pi;
t=0:0.01:3;
f1=sin(w*t);
f2=sin(8*w*t);
subplot(211)
plot(t,f1+1,':',t,f1-1,':',t,f1+f2)
grid on,title('f1(t)+f2(t))')
subplot(212)
plot(t,f1,':',t,-f1,':',t,f1.*f2)
grid on,title('f1(t)*f2(t)')
(8)信号自变量的变换
f(t)为三角信号,f(2t) , f(2-2t)
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
subplot(3,1,1);
plot(t,ft); grid on;
title ('f(t)');
ft1= tripuls(2*t,4,0.5);
subplot(3,1,2);
plot(t,ft1); grid on;
title ('f(2t)');
ft2= tripuls(2-2*t,4,0.5);
subplot(3,1,3);
plot(t,ft2); grid on;
title ('f(2-2t)');
(9)微分与积分
已知,
clear
syms a x y1 y2 %定义符号变量a, x ,y1, y2
y1=sin(a*x^2); %符号函数y1
y2=x*sin(x)*log(x); %符号函数y2
dy1=diff(y1, 'x') %无分号消隐直接显示结果
dy2=diff(y2) %无分号消隐直接显示结果
求积分,
clear
syms a x y3 y4
y3=x^5-a*x^2+sqrt(x)/2;
y4=(x*exp(x))/(1+x)^2;
iy3=int(y3,'x')
iy4=int(y4,0,1)
2. 画出信号波形
(1)
(2)
(3)产生幅度为1、周期为1、占空比为0.5的周期矩形信号
3. 已知,作出、、的微分、的积分、、的波形。
定义函数:
function y=myfun1(x)
y=x.*(x>0 & x<1)+(-1).*(x>1 & x<2)+0.*(x<=0 & x >=2);
end
t=-4:0.1:4;
f=myfun1(t);
f1=f+f;
f2=f.*f;
f3=diff (f);
for u=1:length (t);
f4(u)=quad('f',0,t(u));
end
f5=myfun1(3-4*t);f6=myfun1(1-0.667*t);
subplot (211);plot (t,f1,'Linewidth',2);title('f (t)+f (t)');
ylabel('y(t)');xlabel('t');xlim([-0.1,4]);ylim([-2,3]);
grid on;
subplot (212);plot (t,f2,'Linewidth',2);title('f (t).*f (t)');
ylabel('y(t)');xlabel('t');xlim([-0.1,4]);ylim([-2,3]);
grid on;
figure;
subplot(211);plot(t(1:80),f3,'Linewidth',2);
title('f (t)的积分'); ylabel('y(t)');xlabel('t');
grid on;
subplot(212);plot(t,f4,'Linewidth',2);
title ('f (x)的微分'); ylabel('y(t)');xlabel('t');grid on;
figure;
subplot (2,1,1);plot (t,f5,'Linewidth',2);title ('f (3-4t)');
ylabel('y(t)');xlabel('t');
grid on;
subplot (2,1,2);plot (t,f6,'Linewidth',2);title('f (1-1.5t)');
ylabel('y(t)');xlabel('t');
grid on;
五、 实验结论
-
再次熟悉了matlab的函数和基本操作,能流利的使用matlab进行函数的仿真模拟和运算。
-
熟悉了信号与系统仿真实验的大致内容和报告要求。
-
对信号与系统中的阶跃信号、冲激信号的图像和性质有了进一步了解。
后续还有好多实验还没来得及上传,可以点击这个链接自行下载:https://wwd.lanzouq.com/ipnqk05t5v3e
);
title (‘f (x)的微分’); ylabel(‘y(t)’);xlabel(‘t’);grid on;
[外链图片转存中...(img-zNn7oVUR-1654166607278)]
```matlab
figure;
subplot (2,1,1);plot (t,f5,'Linewidth',2);title ('f (3-4t)');
ylabel('y(t)');xlabel('t');
grid on;
subplot (2,1,2);plot (t,f6,'Linewidth',2);title('f (1-1.5t)');
ylabel('y(t)');xlabel('t');
grid on;
[外链图片转存中…(img-qeIgkYYp-1654166607279)]
五、 实验结论
-
再次熟悉了matlab的函数和基本操作,能流利的使用matlab进行函数的仿真模拟和运算。
-
熟悉了信号与系统仿真实验的大致内容和报告要求。
-
对信号与系统中的阶跃信号、冲激信号的图像和性质有了进一步了解。
后续还有好多实验还没来得及上传,可以点击这个链接自行下载:https://wwd.lanzouq.com/ipnqk05t5v3e