Этот пример показывает вам, как использовать функцию 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:
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'
Несколько опций позволяют управление того, какие данные считаны из MDF-файлов и как чтения выполняются. В этом случае первая группа канала используется по умолчанию. Обратите внимание на то, что только одна группа канала может быть выбрана datastore за один раз. Можно также задать определенные каналы в выбранной группе канала, чтобы читать. В этом случае все каналы читаются по умолчанию.
mds.SelectedChannelGroupNumber mds.SelectedChannelNames
ans =
1
ans =
2×1 string array
"Sigend_Int16_LE_Offset_32"
"Unsigend_UInt32_LE_Master_Offset_0"
Используя 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
Можно использовать 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
Можно использовать 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
В любое время можно вызвать reset функционируйте, чтобы запуститься снова в начале набора данных.
reset(mds)
Можно использовать 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
Можно также задать 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