浙江理工大学信号与系统实验
实验一 连续时间信号及其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