주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

MDF 파일에서 데이터 읽기

이 예제는 MDF 파일에서 채널 데이터를 읽는 방법을 보여줍니다.

파일 세부 정보 보기

파일 이름을 지정하여 mdfInfo를 사용하여 MDF 파일의 메타데이터를 확인합니다.

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

   File Details
                  Name: "VehicleData.mf4"
                  Path: "/tmp/Bdoc25b_2988451_1430519/tpe4ace63d/vnt-ex94427230/VehicleData.mf4"
                Author: "Engineer"
            Department: "Automotive"
               Project: "Demo"
               Subject: "Prototype"
               Comment: "Example file"
               Version: "4.20"
      InitialTimestamp: 2024-11-14 19:16:35.000000000

   Creator Details
     ProgramIdentifier: "MATLAB"
     CreatorVendorName: "The MathWorks, Inc."
       CreatorToolName: "MATLAB"
    CreatorToolVersion: "25.1.0.2768609 (R2025a) Prerelease"
       CreatorUserName: "engineer"
        CreatorComment: "Created with Vehicle Network Toolbox"

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

MDF 파일에서 모든 데이터 읽기

MDF 파일의 모든 데이터를 읽는 가장 쉬운 방법은 파일 이름만 지정하여 mdfRead 함수를 호출하는 것입니다. 각 타임테이블은 해당 채널 그룹에서 읽은 데이터를 나타냅니다.

dataAll = mdfRead("VehicleData.mf4")
dataAll=2×1 cell array
    {  751×8 timetable}
    {92033×2 timetable}

dataAll{1}
ans=751×8 timetable
          time      EngineRPM    Brake    Throttle    Gear    ImpellerTorque    OutputTorque    TransmissionRPM    VehicleSpeed
        ________    _________    _____    ________    ____    ______________    ____________    _______________    ____________

        0 sec          1000        0           60      1          52.919           282.65                0              0      
        0.04 sec     1383.3        0       59.946      1           101.4           532.63           13.593              0      
        0.08 sec     1685.4        0       59.893      1          150.76           776.41           35.847              0      
        0.12 sec     1907.2        0       59.839      1          193.42           973.15           65.768              0      
        0.16 sec       2062        0       59.785      1          227.02           1117.6           101.53              0      
        0.2 sec      2161.2        0       59.732      1          251.11           1212.8           141.45              0      
        0.24 sec     2221.4        0       59.678      1          267.24           1264.3           183.86              0      
        0.28 sec     2257.2        0       59.624      1          276.35           1271.2           227.25              0      
        0.32 sec     2278.7        0        59.57      1          281.99           1259.5           270.52              0      
        0.36 sec     2292.4        0       59.517      1          283.39             1229           313.08              0      
        0.4 sec      2305.1        0       59.463      1          283.29           1193.4           354.43              0      
        0.44 sec     2317.4        0       59.409      1          282.91           1156.6           394.58              0      
        0.48 sec     2330.5        0       59.356      1          281.84           1112.8           433.27              0      
        0.52 sec     2344.5        0       59.302      1          281.19           1073.1           470.53              0      
        0.56 sec     2359.1        0       59.248      1          279.77           1032.9           506.43              0      
        0.6 sec      2376.4        0       59.195      1          277.89           993.97           540.92              0      
      ⋮

dataAll{2}
ans=92033×2 timetable
             time         AirFlow    FuelRate
        ______________    _______    ________

        0 sec             17.294       1.209 
        0.00056199 sec    17.263       1.209 
        0.0033719 sec     17.112       1.209 
        0.01 sec          16.776      1.1729 
        0.02 sec          16.316      1.1409 
        0.03 sec          15.907      1.1124 
        0.04 sec          15.546      1.0873 
        0.05 sec          15.228      1.0652 
        0.055328 sec      15.075      1.0652 
        0.055328 sec      15.075      1.0652 
        0.055328 sec      15.075      1.0652 
        0.06 sec          14.949      1.0458 
        0.064672 sec      14.832      1.0458 
        0.07 sec          14.707      1.0289 
        0.08 sec          14.497      1.0143 
        0.09 sec          14.317      1.0019 
      ⋮

선택된 채널 그룹에서 데이터 읽기

선택된 채널 그룹에서만 데이터를 읽으려면, 대상 채널 그룹 번호로 지정할 옵션 GroupNumber를 명시하십시오. 채널 그룹 1에서만 데이터를 읽습니다.

