Начало работы с Datastore MDF

Этот пример показывает вам, как использовать функцию datastore MDF Vehicle Network Toolbox™ к быстро и эффективно обработать распространение набора данных через набор нескольких MDF-файлов. Этот рабочий процесс также ценен, когда существует слишком много данных, чтобы поместиться в доступную память.

Доступ к MDF-файлам в Datastore

Найдите набор MDF-файлов, представляющих регистрируемую информацию от нескольких тестовых последовательностей. Обратите внимание на то, что MDF-файлы, которые будут использоваться datastore MDF в качестве набора, должны иметь ту же группу канала и структуру содержимого канала.

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

Создайте Datastore MDF

Вы создаете datastore MDF путем выбора местоположения папки, содержащего набор MDF-файлов. В этом случае предназначайтесь для всех файлов в текущей рабочей директории.

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

  DataStore Details
                         Files: {
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File01.mf4';
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File02.mf4';
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                  ChannelGroupNumber    AcquisitionName         Comment             ... and 4 more columns    
                                  __________________    _______________    _________________                

                                          1               {0x0 char}       {'Integer Types'}    {0x0 double}
                                          2               {0x0 char}       {'Float Types'  }    {0x0 double}


                      Channels: 
                                  ChannelGroupNumber                 ChannelName                  DisplayName        ... and 10 more columns    
                                  __________________    ______________________________________    ___________                

                                          1             {'Signed_Int16_LE_Offset_32'         }    {0x0 char}     {0x0 double}
                                          1             {'Unsigned_UInt32_LE_Master_Offset_0'}    {0x0 char}     {0x0 double}
                                          2             {'Float_32_LE_Offset_64'             }    {0x0 char}     {0x0 double}

                                ... and 1 more rows

  Options
          SelectedChannelNames: {
                                'Signed_Int16_LE_Offset_32';
                                'Unsigned_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 'file'
                    Conversion: Numeric

Сконфигурируйте Datastore MDF

Несколько опций позволяют управление того, какие данные считаны из MDF-файлов и как чтения выполняются. В этом случае первая группа канала используется по умолчанию. Обратите внимание на то, что только одна группа канала может быть выбрана datastore за один раз. Можно также задать определенные каналы в выбранной группе канала, чтобы читать. В этом случае все каналы читаются по умолчанию.

mds.SelectedChannelGroupNumber
ans = 1
mds.SelectedChannelNames
ans = 2x1 string
    "Signed_Int16_LE_Offset_32"
    "Unsigned_UInt32_LE_Master_Offset_0"

Предварительный просмотр Datastore MDF

Используя preview функция, можно получить быстрое представление доступных данных в наборе файла. Предварительный просмотр всегда возвращает до восьми точек данных в первый файл в datastore.

preview(mds)
ans=8×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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                 

Считывайте все данные в Datastore MDF

Можно использовать readall функционируйте, чтобы считать целые данные в одном вызове. Это - эффективный способ читать из многих файлов, когда набор данных помещается в доступную память. После выполнения readall, datastore сбрасывает к началу набора данных.

data = readall(mds);
data(1:5,:)
ans=5×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

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

Считайте подмножество данных в Datastore MDF

Можно использовать read функция, чтобы получить подмножество данных из datastore. Размер подмножества определяется ReadSize свойство объекта datastore MDF. По умолчанию данные из целого файла считаны в одном вызове. Степень datastore прибывает из прочтения нескольких файлов последовательно в наборе файла. Когда вы читаете, datastore автоматически соединяет от одного файла до следующего, пока все данные из всех файлов не считаны.

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

  data      10000x2             141839  timetable              
ans=5×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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             141839  timetable              
ans=5×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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             141839  timetable              
ans=5×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

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

Сбросьте Datastore MDF

В любое время можно вызвать reset функционируйте, чтобы запуститься в начале набора данных.

reset(mds)

Сконфигурируйте количество записей, чтобы читать из Datastore MDF

Можно использовать ReadSize свойство задать, сколько данных, чтобы читать на каждом вызове. ReadSize может быть задан как числовое значение, чтобы считать постоянное число точек данных. ReadSize позволяет вам управлять, сколько данных загружается в память, когда у вас есть набор данных, больше, чем доступная память. Рекомендуется использовать пользовательские размеры чтения, которые малы достаточно, чтобы уместиться в памяти, но все еще как можно больше уменьшать обработку наверху и улучшать производительность.

mds.ReadSize = 5
mds = 
  MDFDatastore with properties:

  DataStore Details
                         Files: {
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File01.mf4';
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File02.mf4';
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                  ChannelGroupNumber    AcquisitionName         Comment             ... and 4 more columns    
                                  __________________    _______________    _________________                

                                          1               {0x0 char}       {'Integer Types'}    {0x0 double}
                                          2               {0x0 char}       {'Float Types'  }    {0x0 double}


                      Channels: 
                                  ChannelGroupNumber                 ChannelName                  DisplayName        ... and 10 more columns    
                                  __________________    ______________________________________    ___________                

                                          1             {'Signed_Int16_LE_Offset_32'         }    {0x0 char}     {0x0 double}
                                          1             {'Unsigned_UInt32_LE_Master_Offset_0'}    {0x0 char}     {0x0 double}
                                          2             {'Float_32_LE_Offset_64'             }    {0x0 char}     {0x0 double}

                                ... and 1 more rows

  Options
          SelectedChannelNames: {
                                'Signed_Int16_LE_Offset_32';
                                'Unsigned_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5
                    Conversion: Numeric

for ii = 1:3
    data = read(mds)
end
data=5×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    ______    _________________________    __________________________________

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

Сконфигурируйте область значений времени, чтобы читать из Datastore MDF

Можно также задать ReadSize как длительность, чтобы считать точки данных к прошедшему времени. Обратите внимание на то, что, когда тип чтения изменяется, сброс datastore к началу набора данных.

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

  DataStore Details
                         Files: {
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File01.mf4';
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File02.mf4';
                                ' .../mlx_to_docbook2/tpadb915a3/vnt-ex10761765/File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                  ChannelGroupNumber    AcquisitionName         Comment             ... and 4 more columns    
                                  __________________    _______________    _________________                

                                          1               {0x0 char}       {'Integer Types'}    {0x0 double}
                                          2               {0x0 char}       {'Float Types'  }    {0x0 double}


                      Channels: 
                                  ChannelGroupNumber                 ChannelName                  DisplayName        ... and 10 more columns    
                                  __________________    ______________________________________    ___________                

                                          1             {'Signed_Int16_LE_Offset_32'         }    {0x0 char}     {0x0 double}
                                          1             {'Unsigned_UInt32_LE_Master_Offset_0'}    {0x0 char}     {0x0 double}
                                          2             {'Float_32_LE_Offset_64'             }    {0x0 char}     {0x0 double}

                                ... and 1 more rows

  Options
          SelectedChannelNames: {
                                'Signed_Int16_LE_Offset_32';
                                'Unsigned_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5 sec
                    Conversion: Numeric

for ii = 1:3
    data = read(mds)
end
data=5×2 timetable
    Time     Signed_Int16_LE_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    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_Offset_32    Unsigned_UInt32_LE_Master_Offset_0
    ______    _________________________    __________________________________

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

Закройте MDF-файлы

Закройте доступ к MDF-файлам путем очищения переменной datastore MDF из рабочей области.

clear mds