メインコンテンツ

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

MDF データストア入門

この例では、Vehicle Network Toolbox ™ の MDF データストア機能を使用して、複数の MDF ファイルのコレクションにまたがるデータ セットを迅速かつ効率的に処理する方法を示します。このワークフローは、使用可能なメモリに収まらないほど多くのデータがある場合にも役立ちます。

データストア内のMDFファイルにアクセスする

複数のテスト シーケンスから記録された情報を表す MDF ファイルのコレクションを見つけます。MDF データストアによってセットとして使用される MDF ファイルは、同じチャネル グループとチャネル コンテンツ構造を持つ必要があることに注意してください。

dir("File*.mf4")
File01.mf4  File02.mf4  File03.mf4  File04.mf4  File05.mf4  

MDFデータストアを作成する

MDF ファイルのコレクションを含むフォルダーの場所を選択して、MDF データストアを作成します。この場合、現在の作業ディレクトリ内のすべてのファイルを対象とします。

mds = mdfDatastore(pwd)
mds = 
  MDFDatastore with properties:

  Datastore Details
                         Files: {
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File01.mf4';
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File02.mf4';
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                  GroupNumber    AcquisitionName       Comment           ... and 10 more columns    
                                  ___________    _______________    _____________                

                                       1           <undefined>      Integer Types                
                                       2           <undefined>      Float Types                  


                      Channels: 
                                        Name           GroupNumber    DisplayName        ... and 17 more columns    
                                  _________________    ___________    ___________                

                                  "Float_32_LE"             2             ""                     
                                  "Float_64_LE"             2             ""                     
                                  "Signed_Int16_LE"         1             ""                     

                                ... and 3 more rows

  Options
          SelectedChannelNames: {
                                'Signed_Int16_LE';
                                'Unsigned_UInt32_LE';
                                'time'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: "file"
                       ReadRaw: 0
                  ValidityRule: "include"
                 IncludeEvents: 1

MDFデータストアを構成する

複数のオプションにより、MDF ファイルから読み取るデータと読み取りの実行方法を制御できます。この場合、最初のチャネル グループがデフォルトで使用されます。データストアでは一度に 1 つのチャネル グループのみ選択できることに注意してください。選択したチャネル グループ内の特定のチャネルを指定して読み取ることもできます。この場合、すべてのチャネルがデフォルトで読み取られます。

mds.SelectedChannelGroupNumber
ans = 
1
mds.SelectedChannelNames
ans = 3×1 string
    "Signed_Int16_LE"
    "Unsigned_UInt32_LE"
    "time"

MDF データストアのプレビュー

preview 関数を使用すると、ファイル セットで使用可能なデータを簡単に表示できます。プレビューでは、データストアの最初のファイルから常に最大 8 つのデータ ポイントが返されます。

preview(mds)
ans=8×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         
        5 sec           5                   5         
        6 sec           6                   6         
        7 sec           7                   7         

MDFデータストア内のすべてのデータを読み取る

readall 関数を使用すると、1 回の呼び出しでデータ全体を読み取ることができます。これは、データ セットが使用可能なメモリに収まる場合に、多数のファイルから読み取る効率的な方法です。readall を実行すると、データストアはデータ セットの先頭にリセットされます。

data = readall(mds);
data(1:5,:)
ans=5×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         

MDF データストア内のデータのサブセットを読み取る

read 関数を使用して、データストアからデータのサブセットを取得できます。サブセットのサイズは、MDF データストア オブジェクトの ReadSize プロパティによって決まります。デフォルトでは、ファイル全体のデータが 1 回の呼び出しで読み取られます。データストアの威力は、ファイル セット内の複数のファイルを順番に読み取ることによって発揮されます。読み取ると、すべてのファイルのすべてのデータが読み取られるまで、データストアは自動的に 1 つのファイルから次のファイルにブリッジします。

for ii = 1:3
    data = read(mds);
    whos("data")
    data(1:5,:)
end
  Name          Size             Bytes  Class        Attributes

  data      10000x2             246364  timetable              
ans=5×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         

  Name          Size             Bytes  Class        Attributes

  data      10000x2             246364  timetable              
ans=5×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         

  Name          Size             Bytes  Class        Attributes

  data      10000x2             246364  timetable              
ans=5×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         

MDFデータストアをリセット

いつでも、reset 関数を呼び出して、データ セットの先頭からやり直すことができます。

reset(mds)

MDF データストアから読み取るレコード数を設定する

ReadSize プロパティを使用して、各呼び出しで読み取るデータの量を指定できます。ReadSize は、固定数のデータ ポイントを読み取るための数値として指定できます。ReadSize を使用すると、使用可能なメモリよりも大きいデータ セットがある場合に、メモリにロードされるデータの量を制御できます。処理のオーバーヘッドを削減し、パフォーマンスを向上させるために、メモリに収まる程度に小さく、かつ可能な限り大きいカスタム読み取りサイズを使用することをお勧めします。

mds.ReadSize = 5
mds = 
  MDFDatastore with properties:

  Datastore Details
                         Files: {
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File01.mf4';
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File02.mf4';
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                  GroupNumber    AcquisitionName       Comment           ... and 10 more columns    
                                  ___________    _______________    _____________                

                                       1           <undefined>      Integer Types                
                                       2           <undefined>      Float Types                  


                      Channels: 
                                        Name           GroupNumber    DisplayName        ... and 17 more columns    
                                  _________________    ___________    ___________                

                                  "Float_32_LE"             2             ""                     
                                  "Float_64_LE"             2             ""                     
                                  "Signed_Int16_LE"         1             ""                     

                                ... and 3 more rows

  Options
          SelectedChannelNames: {
                                'Signed_Int16_LE';
                                'Unsigned_UInt32_LE';
                                'time'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5
                       ReadRaw: 0
                  ValidityRule: "include"
                 IncludeEvents: 1

for ii = 1:3
    data = read(mds)
end
data=5×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         

data=5×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        5 sec           5                   5         
        6 sec           6                   6         
        7 sec           7                   7         
        8 sec           8                   8         
        9 sec           9                   9         

data=5×2 timetable
         time     Signed_Int16_LE    Unsigned_UInt32_LE
        ______    _______________    __________________

        10 sec          10                   10        
        11 sec          11                   11        
        12 sec          12                   12        
        13 sec          13                   13        
        14 sec          14                   14        

MDF データストアから読み取る時間範囲を構成する

経過時間ごとにデータ ポイントを読み取るために、期間として ReadSize を指定することもできます。読み取りタイプが変更されると、データストアはデータセットの先頭にリセットされることに注意してください。

mds.ReadSize = seconds(5)
mds = 
  MDFDatastore with properties:

  Datastore Details
                         Files: {
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File01.mf4';
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File02.mf4';
                                '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex10761765/File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                  GroupNumber    AcquisitionName       Comment           ... and 10 more columns    
                                  ___________    _______________    _____________                

                                       1           <undefined>      Integer Types                
                                       2           <undefined>      Float Types                  


                      Channels: 
                                        Name           GroupNumber    DisplayName        ... and 17 more columns    
                                  _________________    ___________    ___________                

                                  "Float_32_LE"             2             ""                     
                                  "Float_64_LE"             2             ""                     
                                  "Signed_Int16_LE"         1             ""                     

                                ... and 3 more rows

  Options
          SelectedChannelNames: {
                                'Signed_Int16_LE';
                                'Unsigned_UInt32_LE';
                                'time'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5 sec
                       ReadRaw: 0
                  ValidityRule: "include"
                 IncludeEvents: 1

for ii = 1:3
    data = read(mds)
end
data=6×2 timetable
        time     Signed_Int16_LE    Unsigned_UInt32_LE
        _____    _______________    __________________

        0 sec           0                   0         
        1 sec           1                   1         
        2 sec           2                   2         
        3 sec           3                   3         
        4 sec           4                   4         
        5 sec           5                   5         

data=11×2 timetable
         time     Signed_Int16_LE    Unsigned_UInt32_LE
        ______    _______________    __________________

        0 sec            0                    0        
        1 sec            1                    1        
        2 sec            2                    2        
        3 sec            3                    3        
        4 sec            4                    4        
        5 sec            5                    5        
        6 sec            6                    6        
        7 sec            7                    7        
        8 sec            8                    8        
        9 sec            9                    9        
        10 sec          10                   10        

data=16×2 timetable
         time     Signed_Int16_LE    Unsigned_UInt32_LE
        ______    _______________    __________________

        0 sec            0                    0        
        1 sec            1                    1        
        2 sec            2                    2        
        3 sec            3                    3        
        4 sec            4                    4        
        5 sec            5                    5        
        6 sec            6                    6        
        7 sec            7                    7        
        8 sec            8                    8        
        9 sec            9                    9        
        10 sec          10                   10        
        11 sec          11                   11        
        12 sec          12                   12        
        13 sec          13                   13        
        14 sec          14                   14        
        15 sec          15                   15        

MDFファイルを閉じる

ワークスペースから MDF データストア変数をクリアして、MDF ファイルへのアクセスを閉じます。

clear mds