Используя MDF-файлы через Datastore MDF

Этот пример показывает вам, как использовать функцию Datastore MDF Vehicle Network Toolbox к быстро и эффективно обработать распространение набора данных через набор нескольких 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:

                         Files: {
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File01.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File02.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                ChannelGroupNumber    AcquisitionName        Comment        ... and 4 more columns
                                __________________    _______________    _______________        

                                        1                   ''           'Integer Types'      
                                        2                   ''           'Float Types'        


                      Channels: 
                                ChannelGroupNumber                ChannelName                 DisplayName    ... and 9 more columns
                                __________________    ____________________________________    ___________        

                                        1             'Sigend_Int16_LE_Offset_32'                 ''           
                                        1             'Unsigend_UInt32_LE_Master_Offset_0'        ''           
                                        2             'Float_32_LE_Offset_64'                     ''           

                                ... and 1 more rows
          SelectedChannelNames: {
                                'Sigend_Int16_LE_Offset_32';
                                'Unsigend_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 'file'

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

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

mds.SelectedChannelGroupNumber
mds.SelectedChannelNames
ans =

     1


ans = 

  2×1 string array

    "Sigend_Int16_LE_Offset_32"
    "Unsigend_UInt32_LE_Master_Offset_0"

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

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

preview(mds)
ans =

  8×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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, чтобы считать целое содержимое данных в одном вызове. Это - эффективный способ читать из многих файлов, когда набор данных помещается в доступную память. После выполнения readall datastore сбрасывает к началу набора данных.

data = readall(mds);
data(1:5,:)
ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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 MDF считают ценность целого файла данных на вызов. Степень datastore прибывает из прочтения нескольких файлов последовательно в наборе файла. Когда вы читаете, datastore автоматически соединяет от одного файла до следующего, пока все данные из всех файлов не считаны.

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

  data      10000x2             241767  timetable              


ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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             241767  timetable              


ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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             241767  timetable              


ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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
for ii = 1:3
    data = read(mds)
end
mds = 

  MDFDatastore with properties:

                         Files: {
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File01.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File02.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                ChannelGroupNumber    AcquisitionName        Comment        ... and 4 more columns
                                __________________    _______________    _______________        

                                        1                   ''           'Integer Types'      
                                        2                   ''           'Float Types'        


                      Channels: 
                                ChannelGroupNumber                ChannelName                 DisplayName    ... and 9 more columns
                                __________________    ____________________________________    ___________        

                                        1             'Sigend_Int16_LE_Offset_32'                 ''           
                                        1             'Unsigend_UInt32_LE_Master_Offset_0'        ''           
                                        2             'Float_32_LE_Offset_64'                     ''           

                                ... and 1 more rows
          SelectedChannelNames: {
                                'Sigend_Int16_LE_Offset_32';
                                'Unsigend_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5


data =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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     Sigend_Int16_LE_Offset_32    Unsigend_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     Sigend_Int16_LE_Offset_32    Unsigend_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)
for ii = 1:3
    data = read(mds)
end
mds = 

  MDFDatastore with properties:

                         Files: {
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File01.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File02.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                ChannelGroupNumber    AcquisitionName        Comment        ... and 4 more columns
                                __________________    _______________    _______________        

                                        1                   ''           'Integer Types'      
                                        2                   ''           'Float Types'        


                      Channels: 
                                ChannelGroupNumber                ChannelName                 DisplayName    ... and 9 more columns
                                __________________    ____________________________________    ___________        

                                        1             'Sigend_Int16_LE_Offset_32'                 ''           
                                        1             'Unsigend_UInt32_LE_Master_Offset_0'        ''           
                                        2             'Float_32_LE_Offset_64'                     ''           

                                ... and 1 more rows
          SelectedChannelNames: {
                                'Sigend_Int16_LE_Offset_32';
                                'Unsigend_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5 sec


data =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_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     Sigend_Int16_LE_Offset_32    Unsigend_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     Sigend_Int16_LE_Offset_32    Unsigend_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