主要内容

从已有的mdf文件中写入通道组数据到新的mdf文件

此示例演示如何处理记录在mdf文件的通道组中的数据,并将更新的数据写入新文件。本例中使用的mdf文件VehicleData.mf4包含来自两个通道组中的两个模拟的日志数据,但该示例只处理通道组2中的数据。

首先将数据从通道组2读入时间表,然后对数据副本执行后处理。最后,您将创建一个新的mdf文件,该文件具有与VehicleData.mf4,并将更新的数据作为一个新的通道组写入新的mdf文件。

打开MDF-File

控件打开对mdf文件的访问mdf函数。

mdfObj = mdf (“VehicleData.mf4”
mdfObj = MDF属性:mf4' Path: 'C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\michellw. mdf_bat_publish \vnt-ex28629694\VehicleData。“作者:“部门:”项目:“主题:”评论:“演示写入MDF文件的工作流程的示例文件。”版本:'4.10' DataSize: 2252350 InitialTimestamp: 2014-01-14 19:53:57.000000000 Creator Details ProgramIdentifier: 'MATLAB' Creator: [1×1 struct]文件内容附件:[1×1 struct] ChannelNames: {2×1 cell} ChannelGroup: [1×2 struct] Options转换:数值

检查关于两个通道组的详细信息。

mdfObj。ChannelGroup
ans =1×2带字段的struct数组:DataSize已排序的SourceInfo通道

读取包含元数据的通道组数据

方法从通道组2读取数据带有可选参数的函数IncludeMetadata设置为真正的.输出的时间表chanGrp2TT是通道组2中所有通道数据的副本。

changgrp2tt = read(mdfObj, 2, IncludeMetadata=true)
chanGrp2TT =92033×3的时间表时间气流燃料速率时间______________ _______ ________ __________ 0秒17.294 1.209 0 0.00056199秒17.263 1.209 0.00056199 0.0033719秒17.112 1.209 0.0033719 0.01秒16.316 1.1409 0.02 0.03秒15.907 1.1124 0.03 0.04秒15.546 1.0873 0.04 0.04秒15.546 1.0852 1.0652 0.055328 0.055328秒15.075 1.0652 0.055328 0.055328秒15.075 1.0652 0.055328 0.06秒14.949 1.0458 0.064672 0.07秒14.7071.0289 0.07 0.08 SEC 14.497 1.0143 0.08 0.09 SEC 14.317 1.0019 0.09

通道组2及其通道的元数据在时间表中作为自定义属性可用。通道组的元数据存储为整个表的时间表的自定义属性,属性名以“ChannelGroup”为前缀。单个通道的元数据存储为时间表变量的自定义属性,属性名以“Channel”为前缀。

查看通道组2和该组中所有通道的元数据。

chanGrp2TT.Properties.CustomProperties
ans = CustomProperties with properties: ChannelGroupAcquisitionName: "" ChannelGroupComment: "模拟发动机气体动力学。"ChannelGroupSourceInfo: [1×1 struct] ChannelDisplayName: ["" "" ""] ChannelComment: ["" "" ""] ChannelUnit: ["g/s" "g/s" "s"] ChannelType: [FixedLength FixedLength Master] ChannelDataType: [RealLittleEndian RealLittleEndian RealLittleEndian] ChannelNumBits: [64 64 64 64] ChannelComponentType:[无无无无]ChannelCompositionType:[无无无]ChannelSourceInfo: [1×3 struct] ChannelReadOption: [Numeric Numeric]

方法时请注意函数,IncludeMetadata被设置为默认情况下。因此,IncludeMetadata必须设置为真正的如果读取通道组数据的最终目标是将通道组和通道元数据写入一个新的通道组。

减少数据副本中的样本数量

创建一个堆叠的情节使用stackedplot在通道中可视化数据气流而且FuelRate

stackedplot (chanGrp2TT [“气流”“FuelRate”])

从叠加图中可以观察到的值FuelRate从大约182.17秒保持在0,直到在900秒记录结束,表明在测量过程中可能有故障。对于这个特定的应用程序,记录的值气流的值在哪里是无用的FuelRate是无效的。因此,您决定丢弃无效的数据样本FuelRate是零。

的最后一个“好”值的行索引FuelRate它是非零的。

lastNonZeroIdx =找到(chanGrp2TT。FuelRate ~= 0,1,“最后一次”
lastNonZeroIdx = 18634

减少通道组2中的数据样本数量,只保留从行索引1到的有效值lastNonZeroIdx

changgrp2tt = changgrp2tt (1:lastNonZeroIdx,:)
chanGrp2TT =18634×3的时间表时间气流燃料速率时间______________ _______ ________ __________ 0秒17.294 1.209 0 0.00056199秒17.263 1.209 0.00056199 0.0033719秒17.112 1.209 0.0033719 0.01秒16.316 1.1409 0.02 0.03秒15.907 1.1124 0.03 0.04秒15.546 1.0873 0.04 0.04秒15.546 1.0852 1.0652 0.055328 0.055328秒15.075 1.0652 0.055328 0.055328秒15.075 1.0652 0.055328 0.06秒14.949 1.0458 0.064672 0.07秒14.7071.0289 0.07 0.08 SEC 14.497 1.0143 0.08 0.09 SEC 14.317 1.0019 0.09

在数据副本中添加通道

空气流量除以燃料率得到空气燃料比,并将计算值赋给一个新的时间表变量AirFuelRatio

chanGrp2TT。AirFuelRatio = chanGrp2TT.AirFlow. / chanGrp2TT.FuelRate
chanGrp2TT =18634×4时间表时间气流FuelRate时间AirFuelRatio ______________ _______ ________ __________ ____________ 0秒17.294 1.209 0 14.304 0.00056199秒17.263 1.209 0.00056199 14.278 0.0033719秒17.112 1.209 0.0033719 0.02秒16.316 1.1729 0.01 14.303 0.02秒16.316 1.1409 0.02 14.301 0.03秒15.907 1.1124 0.03 14.3 0.04秒15.546 1.0873 0.04 14.298 0.05秒15.228 1.0652 1.0652 0.055328 14.152 0.055328秒15.075 1.0652 0.055328 14.152 0.055328秒15.075 1.06520.055328 14.152 0.06 SEC 14.949 1.0458 0.06 14.294 0.064672 SEC 14.832 1.0458 0.064672 14.182 0.07 SEC 14.707 1.0289 0.07 14.293 0.08 SEC 14.497 1.0143 0.08 14.292 0.09 SEC 14.317 1.0019 0.09 14.29

检查更新的通道元数据并注意失踪新添加通道的值。

chanGrp2TT.Properties.CustomProperties
ans = CustomProperties with properties: ChannelGroupAcquisitionName: "" ChannelGroupComment: "模拟发动机气体动力学。"ChannelGroupSourceInfo: [1×1 struct] ChannelDisplayName: ["" "" "" ] ChannelComment: ["" "" "" ] ChannelUnit: ["g/s" "g/s" "s" ] ChannelType: [FixedLength FixedLength Master missing] ChannelDataType: [RealLittleEndian RealLittleEndian missing] ChannelNumBits: [64 64 64 64 NaN] ChannelComponentType:[无无无缺失]ChannelComponentType:[无无无缺失]ChannelSourceInfo: [1×4 struct] ChannelReadOption: [Numeric Numeric missing]

自定义通道组和通道元数据

更新通道组注释,以提供关于对数据进行处理的信息。

chanGrpComment = chanGrp2TT.Properties.CustomProperties.ChannelGroupComment
changgrpcomment = "模拟发动机气体动力学。"
chanGrp2TT.Properties.CustomProperties。ChannelGroupComment = chanGrpComment +更新:删除了无效的样本,并添加了新的通道“AirFuelRatio”。

更新的通道注释气流而且FuelRate以提供有关通道的更多信息。可以使用变量index或变量名来索引到ChannelComment元数据。

chanGrp2TT.Properties.CustomProperties.ChannelComment (1) =“模拟记录的气流。”;chanGrp2TT.Properties.CustomProperties.ChannelComment (“FuelRate”) =“模拟记录的燃油率。”

为的添加通道注释AirFuelRatio

chanGrp2TT.Properties.CustomProperties.ChannelComment (4) =用空气流量除以燃料速率计算的空气燃料比。

检查通道元数据并注意中更新的值ChannelGroupComment而且ChannelComment.你可以离开失踪值,如果不需要自定义该特定元数据。稍后,在写入mdf文件时,将相应地应用默认值或派生值。

chanGrp2TT.Properties.CustomProperties
ans = CustomProperties with properties: ChannelGroupAcquisitionName: "" ChannelGroupComment: "模拟发动机气体动力学。更新:删除无效的样本,并增加了新的频道“AirFuelRatio”。ChannelGroupSourceInfo: [1×1 struct] ChannelDisplayName: ["" "" "" ] ChannelComment: ["Air flow logging from simulation."“模拟记录的燃油率。”用空气流量除以燃料速率计算的空气燃料比。] ChannelUnit: ["g/s" "g/s" "s" ] ChannelType: [FixedLength FixedLength Master missing] ChannelDataType: [RealLittleEndian RealLittleEndian missing] ChannelNumBits: [64 64 64 64 NaN] ChannelComponentType: [None None None missing] ChannelComponentType: [None None None missing] ChannelSourceInfo: [1×4 struct] ChannelReadOption: [Numeric Numeric missing]

创建一个新的mdf文件

在此步骤中,您将创建一个名为VehicleDataNew.mf4它具有与原始文件相同的文件元数据VehicleData.mf4

获取包含原始mdf文件元数据的结构VehicleData.mf4使用函数mdfInfo

信息= mdfInfo (“VehicleData.mf4”
信息=结构体字段:名称:“VehicleData。mf4' Path: 'C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\michellw. mdf_bat_publish \vnt-ex28629694\VehicleData。“作者:“部门:”项目:“主题:”评论:“演示写入MDF文件的工作流程的示例文件。”版本:'4.10' ProgramIdentifier: 'MATLAB' InitialTimestamp: 22-01-14 19:53:57.000000000创建者:[1×1 struct]附件:[1×1 struct]
信息。创造者
ans =结构体字段:VendorName: 'The MathWorks, Inc.' ToolName: 'MATLAB' ToolVersion: '9.12.0.1846952 (R2022a)预发布更新1' UserName: "评论:"

调用函数mdfCreate可选参数FileInfo设置为刚刚获得的结构。这将创建一个新的mdf骨架文件VehicleDataNew.mf4在具有相同文件元数据的磁盘上VehicleData.mf4

mdfCreate (“VehicleDataNew.mf4”, FileInfo =信息)
ans = "C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\michellw. mdf_bat_publish \vnt-ex28629694\ vehicledatanew . f4"

FileInfo是可选的名称-值对。如果未指定的,mdfCreate使用默认的文件元数据创建一个新的mdf骨架文件。

请注意,mdfCreate只将适用的元数据设置为新创建的文件。例如,字段像的名字而且路径特定于每个文件,因此函数会忽略它们。

检查文件元数据

确认mdfCreate调用正确应用文件元数据创建mdf文件mdfInfo再次检查文件元数据VehicleDataNew.mf4

infoNew = mdfInfo (“VehicleDataNew.mf4”
infoNew =结构体字段:名称:“VehicleDataNew。mf4' Path: 'C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\michellw. mdf_bat_publish \vnt-ex28629694\VehicleDataNew。“作者:“部门:”项目:“主题:”评论:“演示写入MDF文件的工作流程的示例文件。”版本:'4.10' ProgramIdentifier: 'MATLAB' InitialTimestamp: 22-01-14 19:53:57.000000000创建者:[1×1 struct]附件:[0×1 struct]
infoNew。创造者
ans =结构体字段:VendorName: 'The MathWorks, Inc.' ToolName: 'MATLAB' ToolVersion: '9.12.0.1846952 (R2022a)预发布更新1' UserName: 'michellw' Comment: "

将更新的数据写入新mdf文件中的新通道组

调用函数mdfWrite有财产GroupNumber未指明的。当这样使用时,themdfWrite函数将输入时间表追加到目标文件的末尾,作为一个新的通道组。因为VehicleDataNew.mf4此时是一个没有通道组的骨架文件,此操作写入chanGrp2TT进入信道组1。

mdfWrite (“VehicleDataNew.mf4”chanGrp2TT)
警告:时间表除了行时间之外,还有ChannelType为“Master”的变量“time”。每个信道组只允许一个主信道按时间同步。用于写操作的行次数和忽略此变量中的数据。

你会看到一个关于时间变量,因为时间数据已作为行时间和变量读入时间表时间.当除行时间外还包含时间数据的变量时,将忽略该变量。

检查数据

确认mdfWrite调用按预期更新mdf文件,打开访问VehicleDataNew.mf4读取包含元数据的数据以进行验证。

mdfObjNew = mdf (“VehicleDataNew.mf4”);

从包含元数据的新mdf文件中从通道组1读取数据。注意减少的样本数量和新的通道AirFuelRatio

changgrp1ttnew = read(mdfObjNew, 1, IncludeMetadata=true)
chanGrp1TTNew =18634×4时间表时间风流FuelRate AirFuelRatio时间______________ _______ ________ ____________ __________ 0秒17.294 1.209 14.304 0 0.00056199秒17.263 1.209 14.278 0.00056199 0.0033719秒17.112 1.209 14.154 0.0033719秒16.776 1.1729 14.303 0.01 0.02秒16.316 1.1409 14.301 0.02 0.03秒15.907 1.1124 14.3 0.03 0.04秒15.546 1.0873 14.298 0.04 0.05秒15.228 1.0652 1.0652 14.152 0.055328 0.055328秒15.075 1.0652 14.152 0.055328 0.055328秒15.075 1.065214.152 0.055328 0.06 SEC 14.949 1.0458 14.294 0.06 0.064672 SEC 14.832 1.0458 14.182 0.064672 0.07 SEC 14.707 1.0289 14.293 0.07 0.08 SEC 14.497 1.0143 14.292 0.08 0.09 SEC 14.317 1.0019 14.29 0.09

检查通道组和通道元数据

通过访问时间表自定义属性,从新的mdf文件中检查通道组1和该组中的通道的元数据。

chanGrp1TTNew.Properties.CustomProperties
ans = CustomProperties with properties: ChannelGroupAcquisitionName: "" ChannelGroupComment: "模拟发动机气体动力学。更新:删除无效的样本,并增加了新的频道“AirFuelRatio”。ChannelGroupSourceInfo: [1×1 struct] ChannelDisplayName: ["" "" "" ""] ChannelComment: ["Air flow logging from simulation."“模拟记录的燃油率。”用空气流量除以燃料速率计算的空气燃料比。""] ChannelUnit: ["g/s" "g/s" "" "s"] ChannelType: [FixedLength FixedLength FixedLength Master] ChannelDataType: [RealLittleEndian RealLittleEndian RealLittleEndian RealLittleEndian] ChannelNumBits: [64 64 64 64 64 64] ChannelComponentType:[无无无无无]ChannelCompositionType:[无无无无]ChannelSourceInfo: [1×4 struct] ChannelReadOption: [Numeric Numeric Numeric]

关闭MDF-Files

通过从工作空间清除mdf文件的变量来关闭对它们的访问。

清晰的mdfObjmdfObjNew
Baidu
map