一种新的N维查找表实现方法

泄露秘密 提交于 2020-03-07 02:11:36

注:此为论文读书笔记
英文论文原名为:《A new Implementation of the N-D Lookup Tables》
由于笔者英文水平不咋地,先翻译了一遍。

摘要

 HDF5Table库是一个开源的解决方案,用于系统仿真中典型数据集的有效处理、交换(exchange)和插值(interpolating)访问。该库由C函数、Python脚本和示例组成,可以与Modelica或Simulink等不同的应用程序一起使用。此外,还提供了一套允许用户创建,迁移,编辑,比较和管理数据集的综合工具。
 应用范围包括从测量或其他仿真中导入数据,在预处理例程中集成数据集,在仿真中使用数据集以及对仿真结果进行后处理。为了消除(eliminate)仿真工具或不同公司之间的数据交换后的主要误差源,并验证数据集,每个数据集可以附加物理单位和数量。可以使用不同的内插和外插方法轻松访问表数据。 为了保存(persist)和交换数据集,使用了HDF5标准的子集。 使用HDF5 API,大型文件的数据访问速度很快,其中包含多个变量,包含数百万个值,并且可以在许多其他工具中打开数据集。

关键字:HDF5; 查找表; 单位和数量安全; 插值 外插法

摘要介绍了一个叫HDF5表的标准库,看他的意思,这个库很厉害。

1 简介

查找表通常在工业仿真中起主要作用。它们被广泛用于物理模型或参数不可用或现有模型的评估计算过于昂贵的广泛应用中。在这些系统中,查找表被用来重放测量值以及预处理和后处理测试工作台记录的刺激。 另一个应用是从长时间运行的系统或有限元模拟计算查找表。
对于Modelica和其他仿真平台存在一些解决方案,其中一些将在下一节中详细讨论。所有这些解决方案都有不同的局限性和问题,本文提出的实现和一组支持工具正试图解决这些问题。

2 现有解决方案

Modelica标准库(MSL)在其模块包中提供了许多表。 基于所提供的输入功能进行分离。这里的前缀combi显示了表的功能,可以从Modelica环境中以参数的形式直接接受用户输入,或者从文件中读取数据。在工业应用中,第二种选择几乎是单独使用的,因为即使对于中等大小的表,它也更方便。
提供了满足不同需求的表块,因此将其分为Blocks.Sources和Blocks.Tables包。将源包中的表隐式地分离到包中定义表的单个输入为模拟时间。这些表主要用于回放记录的连续刺激,例如随时间控制输入或速度信号。 由于这些表具有单个输入,并且非常适合时间序列仿真,因此不在本文讨论范围之内。
这将通向Blocks.Tables包。 这些表通常用来涵盖无法以合理的努力或性能基于物理建模的效果。因此,根据输入数量的不同,使用表来近似行为。同样,对于Block.Tables中的表,输入的数量被限制为一到两个,这在许多应用中成为一个限制因素。因此,Dymola提供了包含TableND的数据文件包,TableND将输入的数量扩展到理论上的无限量。如缺少的前缀所示,只能从.mat文件读取数据。 DataFiles软件包包含许多功能,这些功能支持用户生成必要的.mat文件。 此外,还提供了一些Matlab脚本来支持数据存储过程。
现在,对于Dymola用户而言,乍一看,就有可能使用MSL的Tables包或Data-Files包在其模拟中拥有功能强大的表。 TableND的数据格式仅限于版本4的 .mat文件,该文件将文件中的名称限制为19个字符,并且–这里更有趣的是–将文件中存储的可能维度的数量限制为2个。因此,多维表格不能以其自然格式存储,而必须进行转换。通过传统的DIM、GRID和TABLE生成三个向量来解决这个问题。矢量DIM的长度等于表的维度数,每个条目指示该维度中的比例值的量。在可变的“网格”中,存储了所有维度的比例,这意味着网格的长度必须等于所有元素的总和。最后,在表变量中,多维表的所有值都存储在一个向量中。所有这些都使得在没有自定义转换脚本的情况下很难解释表中的值。
该解决方案的另一个缺点是CombiTables和TableND在进行外推时的不同行为。 而CombiTables是线性推断的,TableND在离开定义的区域时可使值保持恒定。对于3.2.1版的MSL,已经完成了使MSL表实现开源并增强其功能的工作。 新功能包括现在可以对表的输出进行一次区分,并且支持更新的.mat文件格式[7]。仍然对前面提到的限制因素没有任何影响,因为这仅对包含在其中的表有效 MSL。

这里讲的我没看懂,不知道在说啥。这些包和库我都没使用过。只能先硬着头皮看下去了。

3 新实现的目标

提出的实施方案的目标是提供一个库,该库提供现有解决方案功能的超集,该功能是完全开源的,并配有完善的工具集,以利用其功能并简化从现有解决方案的转换。 由于表格可以轻松地移植到其他仿真平台(例如Simulink,CarMaker)或集成到基于C的定制解决方案中,因此表格和工具的可能应用范围超出了Modelica模型。 由于可以从仿真工具中独立使用数据,因此将模型和数据分离的概念带入了更高的层次。
此外,Modelica的基本概念之一即单位和数量安全适用于基于表的数据。 每个数据集,无论其尺寸如何,都可以附加一个物理单位和数量(以及其他属性),这使得表块在加载时可以验证数据,并消除由不兼容数据引起的错误的主要来源 该库的未来版本也将能够记录来自模拟的信号并提供对“内置”数据的支持,这对于没有文件系统或保护其中包含的知识产权的平台特别有用。 数据。