dataChanGrp1 = mdfRead("VehicleData.mf4", GroupNumber=1)
dataChanGrp1 = 1×1 cell array
    {751×8 timetable}

dataChanGrp1{1}
ans=751×8 timetable
          time      EngineRPM    Brake    Throttle    Gear    ImpellerTorque    OutputTorque    TransmissionRPM    VehicleSpeed
        ________    _________    _____    ________    ____    ______________    ____________    _______________    ____________

        0 sec          1000        0           60      1          52.919           282.65                0              0      
        0.04 sec     1383.3        0       59.946      1           101.4           532.63           13.593              0      
        0.08 sec     1685.4        0       59.893      1          150.76           776.41           35.847              0      
        0.12 sec     1907.2        0       59.839      1          193.42           973.15           65.768              0      
        0.16 sec       2062        0       59.785      1          227.02           1117.6           101.53              0      
        0.2 sec      2161.2        0       59.732      1          251.11           1212.8           141.45              0      
        0.24 sec     2221.4        0       59.678      1          267.24           1264.3           183.86              0      
        0.28 sec     2257.2        0       59.624      1          276.35           1271.2           227.25              0      
        0.32 sec     2278.7        0        59.57      1          281.99           1259.5           270.52              0      
        0.36 sec     2292.4        0       59.517      1          283.39             1229           313.08              0      
        0.4 sec      2305.1        0       59.463      1          283.29           1193.4           354.43              0      
        0.44 sec     2317.4        0       59.409      1          282.91           1156.6           394.58              0      
        0.48 sec     2330.5        0       59.356      1          281.84           1112.8           433.27              0      
        0.52 sec     2344.5        0       59.302      1          281.19           1073.1           470.53              0      
        0.56 sec     2359.1        0       59.248      1          279.77           1032.9           506.43              0      
        0.6 sec      2376.4        0       59.195      1          277.89           993.97           540.92              0      
      ⋮

지정된 이름과 일치하는 채널에서 데이터 읽기

정확히 알려진 채널 이름에서 데이터를 읽으려면, 옵션 Channel를 정확한 채널 이름으로 지정하십시오. "Brake", "Throttle" 및 "FuelRate"라는 이름의 채널에서 데이터를 읽습니다.

dataChanExact = mdfRead("VehicleData.mf4", Channel=["Brake", "Throttle", "FuelRate"])
dataChanExact=2×1 cell array
    {  751×2 timetable}
    {92033×1 timetable}

데이터는 두 개의 타임테이블로 반환됨을 유의하십시오. 이는 채널 그룹 1에는 "브레이크" 및 "스로틀" 채널이 포함되어 있는 반면, 채널 그룹 2에는 "연료유량" 채널이 포함되어 있기 때문입니다.

dataChanExact{1}
ans=751×2 timetable
          time      Brake    Throttle
        ________    _____    ________

        0 sec         0           60 
        0.04 sec      0       59.946 
        0.08 sec      0       59.893 
        0.12 sec      0       59.839 
        0.16 sec      0       59.785 
        0.2 sec       0       59.732 
        0.24 sec      0       59.678 
        0.28 sec      0       59.624 
        0.32 sec      0        59.57 
        0.36 sec      0       59.517 
        0.4 sec       0       59.463 
        0.44 sec      0       59.409 
        0.48 sec      0       59.356 
        0.52 sec      0       59.302 
        0.56 sec      0       59.248 
        0.6 sec       0       59.195 
      ⋮

dataChanExact{2}
ans=92033×1 timetable
             time         FuelRate
        ______________    ________

        0 sec               1.209 
        0.00056199 sec      1.209 
        0.0033719 sec       1.209 
        0.01 sec           1.1729 
        0.02 sec           1.1409 
        0.03 sec           1.1124 
        0.04 sec           1.0873 
        0.05 sec           1.0652 
        0.055328 sec       1.0652 
        0.055328 sec       1.0652 
        0.055328 sec       1.0652 
        0.06 sec           1.0458 
        0.064672 sec       1.0458 
        0.07 sec           1.0289 
        0.08 sec           1.0143 
        0.09 sec           1.0019 
      ⋮

부분적으로 알려진 채널 이름에서 데이터를 읽으려면 와일드카드 문자를 사용하여 Channel 옵션을 지정하십시오. 이름에 "토크"라는 부분 문자열이 포함된 채널에서 데이터를 읽습니다.

