メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

MDFイベントの操作

この例では、MDF ファイルからイベントを読み取り、イベントを使用してデータをフィルター処理する方法を示します。

MDF ファイル内のすべてのイベントを表示

ファイル名に mdfInfo を使用して、MDF ファイルのメタデータとイベントを表示します。

fileInfo = mdfInfo("VehicleDataWithEvents.mf4")
fileInfo = 
  MDFInfo with properties:

   File Details
                  Name: "VehicleDataWithEvents.mf4"
                  Path: "/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex41269135/VehicleDataWithEvents.mf4"
                Author: ""
            Department: ""
               Project: ""
               Subject: ""
               Comment: "Example file demonstrating workflows of reading events."
               Version: "4.10"
      InitialTimestamp: 2024-04-23 18:35:45.000000000

   Creator Details
     ProgramIdentifier: "MDF4Lib"
     CreatorVendorName: ""
       CreatorToolName: ""
    CreatorToolVersion: "1.0"
       CreatorUserName: ""
        CreatorComment: "created"

   File Contents
            Attachment: [0×7 table]
     ChannelGroupCount: 2
                 Event: [8×8 eventtable]

Event プロパティには、MDF ファイル内のすべてのイベントのイベント テーブルが含まれています。

fileEvents = fileInfo.Event
fileEvents = 8×8 eventtable
  Event Labels Variable: Name
  Event Lengths Variable: <instantaneous>

      Time            Name                                  Comment                                    Type           Cause      ScopeType      GroupNumber    RangeType    LinkAddress
    ________    ________________    ________________________________________________________    __________________    ______    ____________    ___________    _________    ___________

    0 sec       "USER COMMENT"      "Logging Vehicle Data 12/24/23"                             Marker                User      File                NaN          Point       ""        
    1 sec       "REC BEGIN"         "Recording has started successfully."                       Recording             Tool      File                NaN          Begin       "0x1C80"  
    1.2 sec     "REC INTERRUPT"     "Recording was interrupted."                                RecordingInterrupt    Script    ChannelGroup          1          Point       ""        
    8.5 sec     "USER REC BEGIN"    "User-initiated subrecording start."                        Recording             User      ChannelGroup          1          Begin       "0x1EC8"  
    10 sec      "TIME TRIGGER"      "Time min threshold trigger of 10 seconds has been hit."    Trigger               Script    ChannelGroup          2          Point       ""        
    11.5 sec    "USER REC END"      "User-initiated subrecording end."                          Recording             User      ChannelGroup          1          End         "0x1EC8"  
    14.1 sec    "RPM TRIGGER"       "RPM max threshold trigger of 1500 has been hit."           Trigger               Script    ChannelGroup          1          Point       ""        
    15 sec      "REC END"           "Recording has stopped successfully."                       Recording             Tool      File                NaN          End         "0x1C80"  

各イベントにはタイムスタンプと 8 つのメタデータ値があります。

  • ScopeType 値は、イベントが特定のチャネル グループに適用されるか、ファイル全体に適用されるかを表します。

  • GroupNumber 値は、イベントの対象となる特定のチャネル グループを表します。

  • イベントは、ある時点で発生することも、ある範囲の時間にわたって発生することもあります。RangeType 値は、イベントが特定の時点で発生するか、範囲の開始を示すか、範囲の終了を示すかを表します。

  • LinkAddress 値は、対応する範囲イベントをリンクするために使用されます。開始範囲イベントと終了範囲イベントのペアは同じ LinkAddress 値を共有し、その値は開始イベントのアドレスを表します。

MDF ファイルからすべてのデータとイベントを読み取る

MDF ファイルからすべてのデータとイベントを読み取る最も簡単な方法は、ファイル名だけで mdfRead 関数を呼び出すことです。各 timetable は、対応するチャネル グループから読み取られたデータを表します。各 timetable には、対応するチャネル グループを範囲とするファイル レベルのイベントとチャネル グループ レベルのイベントを表すイベント テーブルが含まれています。

data = mdfRead("VehicleDataWithEvents.mf4")
data=2×1 cell array
    {160×3 timetable}
    { 16×3 timetable}

data{1}
ans=160×3 timetable with 7 events
                        t       EngineRPM    Throttle    OutputTorque
                     _______    _________    ________    ____________

    USER COMMENT     0 sec          41            7           34     
                     0.1 sec        10          9.5           25     
                     0.2 sec        98            9           14     
                     0.3 sec        94          6.5           48     
                     0.4 sec       121            9           15     
                     0.5 sec       141          7.5           47     
                     0.6 sec        87            9           47     
                     0.7 sec        74          5.5           10     
                     0.8 sec       172            6           29     
                     0.9 sec       106         12.5           54     
    REC BEGIN        1 sec         147           11           31     
                     1.1 sec       148         14.5           23     
    REC INTERRUPT    1.2 sec       187           15           47     
                     1.3 sec       224          9.5           24     
                     1.4 sec       162           10           37     
                     1.5 sec       214          8.5           26     
      ⋮

Events プロパティにアクセスして、timetable に添付されたイベントを取得します。

