实验一、熟悉MATLAB环境和基本信号的产生与运算

一、实验目的

1.熟悉MATLAB 的运行环境及基本操作命令;
2.掌握MATLAB中信号的表示方法;

二、实验器材

计算机、MATLAB软件

三、实验原理

1、 MATLAB简介

MATLAB语言以矩阵计算为基础,语法规则简单易学,并将高性能的数值计算和可视化结合,且功能强大、丰富的函数工具箱,可扩展性强,深受工程技术人员及科技专家的欢迎,并很快成为应用学科计算机辅助分析、设计、仿真、教学等领域不可缺少的基础软件。

(1)MATLAB的桌面系统

MATLAB既是一种高级计算机语言,又是一个编程环境。MATLAB的桌面系统,由桌面平台、窗口、菜单栏和工具栏组成。启动MATLAB后,界面如图1.1所示。
在图1.1中,最上面有“MATLAB”标题,标题栏的右边从左到右依次为窗口最小化、缩放和关闭按钮。标题栏下是条形主菜单,主菜单下是工具栏按钮与设置当前目录的弹出式菜单框及其右侧的查看目录树的按钮(【Browse for Folder】)。在工具栏下的大窗口就是MATLAB的主窗口,在大窗口里设置4个小窗口(默认设置):“Workspace”是工作空间浏览器窗口,管理工作空间中变量,在运行MATLAB程序时,程序创建的所有变量的主要信息都驻留在工作空间浏览器里,为用户提供了非常方便的查询服务;“Current Directory”路径浏览器窗口,它显示当前路径下的文件;“Command History”历史命令窗口;“Command Windows” 是用户使用MATLAB进行工作的命令窗口,也是实现MATLAB各种功能的主窗口,MATLAB在这里为用户提供了交互式的工作环境,即用户可在这里进行诸如数值计算、符号运算和运算结果的可视化等复杂的分析和处理。
在这里插入图片描述

                                            图1.1 MATLAB桌面系统

比如,在命令窗口的工作区直接输入如下字符:a=eye(4,4)然后按回车键,即可生成一个4×4的单位矩阵,其显示结果如图1.2所示。
在这里插入图片描述

                                          图1.2   程序运行结果

(2)实验中常用的MATLAB函数命令

在整个信号与系统实验过程中,是要利用MATLAB语言来实现信号描述,信号的计算。所以,对MATLAB中的简单常用的函数命令必须有一个好的了解。常用函数命令如下:
function:在MATLAB中不是它的自带函数就可以完成所有功能,更多的时候是自己编写程序来实现所需的功能,这时就要用到此命令,调用格式为:function ***( ) 括号外面为函数名称,括号中为函数中要用到的变量。
plot命令:plot命令是MATLAB中用来绘制用连续信号的波形。它的功能是将向量点用直线依次连接起来。调用格式:plot(f),其中向量f的值为纵坐标的值,相应的元素小标为横坐标的值;plot(t,f),t和f为同维向量,t值为横坐标,f为纵坐标;plot(t1,f1;t2,f2),此命令可以在同一图形下绘出两个信号波形。
title命令:在绘图命令中,可以用此命令来对绘制出来的波形做一些注释。调用格式为:title(‘ …… ’) 中间部分是对图形任意注释的描述。
xlabel、ylabel命令:这两个也是来对绘制出来的波形做标注用的,可以标注出两个坐标轴的未知数的意义,增加图形中的信息量。调用格式:xlabel(‘ …… ’),ylabel(‘ …… ’) 中间可以是对坐标轴做注释的文字或字母。
axis命令:此命令可以来定义绘制波形中坐标的范围。调用格式为:axis([k1,k2,g1,g2]),其中k1,k2表示横坐标的范围,g1,g2表示纵坐标的范围。
stem命令:此命令专门用来绘制离散序列的波形。调用格式为:stem(k,f) 调用此命令可以绘制出离散序列的点状图。
fliplr命令:此函数用来将向量以零时刻为基准点进行反折。调用格式为:f=fliplr(f1) 这样f就是向量f1反折后的函数。
min、max命令:这两个命令可以用来比较算出一个向量中的最小值和最大值,或者比较得出两个值中的较小值。调用格式为:min(k),max(k),min(k1,k2),max(k1,k2)
length命令:此函数可以计算出向量的长度。调用格式为:length(f)。
ones函数:这是MATLAB中一个常用的函数,它产生元素全部为1的矩阵,本文中用此函数来表示离散阶跃序列,或者定义连续的门信号,调用格式为:n=0:5;ones(1,n)表示长度为整数n的阶跃序列。k=1:p:8;ones(1,length(k))表示长度为k的门信号。
subplot命令:在MATLAB绘图过程中,有时候为了便于观测图形的变化,需要在一幅波形显示窗口显示多个信号的波形,这时可以调用subplot命令。调用格式为:subplot(n1,n2,k),表明把一个图形分成了n1
n2块,在第k块上绘制波形。