dataChanWildcard = mdfRead("VehicleData.mf4", Channel="*Torque*")
dataChanWildcard=2×1 cell array
    {751×2 timetable}
    {  0×0 timetable}

인덱스 2의 타임테이블이 비어 있음을 유의하십시오. 이는 "*토크*"와 일치하는 모든 채널이 채널 그룹 1에 존재하기 때문입니다.

dataChanWildcard{1}
ans=751×2 timetable
          time      ImpellerTorque    OutputTorque
        ________    ______________    ____________

        0 sec           52.919           282.65   
        0.04 sec         101.4           532.63   
        0.08 sec        150.76           776.41   
        0.12 sec        193.42           973.15   
        0.16 sec        227.02           1117.6   
        0.2 sec         251.11           1212.8   
        0.24 sec        267.24           1264.3   
        0.28 sec        276.35           1271.2   
        0.32 sec        281.99           1259.5   
        0.36 sec        283.39             1229   
        0.4 sec         283.29           1193.4   
        0.44 sec        282.91           1156.6   
        0.48 sec        281.84           1112.8   
        0.52 sec        281.19           1073.1   
        0.56 sec        279.77           1032.9   
        0.6 sec         277.89           993.97   
      ⋮

테이블을 사용하여 채널에서 데이터 읽기

mdfChannelInfo를 사용하여 대상 채널을 필터링한 후, mdfRead에서 얻은 테이블을 활용해 나열된 채널에서만 데이터를 읽을 수 있습니다.

먼저, mdfChannelInfo를 사용하여 "*RPM" 또는 "AirFlow"와 일치하는 채널 이름을 찾으십시오.

chanInfo = mdfChannelInfo("VehicleData.mf4", Channel=["*RPM", "AirFlow"])
chanInfo=3×13 table
          Name           GroupNumber    GroupNumSamples    GroupAcquisitionName                                   GroupComment                                    GroupSourceName    GroupSourcePath    DisplayName    Unit      Comment      ExtendedNamePrefix    SourceName     SourcePath 
    _________________    ___________    _______________    ____________________    ___________________________________________________________________________    _______________    _______________    ___________    ____    ___________    __________________    ___________    ___________

    "AirFlow"                 2              92033             <undefined>         Simulation of engine gas dynamics.                                               <undefined>        <undefined>          ""         g/s     <undefined>       <undefined>        <undefined>    <undefined>
    "EngineRPM"               1                751             <undefined>         Simulation of an automatic transmission controller during passing maneuver.      <undefined>        <undefined>          ""         rpm     <undefined>       <undefined>        <undefined>    <undefined>
    "TransmissionRPM"         1                751             <undefined>         Simulation of an automatic transmission controller during passing maneuver.      <undefined>        <undefined>          ""         rpm     <undefined>       <undefined>        <undefined>    <undefined>

선택적 인수 ChannelmdfChannelInfo가 반환하는 테이블로 지정하여 mdfRead 함수를 사용하십시오. 이 코드는 chanInfo 테이블에 나열된 세 개의 채널에서 데이터를 한 번에 읽습니다.

dataChanTable = mdfRead("VehicleData.mf4", Channel=chanInfo)
dataChanTable=2×1 cell array
    {  751×2 timetable}
    {92033×1 timetable}

dataChanTable{1}
ans=751×2 timetable
          time      EngineRPM    TransmissionRPM
        ________    _________    _______________

        0 sec          1000               0     
        0.04 sec     1383.3          13.593     
        0.08 sec     1685.4          35.847     
        0.12 sec     1907.2          65.768     
        0.16 sec       2062          101.53     
        0.2 sec      2161.2          141.45     
        0.24 sec     2221.4          183.86     
        0.28 sec     2257.2          227.25     
        0.32 sec     2278.7          270.52     
        0.36 sec     2292.4          313.08     
        0.4 sec      2305.1          354.43     
        0.44 sec     2317.4          394.58     
        0.48 sec     2330.5          433.27     
        0.52 sec     2344.5          470.53     
        0.56 sec     2359.1          506.43     
        0.6 sec      2376.4          540.92     
      ⋮