4 功能

为了为所有基于表的数据的使用提供一站式解决方案,表块功能提供了不同的内插和外推采样数据的方法,以下各节将简要介绍这些方法。

4.1 内插(Interpolation)

一般来说,模型中表格的两个主要用途可以区分:第一个是记录的连续刺激的回放,例如 操纵输入或类似离散数据的总线事件。 两种类型通常都是一维的,并且时间为横坐标。表格的第二个主要用例是在无法进行物理建模的模型中,因此无法使用测量的数据来近似其行为或过于复杂而无法进行仿真,例如 在实时环境中。 这些基于表的模型通常依赖于多个参数,因此需要多维表。 在这两种类型的表中都可以找到的一个突出示例是硬件在环中测试。
HDF5Tableblock提供了三种可以根据每个实例配置的插值方法:“Hold”,“Linear”和“ Akima”
“Hold”将简单地返回相应维度中的前一个值,并可用于回放插值没有意义的时间离散数据,例如车辆中选定的档位。
“Linear”在每个维度的相邻采样点之间线性进行线性插值。
“Akima”使用Akima[5]提出的基于样条的插值方法,其中插值函数通过采样点,其一阶导数是连续的。

这对在计算中使用导数的模型的稳定性具有积极影响。 图1显示了应用于一维数据集的三种插值方法,该方法具有正弦函数的六个等距采样点。
在这里插入图片描述

这里倒是看懂了点。

4.2 外插(Extrapolation)

Five methods are provided for extrapolation:

  • Hold
  • Linear
  • Loop
  • PingPong
  • None

类似于插值“Hold”,只是重复各个维度中的最后一个采样值。“Linear”使用最后两个样本进行线性推断。 对于时间序列的回放,通常希望无限重复给定的一组样本。 “Loop”使用选定的插值方法重复记录信号。
“PingPong”方法的工作原理与循环方法类似,但不是从头开始,而是沿相应的轴来回移动。该方法对于用于具有对称特征场的设备(如电机)的查找表特别有用。 为了更好地理解此方法,请考虑以下永磁同步电机(PMSM)的损耗特性示例,其中功率损耗与转速的关系为横坐标,转矩为纵坐标。 PMSM共有三种不同类型的查找表:第一象限,第一象限和第二象限以及与四个电动机,电动机和发电机以及电动机和发电机对应的正向和负向旋转的所有四个象限。使用“PingPong”方法时,一个表块可以用于所有三种类型的表,而无需在模型内部进行条件实例化或附加逻辑。图2显示了具有四个等间隔且线性增长的样本的一维数据集的五种方法的外推曲线。
在这里插入图片描述
当请求值超出表的范围时,外推方法“None”将禁用外推并引发错误

5 HDF5文件结构

为了有效地存储和交换表的数据,使用了HDF5标准的子集。 每个表都存储为Float64类型的n维数据集。 每个维度的比例都存储为单独的数据集。 对于每个维度,使用HDF5维度比例尺API [3]将一个比例尺数据集附加到表格数据集。
为了存储元数据,例如物理单位和数量,已定义了一组属性,在读取数据集时会对其进行评估。 下表列出了属性名称以及所需的数据类型和示例值。
11
QUANTITY和UNIT表示存储数据的物理量和单位。 DISPLAY_UNI是用于向用户显示值的单位,例如 在编辑它们时。 用于表示单位和数量的文字与Modelica中相同,可以在MSL的Modelica.SIunits和Modeli-ca.SIunits.Conversions.NonSIunits程序包中找到。
比例必须始终是一维的且严格单调递增,并且每个维度最多只能附加一个长度与相应维度中的数据集范围相匹配的比例。
对于扩展为2×3×4的三维数据集,第二维的比例必须正好有三个值。用户可以添加自定义属性和数据集来存储附加的元数据、文档或结果,并使用组[6]来组织数据集。

6 Modelica

HDF5Table Modelica库以.mo文件的形式提供,其中包含块,函数和示例,以及C头文件和表的预编译对象库,以及HDF5作为现成的软件包。 以下各节详细介绍了Modelica功能和块。

6.1 功能

为了直接从HDF5文件读取标量、矢量和矩阵以及向HDF5文件写入标量、矢量和矩阵,该库包括以下函数,这些函数类似于Dymola附带的数据文件包中的readMAT*/writeMAT*函数:

  • writeVector
  • writeMatrix
  • attachScale
  • readScalar
  • readScalarChecked
  • readVector
  • readVectorChecked
  • readMatrix
  • readMatrixChecked
  • attachScale

