热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

实验一、熟悉MATLAB环境和基本信号的产生与运算一、实验目的二、实验器材三、实验原理1、MATLAB简介(1)

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

    • 一、实验目的
    • 二、实验器材
    • 三、实验原理
      • 1、 MATLAB简介
        • (1)MATLAB的桌面系统
        • (2)实验中常用的MATLAB函数命令
      • 2.MATLAB中信号的表示-- MATLAB中一般用向量表示信号
        • (1)连续时间信号
        • (2)离散时间信号
      • 3.信号的基本运算
        • (1)信号的加减
        • (2)信号的乘法
    • 四、示例演示
      • 1.基本信号的波形
        • (1)正弦信号
        • (2)抽样信号 抽样信号Sa(t)=sin(t)/t
        • (3) 指数信号
        • (4)单位阶跃信号
        • (5)单位冲激序列
        • (6) 三角信号
        • (7)复指数信号
        • (8) 矩形脉冲信号
      • 2.信号的运算
        • (1)绘出连续序列f(t)=exp[(-0.1+j0.5)t]的实部信号、虚部信号、振幅信号、相位信号。
        • (2)两个序列的加、乘运算
    • 五、实验内容
      • 1.验证实验原理中程序
      • 2.画出信号波形(1) (2)
      • 3.自选二个简单的信号进行加减和乘法运算。
        • (1).用matlab实现f=f1(t)+f2(t)及 f=f1(t).f2(t)
        • (2).用matlab实现![在这里插入图片描述](https://img-blog.csdnimg.cn/20201121222031822.png#pic_center)
        • (3).用matlab实现![在这里插入图片描述](https://img-blog.csdnimg.cn/20201121222134437.png#pic_center)
    • 六、实验报告要求
      • 1.简述实验目的及实验原理。
      • 2.对实验内容编写程序(M文件),绘出运算后信号的波形.
      • 3.写出实验中的体会。

一、实验目的

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产生基本信号,绘制信号波形,实现信号的基本运算,为接下来的信号分析和系统设计奠定了基础,收获颇多。我相信,自己的不懈努力,定会使我的实验动手能力和对信号的理解层次能够更上一层楼。


推荐阅读
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 本文介绍了一个视频转换软件MyVideoConverter,该软件支持将mpg转换成swf格式,支持多种格式的转换,转换速度快,还能转换成3GP格式,同时具有音频分离提取功能。欢迎使用MyVideoConverter进行视频转换和音频提取。 ... [详细]
author-avatar
mobiledu2502920897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有