当前位置: 首页 > article >正文

Simulink中Matlab function使用全局变量

目录

  • 一. 引言
  • 二. 普通Matlab function使用全局变量
  • 三. Simulink中的Matlab function使用全局变量
  • 四. 如何利用Matlab function的全局变量施加随机噪声

一. 引言

最近发现了之前仿真中的一个问题,记录一下备忘。

Matlab function中有时候需要用到全局变量,其用法较为简单,而Simulink中的Matlab function全局变量用法稍复杂一点,按照步骤来即可,但第一次用还是需要一个详细教程,以免出错。

二. 普通Matlab function使用全局变量

普通Matlab function全局变量定义:

function W = weight(m)
global GG;
W = m * GG;

将上述代码保存成文件weight.m.

注意调用的时候也要声明全局变量:

global GG;
GG = 10;
a = weight(4)

三. Simulink中的Matlab function使用全局变量

详细的多种用法参考这篇文章: Simulink高级应用—— Matlab Function中共享或使用全局变量或全局数据

这里只说其中一种用法,使用data sotre memory来实现全局变量共享。

比如我这里要给控制器输出端加一个噪音信号,用Matlab function,就可以定义为时间的函数。

在这里插入图片描述
1. MATLAB Function的代码中 声明全局变量

考虑最简单的情况,t=5s时加一个幅值为noise_amp的噪音,定义:

function y = fcn(t)
global noise_amp;
if t > 5
    y = noise_amp;
else 
    y = 0;
end

2. MATLAB Function 注册全局变量

在MATLAB Function的代码编辑界面,点击Edit Data

点击

点击Add Data,成功添加一个变量,命名为noise_amp(与代码中的必须一致)。变量类型由input改为data store memory

在这里插入图片描述
3. Simulink中添加 Data Store Memory模块

从library中拖入或直接在空白页面输入Data Store Memory,添加一个Data Store Memory模块。命名与Matlab function中一致,必须设置好明确的数据类型,不能为auto(比如我设置成double)。设置信号的类型(real)和初始值。我这里设置的初始值0.3,即噪音幅值0.3

在这里插入图片描述

现在运行一下,结果如图所示。可以看到t=5s时直接在输出端叠加了一个0.3的噪音,之后在PID的调节下回到设置的期望值1。这样就仿真了一个脉冲形式的抗扰控制。

在这里插入图片描述

四. 如何利用Matlab function的全局变量施加随机噪声

上面是在某一时刻施加了一个噪音,现在我想以10Hz频率给输出端施加随机噪音(控制周期为0.001s, 1000Hz),应该怎么施加。

这个问题乍一看很简单,其实仔细想一想不是那么简单。比如下面这这么写就是错的:

function y = fcn(t,u)

if mod(1000*t,100) == 0   % 噪声频率为0.1s给一次, 仿真周期是0.001s
    y = 0.1 * (-1+2*rand);
else
    y = 0;
end

它仿真出来的是下图形式,每一次的噪音只在那一时刻起了作用,表现在输出信号上就是一个个的“尖刺”,实际上每一次施加的噪音都应该是持续性的,所以应该用累加形式。

在这里插入图片描述

正确的写法如下(新定义了一个全局变量noise,步骤参照前面):

function y = fcn(t, data1)

global noise;

if mod(1000*t,100) == 0   % 噪声频率为0.1s给一次, 仿真周期是0.001s
    y = noise + 0.1 * (-1+2*rand);
else
    y = noise;
end
noise = y;

这样子输出就是下面这样的,可以看到是连续信号(只演示原理,控制效果忽略~)。

在这里插入图片描述


http://www.kler.cn/a/393665.html

相关文章:

  • SpringBoot参数注解
  • LeetCode【0033】搜索旋转排序数组
  • 【OH】openHarmony开发环境搭建(基于windows子系统WSL)
  • 实现 MVC 模式
  • 【软件工程】一篇入门UML建模图(类图)
  • 丹摩征文活动|丹摩智算平台使用指南
  • 我们来学mysql -- EXPLAIN之select_type(原理篇)
  • Rocky9/Ubuntu使用pip安装python的库mysqlclient失败解决方式
  • C# 实现对指定句柄的窗口进行键盘输入的实现
  • C++研发笔记13——C语言程序设计初阶学习笔记11
  • MongoDB新版本安装配置教程(7.0.15版本-zip下载)
  • 构建Spring Boot编程训练系统:全面指南
  • springboot初体验
  • [Docker#5] 镜像仓库 | 命令 | 实验:搭建Nginx | 创建私有仓库
  • 加入GitHub Spark需要申请
  • Hive基础
  • JUC学习笔记
  • 零基础Java第十六期:抽象类接口(二)
  • 【NLP】2024 年十大 RAG 框架 Github
  • Redis设计与实现 学习笔记 第十七章 集群
  • 2024 kali操作系统安装Docker步骤
  • 【论文复现】交通路口智能监测平台实现
  • Ajax 获取进度和中断请求
  • 华为OD机试真题-仿LISP计算
  • GitHub每日最火火火项目(11.14)
  • 服务器硬件介绍