如何在Simulink查找表中使用cftool中的3D表面数据?

时间:2018-08-20 20:02:49

标签: matlab 2d lookup simulink

我正在设计一个电池模型,该模型的内部电阻取决于两个变量:SoC和温度。

我已经使用MATLAB的曲线拟合工具箱对我拥有的数据(基本上x,y和z-总共131个点)进行了插值,并且能够生成所需的依赖关系的3D地图(请参见下图):< / p>

data in matlab's curve fitting toolbox

我的问题是我现在如何在Simulink模型中使用该地图?作为输入参数,我将拥有SoC和温度,以欧姆为单位的电阻应为输出。但是,我还没有找到在Simulink中将数据导出到合适的查找表中的便捷方法(或者类似地有用,我的第一个猜测是在这种情况下我应该使用2D查找表)。但是,我对此很陌生,我不知道如何为Simulink LUT生成表数据。

Simulink LUT:

2 个答案:

答案 0 :(得分:0)

表数据是您通过曲线拟合插入的z数据。我想它将对每个断点组合都有一个值(即,它覆盖了您第一个图中的每个网格交叉点)。因此,如果断点1为100个元素,断点2为40个元素,则表数据为100x40。

如果无法从基于GUI的交互式曲线拟合中获取数据,我想您可以从命令行中提取数据。以下是Mathworks曲线拟合文档的摘录。最好进行验证,因为我没有工具箱来进行测试。

•插值:fitmodel = fit([时间,温度],能量,'三次插值');
•评估:fitmodel(80,40)

根据您的LUT输入u1和u2,该表将对网格进行内插或外推以获取输出值。

希望有帮助。

答案 1 :(得分:-1)

我毕竟找到了解决方案,感谢汤姆的帮助,fittedmodel()函数确实是它的关键。然后,我使用了两个FOR循环来填充cftool插值后的49x51矩阵(如图中的网格所示)。之后,将我的T和SoC参数的z值填充到我的矩阵中,这完全是两个for循环。

interpolated figure

for x = 1:49
for y = 1:51
    TableData(x,y)=fittedmodel(B_SoC(x),B_Temp(y));
end
end

其中TableData是我的LUT所需的49x51矩阵,B_SoC和B_Temp分别为[0:2.083:100]和[-10:1.1:45](确定为我的x和y轴的所需起点和终点,与数据游标之间的距离)。