Этот пример показывает вам, как использовать функцию datastore MDF Vehicle Network Toolbox™ к быстро и эффективно обработать распространение набора данных через набор нескольких MDF-файлов. Этот рабочий процесс также ценен, когда существует слишком много данных, чтобы поместиться в доступную память.
Найдите набор MDF-файлов, представляющих регистрируемую информацию от нескольких тестовых последовательностей. Обратите внимание на то, что MDF-файлы, которые будут использоваться datastore MDF в качестве набора, должны иметь ту же группу канала и структуру содержимого канала.
dir("File*.mf4")
File01.mf4 File02.mf4 File03.mf4 File04.mf4 File05.mf4
Вы создаете 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
Несколько опций позволяют управление того, какие данные считаны из MDF-файлов и как чтения выполняются. В этом случае первая группа канала используется по умолчанию. Обратите внимание на то, что только одна группа канала может быть выбрана datastore за один раз. Можно также задать определенные каналы в выбранной группе канала, чтобы читать. В этом случае все каналы читаются по умолчанию.
mds.SelectedChannelGroupNumber
ans = 1
mds.SelectedChannelNames
ans = 2x1 string
"Signed_Int16_LE_Offset_32"
"Unsigned_UInt32_LE_Master_Offset_0"
Используя 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
Можно использовать 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
Можно использовать 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
В любое время можно вызвать reset
функционируйте, чтобы запуститься в начале набора данных.
reset(mds)
Можно использовать 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
Можно также задать 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-файлам путем очищения переменной datastore MDF из рабочей области.
clear mds