函数的“checked”版本将预期的单位和数量作为附加参数,如果参数与加载的数据集中存储的单位或数量不匹配,则返回错误代码。attachScale函数附加一个数据集作为另一个数据集的尺寸刻度。 所有功能均实现为外部C代码,可以链接到模型中,也可以使用仿真工具直接调用它,如下图所示。
该库还可以读/写更高维的数组(最多32个维)。 但是,输入更高维数组可能会很麻烦,因为例如Dymola不提供用于编辑多于两个维度的值的UI支持。

6.2 块

该库的核心是NDTableblock,它在模拟期间加载和内插数据。它将HDF5文件的文件名、数据集名称以及可选的数据集的预期单位和数量作为输入并缩放,并返回每个时间步长的内插值或外推值。图4示出了NDTable块的参数,该NDTable块具有为数据集设置的所有量和单位,该数据集将电机的功率损耗作为转速、扭矩和电源电压的函数。
DatasetRecorder块将标尺用作参数,并通过将实际标尺值应用于矢量输出来连续扫描标尺所跨越的体积。当在触发端口上检测到上升沿时,它将值记录在输入端口中并应用 输入下一组比例值,直到记录了体积中的所有样本。 使用此块表,可以生成大量的采样点,而无需重新启动仿真的开销,可以节省大量时间。
图5显示了RecordTable示例模型,其中DatasetRecorder块连接到一个虚拟模型,该模型具有三个输入端口,并且在触发器的每个上升沿都记录了其输出。

7 Matlab / Simulink

Matlab和Simulink是最常用的两种仿真和脚本编写环境。 因此,HDF5Table库还包含Simulink S-Function和Matlab脚本,允许用户在此平台上无需更改即可重用他们现有的数据集。
Simulink表块具有与Modelica库相同的内插法和外插法,并且底层S函数基于相同的C源,这在将依赖于实现的特定行为的模型移植到该平台时是一个主要优势。 就像Modelicalibrary一样,Simulink库是作为预编译的共享库提供的,可以在Simulink中立即使用。

8 Tooling

为了在仿真中利用表格,还配有一套完善的工具,可让用户创建,迁移,编辑,比较和管理数据集。 所有工具都包含在Eclipse发行版中,该发行版用作集成平台,但也可以单独获得和使用。这些工具包括一个基于matplotlib [8]和NumPy[9]的Python库,用于读取,编写,操作 并绘制可以使用PyDev环境从Eclipse内部直接调试和运行的数据[10]。 Python对大量数据格式的支持使用户可以根据提供的示例以最小的努力为现有数据编写导入和导出脚本。借助随附的Python脚本,Blocks使用的基于文本的文件和二进制数据文件。 数据文件块可以转换为HDF5。
图6显示了具有图形用户界面的示例Python脚本,该脚本允许用户创建与NDTable块一起使用的电机的特征图,并且可以用作自定义HDF5生成器或处理器的基础。
此外,还包括基于EMF [11]的编辑器,该编辑器使用户可以方便地查看,编辑和验证数据文件。 最后,可以对数据集进行比较,并与随附的EMF比较编辑器合并[12]。下图显示了HDF5编辑器,它查看带有比例尺的三维特征地图数据集的内容。
在编辑器中,值以“显示单位”显示,并且可以方便地输入为“ sin(pi / 4)”之类的表达式以获取45度角的正弦值,或以“ ones(2,3)”的形式获取2×3的矩阵 那些。
在编辑器中执行的所有操作(如复制,粘贴,移动,删除等)都可以通过标准快捷方式或菜单项撤消。支持拖放操作,以在组之间甚至文件之间移动数据集。

9 未来的工作

当前,该库是在Windows的Visual Studio 2010中开发的。 计划将库移植到下面列出的硬件和软件平台。
HardwarePlatforms:
•Windows 32 and 64 bit
•Linux 32 and 64 bit
•dSPACE SCALEXIO
dSPACE DS1006
Compilers:
•Microsoft compilers (VC6 and ≥ VS2005 (Win32 and x64))
•MinGW (GCC 4.4.0 and GCC 4.7.2)
•Cygwin (GCC 4.3.0)
•GCC 4.x on Linux
我们还计划进一步扩展该工具,并包括一个全面的文档和示例,以展示常识和最佳实践。该库的未来版本将包括附加的内插法和外推法(例如Akima方法的边界斜率外推法)和 支持内插值的Der()导数,以减少仿真时间并提高精度[1]。

10 结论

已实现的库及其扩展名表明,MSL的Blocks.Tables和DataFiles包中现有表的大多数功能都可以组合在一个表中,从而简化了用户的应用程序。 此外,基于单位和数量检查,可以大大降低整个仿真过程的易错性。使用HDF5和Modelica等开放标准可确保这种开源实现可扩展,并可针对包括更广泛应用在内的不同需求进行定制 工具支持:为快速适应提出的库,提供了一套工具,使用户能够快速生成新数据或迁移现有数据集

.ND查找表的新实现第十届国际Modelica会议论文集2014年3月10日至12日,隆德 ,瑞典DOI10.3384 / ECP14096885

文章里用的这些软件几乎都没有使用过,表的形式也不太清楚。本文应该是作者用了现有的软件和库自己做了一个比较通用的库。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!