2.MATLAB中信号的表示-- MATLAB中一般用向量表示信号

(1)连续时间信号

连续时间信号,从严格意义上来讲,MATLAB并不能处理连续信号,而是用连续信号在等时间间隔点的样值近似表示,当取样时间间隔足够小时,离散的样值能较好地近似出连续信号。所以,对于连续时间信号f(t),是用两个行向量f和t来表示,其中向量定义为:t=t1:dt:t1,t1为信号起始时间,t2为终止时间,为时间间隔。向量f为连续信号f(t)在向量所定义的时间点上的样值。比如:连续时间信号f(t)=cos(t),可用MATLAB语言表示为:
t=-5:0.1:5; f=cos(t);
用上述向量对连续信号表示后,可用plot命令其时域波形。命令如下:plot(t,f),则信号的波形如图1.3所示。
在这里插入图片描述

                                                图1.3 的波形

(2)离散时间信号

离散时间信号一般用f(k)表示,变量k为整数,代表离散的采样时间点。利用MATLAB表示离散序列f(k)时,也利用两个向量表示,其中一个向量表示自变量k的取值范围,另一个向量表示序列f(k)的值。
比如序列f(k)={2,2,2,-1,3,0,2;k=-2,-1,0,1,2,3,4}可用MATLAB表示为:
k=-2:4;f=[2,1,2,-1,3,0,2]
此离散时间序列的波形可利用MATLAB函数stem(k,f)画出,如图1.4所示。
在这里插入图片描述

                                            图1.4  f(k)的波形图

3.信号的基本运算

信号的基本运算是指信号的时移、信号的折叠、信号的加、信号的乘等。许多复杂信号就是通过简单信号的基本运算得到的,其中信号的时移、反折和尺度变换在以后的实验介绍。

(1)信号的加减

信号加就是在相同的时间点上将两个或多个信号进行相加。对于连续时间信号,其两个信号的相加可表示为:
y(t)=f1(t)+f2(t)
在MATLAB中,是取连续信号的离散值来进行加的,所以与离散时间信号在MATLAB中的计算方法一样,其MATLAB实现为
y=f1+f2
这两要求f1和f2的长度相同,位置对应,才能进行加法运算,若二者对应变量上的长度不等,则需要根据情况对信号左右补零再进行相加。

(2)信号的乘法

信号的乘就是在相同的时间点上将两个或多个信号进行相乘。两个连续时间信号相乘其数学表达式为
y(t)=f1(t)*f2(t)
对于离散时间信号,其信号f1(k)和f2(k)相乘是指同一时刻两信号的值对用相乘,可表示为
y(k)=f1(k)*f2(k)
其MATLAB实现为 y=f1.*f2
这里也要求两信号的长度必须相等,不等则必须对信号左右补零才能相乘。

四、示例演示

1.基本信号的波形

利用MATLAB软件的信号处理工具箱(Signal Processing Toolbox)中的专用函数产生信号并绘出波形。

(1)正弦信号

正弦信号在MATLAB中用 sin
函数表示。

程序如下:
% Program1.1.m
t=0:0.01:3pi;
y1=sin(2
t);
y2=cos(2*t);
plot(t,y1;t,y2)
其结果如右图所示。
在这里插入图片描述

(2)抽样信号 抽样信号Sa(t)=sin(t)/t

在MATLAB中用 sinc 函数表示。
定义为
% Program1.2.m
t=linspace(-5,5); %t取值的范围
f=sinc(t); %产生sinc函数
plot(t,f)
grid on
在这里插入图片描述

(3) 指数信号

在MATLAB中用exp
函数表示。
% Program1.3.m
t= -2:0.5:2;
y=exp(-t);
plot(t,y); %绘出连续值
hold on;
stem(t,y); %绘出离散值
在这里插入图片描述

(4)单位阶跃信号

% Program1.4.m
t=-10:10;
x=((t-0)>=0);
stem(t,x);
hold on;
plot(t,x,’r’);
在这里插入图片描述

或者在matlab里自编一个函数,以后的实验中用的自编函数是heaviside()
function f=heaviside(t)
f=(t>0);

(5)单位冲激序列

或者单位脉冲序列的表达式:
在这里插入图片描述
延迟ks的单位脉冲序列表达式:在这里插入图片描述

% Program1.5.m
k=-10:10
x=(k0);
t=-10:0.01:10;
x1=(t
0);
stem(k,x); %单位冲激序列
hold on;
plot(t,x1,‘r’) %单位冲激函数在这里插入图片描述

或者在matlab里自编一个函数,自编函数名为jyxl()
function x=jyxl(n)
x=(n>=0)
或者
 %单位脉冲序列m文件
  clear