chanGrp1Events = data{1}.Properties.Events
chanGrp1Events = 7×8 eventtable
  Event Labels Variable: Name
  Event Lengths Variable: <instantaneous>

      Time            Name                               Comment                                Type           Cause      ScopeType      GroupNumber    RangeType    LinkAddress
    ________    ________________    _________________________________________________    __________________    ______    ____________    ___________    _________    ___________

    0 sec       "USER COMMENT"      "Logging Vehicle Data 12/24/23"                      Marker                User      File                NaN          Point       ""        
    1 sec       "REC BEGIN"         "Recording has started successfully."                Recording             Tool      File                NaN          Begin       "0x1C80"  
    1.2 sec     "REC INTERRUPT"     "Recording was interrupted."                         RecordingInterrupt    Script    ChannelGroup          1          Point       ""        
    8.5 sec     "USER REC BEGIN"    "User-initiated subrecording start."                 Recording             User      ChannelGroup          1          Begin       "0x1EC8"  
    11.5 sec    "USER REC END"      "User-initiated subrecording end."                   Recording             User      ChannelGroup          1          End         "0x1EC8"  
    14.1 sec    "RPM TRIGGER"       "RPM max threshold trigger of 1500 has been hit."    Trigger               Script    ChannelGroup          1          Point       ""        
    15 sec      "REC END"           "Recording has stopped successfully."                Recording             Tool      File                NaN          End         "0x1C80"  

data{2}
ans=16×3 timetable with 4 events
                      t       VehicleSpeed    Brake    Gear
                    ______    ____________    _____    ____

    USER COMMENT    0 sec          82           0       1  
    REC BEGIN       1 sec          97           1       2  
                    2 sec          45           1       1  
                    3 sec          58           1       0  
                    4 sec          42           0       3  
                    5 sec         146           1       1  
                    6 sec         155           1       0  
                    7 sec         130           0       0  
                    8 sec         110           0       3  
                    9 sec         161           1       3  
    TIME TRIGGER    10 sec        153           0       2  
                    11 sec        134           0       3  
                    12 sec        160           1       2  
                    13 sec        159           0       1  
                    14 sec        198           0       1  
    REC END         15 sec        157           1       0  

chanGrp2Events = data{2}.Properties.Events
chanGrp2Events = 4×8 eventtable
  Event Labels Variable: Name
  Event Lengths Variable: <instantaneous>

     Time          Name                                 Comment                               Type       Cause      ScopeType      GroupNumber    RangeType    LinkAddress
    ______    ______________    ________________________________________________________    _________    ______    ____________    ___________    _________    ___________

    0 sec     "USER COMMENT"    "Logging Vehicle Data 12/24/23"                             Marker       User      File                NaN          Point       ""        
    1 sec     "REC BEGIN"       "Recording has started successfully."                       Recording    Tool      File                NaN          Begin       "0x1C80"  
    10 sec    "TIME TRIGGER"    "Time min threshold trigger of 10 seconds has been hit."    Trigger      Script    ChannelGroup          2          Point       ""        
    15 sec    "REC END"         "Recording has stopped successfully."                       Recording    Tool      File                NaN          End         "0x1C80"  

イベントを使用してデータをフィルタリングする

イベントに基づいて MDF データをフィルターするには、eventfilter を使用します。イベントとタイムスタンプを共有するサンプルを含むチャネル グループ 1 データのサブセットを作成します。

EF = eventfilter(data{1})
EF = 
  eventfilter with no constraints and no selected variables

    <unconstrained>

  VariableNames: Time, Name, Comment, Type, Cause, ScopeType, GroupNumber, RangeT…

dataFilteredToEventTimestamps = data{1}(EF, :)
dataFilteredToEventTimestamps=7×3 timetable with 7 events
                         t        EngineRPM    Throttle    OutputTorque
                      ________    _________    ________    ____________

    USER COMMENT      0 sec           41            7           34     
    REC BEGIN         1 sec          147           11           31     
    REC INTERRUPT     1.2 sec        187           15           47     
    USER REC BEGIN    8.5 sec        896         44.5          121     
    USER REC END      11.5 sec      1158         59.5          160     
    RPM TRIGGER       14.1 sec      1503         75.5          172     
    REC END           15 sec        1519           80          176     

ユーザーが開始した録音開始イベントとユーザーが開始した録音終了イベントの間のサンプルを含むチャネル グループ 1 データのサブセットを作成します。

TR = timerange(EF.Name == "USER REC BEGIN", EF.Name == "USER REC END")
TR = 
	timetable timerange subscript:

		Select timetable rows with event times in the half-open interval:
		  Starting at, including:   Name == "USER REC BEGIN"
		  Ending at, but excluding: Name == "USER REC END"

	See Select Times in Timetable.

dataFilteredToUserRecEventTimeRange = data{1}(TR, :)
dataFilteredToUserRecEventTimeRange=30×3 timetable with 7 events
                         t       EngineRPM    Throttle    OutputTorque
                      _______    _________    ________    ____________

    USER REC BEGIN    8.5 sec       896         44.5          121     
                      8.6 sec       935           46          105     
                      8.7 sec       912         47.5          103     
                      8.8 sec       961           52          110     
                      8.9 sec       941         45.5          138     
                      9 sec         957           51          132     
                      9.1 sec       999         50.5          103     
                      9.2 sec       920           46           95     
                      9.3 sec       999         47.5          131     
                      9.4 sec       941           56           99     
                      9.5 sec       973         49.5          130     
                      9.6 sec      1042           53          134     
                      9.7 sec       996         55.5          104     
                      9.8 sec      1012           51          117     
                      9.9 sec      1044         50.5          138     
                      10 sec       1076           59          118     
      ⋮

イベントでデータを可視化する

stackedplot を使用して、イベントを垂直線でマークして MDF データを可視化します。

stackedplot(data{1})

Figure contains an object of type stackedplot.

参考

関数