このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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})