k0=0; kf=10; ks=3; %本例取ks=3,
k1=k0:kf;
x1=[zeros(1,ks-k0),1,zeros(1,kf-ks)]; %单位脉冲序列的产生
stem(k1,x1,’.’);title(‘单位脉冲序列’)%绘图

(6) 三角信号

三角信号在MATLAB中用 tripuls 函数表示。
调用格式为 ft=tripuls(t,width,skew),产生幅度为1,宽度为width,且以0为中心左右各展开width/2大小,斜度为skew的三角波。width的默认值是1,skew的取值范围是-1~+1之间。一般最大幅度1出现在t=(width/2)*skew的横坐标位置。
% Program1.6.m
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft); grid on;
axis([-3,3,-0.5,1.5]);

(7)复指数信号

*调用格式是f=exp((a+j*b)t)
% Program1.7.m
t=0:0.01:3;
a=-1;b=10;
f=exp((a+j*b)*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(‘相角’)

(8) 矩形脉冲信号

矩形脉冲信号可用rectpuls函数产生
调用格式为y=rectpuls(t,width),幅度是1,宽度是width,以t=0为对称中心。
% Program1.8.m
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;

2.信号的运算

(1)绘出连续序列f(t)=exp[(-0.1+j0.5)t]的实部信号、虚部信号、振幅信号、相位信号。

% Program1.9.m
clear all
t=-5:5;
x=-0.1+0.5j;
f=exp(x
t); %给出复指数信号
real_f=real(f); %取复指数信号的实部
imag_f=imag(f); %取复指数信号的虚部
mag_f=abs(f); %取复指数信号的振幅
phase_f=angle(f); %取复指数信号的相位
subplot(2,2,1);
plot(t,real_f);
xlabel(‘t’);title(‘实部’);
subplot(2,2,2);
plot(t,imag_f);
xlabel(‘t’);title(‘虚部’);
subplot(2,2,3);
plot(t, mag_f);
xlabel(‘t’);title(‘振幅’);
subplot(2,2,4);
plot(t,phase_f);
xlabel(‘t’);title(‘相位’);
其程序运行结果如图1.5所示。
在这里插入图片描述

                                       图1.5 信号的不同分量

(2)两个序列的加、乘运算

% Program1.10.m
clear all
t=0:0.01:2;
f1=2.^(-3t);
f2=0.7
sin(4pit);
f3=f1+f2;
f4=f1.f2;
subplot(2,2,1);plot(t,f1);title(‘f1(t)’);grid on;
subplot(2,2,2);plot(t,f2);title(‘f2(t)’);grid on;
subplot(2,2,3);plot(t,f3);title(‘f1+f2’); grid on;
subplot(2,2,4);plot(t,f4);title('f1
f2’); grid on;
其运行结果如图1.6所示
在这里插入图片描述

                                                     图1.6  信号的运算

五、实验内容

1.验证实验原理中程序

2.画出信号波形(1) (2)

3.自选二个简单的信号进行加减和乘法运算。

(1).用matlab实现f=f1(t)+f2(t)及 f=f1(t).f2(t)

程序如下…
clear all;
t=0:0.0001:5;
f1=(-t+4);
f2=stepfun(t,0)-stepfun(t,4);
f3=f1.*f2;
f4=f1+f2;
subplot(2,1,1),plot(t,f3),title(‘f1.f2’)
subplot(2,1,1),plot(t,f3),title(‘f1+f2’)
运行结果如下
在这里插入图片描述

(2).用matlab实现在这里插入图片描述

程序如下…
t = -10:10;
t0 = 0;
m = 2-exp(-2*t);
n = stepfun(t,t0);
y = m.*n;
stem(t,y);
hold on
plot(t,y,‘r’);
运行结果如下
在这里插入图片描述

(3).用matlab实现在这里插入图片描述

程序如下…
t = -10:10;
t0 = 0;
f1 = (1+cos(pi*t));
f2 = stepfun(t,t0)-stepfun(t,t0+2);
y = f1.*f2;
stem(t,y);
hold on
plot(t,y);
运行结果如下
在这里插入图片描述

六、实验报告要求

1.简述实验目的及实验原理。

2.对实验内容编写程序(M文件),绘出运算后信号的波形.

3.写出实验中的体会。

这是信号课的第一次实验,第一次的学习都是较为困难的,没有MATLAB软件,没有实验经验,不懂如何进行程序设计。面对种种问题,我放平了心态,认认真真地听老师讲课,课下自己用心钻研。学会了学习使用MATLAB产生基本信号,绘制信号波形,实现信号的基本运算,为接下来的信号分析和系统设计奠定了基础,收获颇多。我相信,自己的不懈努力,定会使我的实验动手能力和对信号的理解层次能够更上一层楼。

猜你喜欢

转载自blog.csdn.net/qq_45696377/article/details/109909420