MATLAB Simulink 中的过零检测与代数环

本文介绍了MATLAB Simulink中的过零检测技术,用于定位动态系统的不连续点,提高仿真效率。过零检测在双积分器单弹球系统中展示其作用,通过实例解释了如何处理过零事件和代数环问题,以避免仿真错误和过早停止。此外,还提供了避免过零错误的方法,如增加连续过零数量、调整算法和禁用特定模块的过零检测。
摘要由CSDN通过智能技术生成

本次教程基于 MATLAB R2020a

1 一般定义

过零检测指的是在交流系统中,当波形从正半周向负半周转换时,经过零位时,系统作出的检测。可作开关电路或者频率检测。

2 MATLAB中的过零检测

当SIMULINK仿真一个动态系统的时候,其在每一个时间步使用过零检测技术来检测系统状态变量的间断点。如果检测到不连续的点(前后两个采样点的值变化大),则找到发生不连续的精确时间点,并且在该时间点前后增加附加的时间步(缩小采样步长)

即:可变步长求解器可动态调整时间步大小,使其在某个变量缓慢变化时增加,在该变量迅速变化时减小。此行为使求解器在不连续点的附近执行许多小的时间步,因为该变量在此区域中迅速变化。这可以提高精确性,但可能会导致过多的仿真时间。

作用: Simulink使用过零检测技术来精确定位不连续点,以免仿真时步长过小导致仿真时间太长,一般情况下能够提高仿真速度,但有可能使得仿真到达规定时间长度之前就停止。当采用变步长解算方法仿真时,如果遇到步长自动变得很小导致仿真时间很长或基本没有进度,可以考虑勾选开启过零检测功能。

一句话概括: Simulink® 使用一种称为过零检测的技术来准确定位不连续性,无需借助于过小的时间步。通常这种方法可以缩短仿真运行时间,但它可能会导致某些仿真在预期完成时间之前停止。

——Mathworks 中国

详细可参考:https://ww2.mathworks.cn/help/simulink/ug/zero-crossing-detection.html

2.1 Simulink中过零检测的工作原理

一个模块能够通过Simulink注册一些列的过零变量,每一份变量就是一个状态变量(含有不连续点)的函数。当相应的不连续发生之后,过零函数从正值或负值传递零值。每一个仿真步结束时,Simulink通过调用每一个注册了过零变量的模块来更新变量。然后Simulink检测是否有变量的符号发生改变(相对于上一仿真时间点的结果),如果有改变就说明当前时间步有不连续发生。如果检测到零点, Simulink 就会在每一个发生符号改变的变量的前一时刻值和当前值之间插入新值以评估过零点的个数,然后逐步增加内插点数目并使其值依次越过每一个过零点

2.2 代数环

详细请参考:https://ww2.mathworks.cn/help/simulink/ug/algebraic-loops.html

在数字计算中,输入信号决定输出信号,同时输出信号也决定输入信号,由于数字计算的时序性,导致没有输出信号无法计算输入信号,没有输入信号又反过来无法计算输出信号,形成一个死锁(deadlock)或死循环,这就是代数环。

在 Simulink® 模型中,当存在信号环并且信号环中只存在直接馈通模块时,将出现代数环直接馈通表示 Simulink 需要模块输入信号的值来计算当前时间步的输出。这种信号循环会在同一时间步中产生模块输出和输入的循环依存关系。这会导致一个需要在每个时间步求解的代数方程,从而增加仿真的计算成本。

—— Mathworks 中国

简单地说,代数环其实就是一个输入信号包含输出信号,同时输出信号也包含输入信号的特殊反馈回路。在Simulink 中,这是由于直通模块(无延时的模块)的原因造成的,Simulink 中大部分的模块都是直通模块,因此很容易形成代数环。在整个回路中,只包含直通模块就会形成代数环,反馈回路有延时模块就会消除代数环。

示例:

在这里插入图片描述

上图是代数环的一个示例。Sum 模块是一个代数变量 x a xa

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值