dataChanTable{2}
ans=92033×1 timetable
             time         AirFlow
        ______________    _______

        0 sec             17.294 
        0.00056199 sec    17.263 
        0.0033719 sec     17.112 
        0.01 sec          16.776 
        0.02 sec          16.316 
        0.03 sec          15.907 
        0.04 sec          15.546 
        0.05 sec          15.228 
        0.055328 sec      15.075 
        0.055328 sec      15.075 
        0.055328 sec      15.075 
        0.06 sec          14.949 
        0.064672 sec      14.832 
        0.07 sec          14.707 
        0.08 sec          14.497 
        0.09 sec          14.317 
      ⋮

인덱스 범위 내 데이터 읽기

지정된 인덱스 범위 내의 데이터 하위 집합만 읽으려면 시작 및 종료 인덱스를 제공하기 위해 IndexRange 옵션을 지정하십시오. 인덱스 101부터 105 사이의 두 채널 그룹 모두에서 데이터를 읽으십시오.

dataByIndex = mdfRead("VehicleData.mf4", IndexRange=[101, 105])
dataByIndex=2×1 cell array
    {5×8 timetable}
    {5×2 timetable}

dataByIndex{1}
ans=5×8 timetable
          time      EngineRPM    Brake    Throttle    Gear    ImpellerTorque    OutputTorque    TransmissionRPM    VehicleSpeed
        ________    _________    _____    ________    ____    ______________    ____________    _______________    ____________

        4 sec        3138.5        0       54.631      2          235.21           340.98           1964.5              0      
        4.04 sec     3151.6        0       54.577      2          234.57           340.09           1975.5              0      
        4.08 sec     3164.6        0       54.523      2          233.93            339.2           1986.3              0      
        4.12 sec     3177.6        0        54.47      2          233.29           338.31           1997.2              0      
        4.16 sec     3190.4        0       54.416      2          232.65           337.43             2008              0      

dataByIndex{2}
ans=5×2 timetable
          time      AirFlow    FuelRate
        ________    _______    ________

        0.89 sec    19.421      1.3439 
        0.9 sec     19.492      1.3486 
        0.91 sec    19.562      1.3532 
        0.92 sec    19.631      1.3577 
        0.93 sec    19.699      1.3622 

시간 범위 내 데이터 읽기

지정된 시간 범위 내의 데이터 하위 집합만 읽으려면 시작 시간과 종료 시간을 제공하기 위해 TimeRange 옵션을 지정하십시오. 1.5초에서 2초 사이에 두 채널 그룹 모두에서 데이터를 읽습니다.

dataByTime = mdfRead("VehicleData.mf4", TimeRange=seconds([1.5, 2]))
dataByTime=2×1 cell array
    {13×8 timetable}
    {51×2 timetable}

dataByTime{1}
ans=13×8 timetable
          time      EngineRPM    Brake    Throttle    Gear    ImpellerTorque    OutputTorque    TransmissionRPM    VehicleSpeed
        ________    _________    _____    ________    ____    ______________    ____________    _______________    ____________

        1.52 sec       2969        0        57.96      1          240.51           574.51           1106.7              0      
        1.56 sec     3006.7        0       57.906      1           238.7            570.4           1125.9              0      
        1.6 sec      3044.4        0       57.852      1          237.26            567.2           1144.9              0      
        1.64 sec     3082.4        0       57.799      1          235.33           562.79           1163.8              0      
        1.68 sec     3120.3        0       57.745      1          233.87           559.47           1182.6              0      
        1.72 sec     3157.9        0       57.691      1          232.51            556.4           1201.3              0      
        1.76 sec       3195        0       57.638      1          231.18           553.41           1219.9              0      
        1.8 sec        3232        0       57.584      2          510.18           1093.3           1238.3              0      
        1.84 sec     2899.9        0        57.53      2          384.51            755.8           1268.9              0      
        1.88 sec     2742.1        0       57.477      2          327.29           607.68           1291.4              0      
        1.92 sec     2665.8        0       57.423      2             299           534.91           1310.4              0      
        1.96 sec     2631.3        0       57.369      2          284.28           496.35           1327.5              0      
        2 sec        2617.6        0       57.315      2          276.76           475.14           1343.7              0      

