由本人亲自进行实测的MATLAB/Simulink R2024b以及Ansys Twin Builder, 曾遭遇过仿真结果跟实测数据之间偏差超出20%的巨大陷阱, 对于新手而言, 只要依照步骤一步步去操作,……
由本人亲自进行实测的MATLAB/Simulink R2024b以及Ansys Twin Builder, 曾遭遇过仿真结果跟实测数据之间偏差超出20%的巨大陷阱, 对于新手而言, 只要依照步骤一步步去操作, 便能够较为轻松地避开这类十分常见的问题。误差处理并非是什么玄之又玄的学问, 其核心要点在于模型参数的校准以及求解器的配置。
第一步 校准关键物理参数
Simulink模型打开之后, 在模型画布空白之处右键点击, 选择“Model Properties”从而进入“Parameters”选项卡。于你模型里找出核心物理参数, 像电机模型的阻尼系数或者电池模型的内阻那般。把参数初始值设定成厂家标称值的80%, 接着逐次递增5%来进行试算。每一次修改完毕, 点击“Run”按钮去执行仿真, 记录输出波形跟实测数据的偏差。
【新手需防】, 常见的报错情形成为着仿真成果出现极为强烈的震荡或者呈现出发散的状况。其核心的缘由在于所设定的参数初始值与实际的工况相脱离。快速的解决方式是先将模型里的闭环反馈环节予以断开, 借助开环测试来确定基准参数所能涵盖的范围, 接着再逐步地接入反馈。
第二步 调整求解器类型与步长
于Simulink的菜单栏之处, 挑选“Simulation”其下的“Model Configuration Parameters”。于“Solver”的面板里头, 把“Type”自默认的“Variable-step”转变为“Fixed-step”。把“Fixed-step size”设定成物理系统之最小时间常数的1/10。举个例子, 要是你的系统当中最小的时间常数是0.01秒, 那就会将步长设定为0.001秒。这样一种固定步长的设置能够防止变步长求解器在快速变化的区间出现过度的插值误差。
这里存在一组实操方案的对比情况, 其中涉及, 对于电力电子这种快速进行开关动作行为的系统而言, 采取固定步长并配合欧拉法所产生的效果是良好的;然而,对于机械振动这种呈现连续特性特点的系统来讲, 采用变步长并配以ode45的方式反而会更加精准。其取舍所依据的逻辑是清晰明确的, 具体为, 如果主要是对稳态情形下的精度予以关注, 那么就使用变步长;要是对于瞬态过程中出现的过冲细节加以关注, 那就采用固定步长。
新手需避坑, 常会碰到“Simulink cannot solve the algebraic loop”这样的报错, 其原因是在固定步长的情况下代数环没办法收敛, 要快速解决的话, 可以在模型当中插入一个“Memory”模块以此切断代数环, 或者把步长再缩小一个数量级去尝试一下。
第三步 加载实测数据进行模型验证
于MATLAB工作区构建一个结构体变量, 比如说TestData.time以及TestData.signals.values, 把实际测量得到的数据引入进去。接着在Simulink模型里添加“From Workspace”模块, 将变量名称设定为TestData。进行一回仿真运行, 于“Scope”模块之内同时展现仿真输出跟实测波形, 留意关键拐点处的误差峰值情况, 要是误差聚集于某个频率段, 便在模型相匹配环节添加一个低通滤波器。
【新手需防入坑】, 高频出现报错“Index exceeds matrix dimensions”, 一般是因为实测得到的数据采样率, 跟仿真时设定的步长并非相互匹配所致。具体的完整解决流程如下, 首先要运用resample函数, 把实测数据进行重采样, 使其达到与仿真步长相同的状态, 举例来说, 就像TestData_resampled = resample(TestData, newFs, oldFs)这样, 然后再把经过重采样操作之后的数据输入到模型当中。
话说到最后, 有这样一套方法, 它在定频工作的系统里, 所呈现出来的效果是极为显著的, 然而, 对于那些存在随机负载的系统, 或者是处于极端非线性状态的系统, 就好比电弧模型, 又或者是碰撞仿真这类情况而言, 想要进行误差修正依旧是困难重重的。面对这样的状况, 给出的建议是改换使用遗传算法呀等诸如此类的全局优化工具, 去针对模型参数展开批量寻优的操作, 而并非是依靠手动方式逐个依次进行调整。
微信扫一扫
还没有评论呢,快来抢沙发~