dataByTime{2}
ans=51×2 timetable
          time      AirFlow    FuelRate
        ________    _______    ________

        1.5 sec     22.414      1.5385 
        1.51 sec    22.446      1.5405 
        1.52 sec    22.477      1.5425 
        1.53 sec    22.508      1.5445 
        1.54 sec    22.539      1.5464 
        1.55 sec    22.569      1.5484 
        1.56 sec    22.598      1.5502 
        1.57 sec    22.628      1.5521 
        1.58 sec    22.656       1.554 
        1.59 sec    22.685      1.5558 
        1.6 sec     22.713      1.5576 
        1.61 sec    22.741      1.5593 
        1.62 sec    22.768      1.5611 
        1.63 sec    22.795      1.5628 
        1.64 sec    22.822      1.5645 
        1.65 sec    22.849      1.5662 
      ⋮

절대적 타임스탬프로 데이터 읽기

MDF 파일의 초기 타임스탬프를 고려하여 datetime에서 절대적 타임스탬프를 반환하려면, mdfRead 호출 시 AbsoluteTime 옵션을 true로 지정하십시오.

dataAbsTime = mdfRead("VehicleData.mf4", AbsoluteTime=true)
dataAbsTime=2×1 cell array
    {  751×8 timetable}
    {92033×2 timetable}

dataAbsTime{1}
ans=751×8 timetable
                    time                 EngineRPM    Brake    Throttle    Gear    ImpellerTorque    OutputTorque    TransmissionRPM    VehicleSpeed
        _____________________________    _________    _____    ________    ____    ______________    ____________    _______________    ____________

        2024-11-14 19:16:35.000000000       1000        0           60      1          52.919           282.65                0              0      
        2024-11-14 19:16:35.040000000     1383.3        0       59.946      1           101.4           532.63           13.593              0      
        2024-11-14 19:16:35.080000000     1685.4        0       59.893      1          150.76           776.41           35.847              0      
        2024-11-14 19:16:35.120000000     1907.2        0       59.839      1          193.42           973.15           65.768              0      
        2024-11-14 19:16:35.160000000       2062        0       59.785      1          227.02           1117.6           101.53              0      
        2024-11-14 19:16:35.200000000     2161.2        0       59.732      1          251.11           1212.8           141.45              0      
        2024-11-14 19:16:35.240000000     2221.4        0       59.678      1          267.24           1264.3           183.86              0      
        2024-11-14 19:16:35.280000000     2257.2        0       59.624      1          276.35           1271.2           227.25              0      
        2024-11-14 19:16:35.320000000     2278.7        0        59.57      1          281.99           1259.5           270.52              0      
        2024-11-14 19:16:35.360000000     2292.4        0       59.517      1          283.39             1229           313.08              0      
        2024-11-14 19:16:35.400000000     2305.1        0       59.463      1          283.29           1193.4           354.43              0      
        2024-11-14 19:16:35.440000000     2317.4        0       59.409      1          282.91           1156.6           394.58              0      
        2024-11-14 19:16:35.480000000     2330.5        0       59.356      1          281.84           1112.8           433.27              0      
        2024-11-14 19:16:35.520000000     2344.5        0       59.302      1          281.19           1073.1           470.53              0      
        2024-11-14 19:16:35.560000000     2359.1        0       59.248      1          279.77           1032.9           506.43              0      
        2024-11-14 19:16:35.600000000     2376.4        0       59.195      1          277.89           993.97           540.92              0      
      ⋮

dataAbsTime{2}
ans=92033×2 timetable
                    time                 AirFlow    FuelRate
        _____________________________    _______    ________

        2024-11-14 19:16:35.000000000    17.294       1.209 
        2024-11-14 19:16:35.000561989    17.263       1.209 
        2024-11-14 19:16:35.003371932    17.112       1.209 
        2024-11-14 19:16:35.010000000    16.776      1.1729 
        2024-11-14 19:16:35.020000000    16.316      1.1409 
        2024-11-14 19:16:35.030000000    15.907      1.1124 
        2024-11-14 19:16:35.040000000    15.546      1.0873 
        2024-11-14 19:16:35.050000000    15.228      1.0652 
        2024-11-14 19:16:35.055327997    15.075      1.0652 
        2024-11-14 19:16:35.055327997    15.075      1.0652 
        2024-11-14 19:16:35.055327997    15.075      1.0652 
        2024-11-14 19:16:35.060000000    14.949      1.0458 
        2024-11-14 19:16:35.064672003    14.832      1.0458 
        2024-11-14 19:16:35.070000000    14.707      1.0289 
        2024-11-14 19:16:35.080000000    14.497      1.0143 
        2024-11-14 19:16:35.090000000    14.317      1.0019 
      ⋮