В этом примере показано, как использовать функцию хранилища данных MDF панели инструментов сети транспортных средств для быстрой и эффективной обработки набора данных, распределенного по коллекции нескольких файлов MDF. Этот рабочий процесс также полезен, когда слишком много данных не может поместиться в доступную память.
Найдите коллекцию файлов MDF, представляющих записанную в журнал информацию из нескольких тестовых последовательностей. Обратите внимание, что файлы MDF, используемые хранилищем данных MDF в качестве набора, должны иметь одну и ту же группу каналов и структуру содержимого канала.
dir('File*.mf4')
File01.mf4 File02.mf4 File03.mf4 File04.mf4 File05.mf4
Хранилище данных 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 и как выполняются чтения. В этом случае по умолчанию используется первая группа каналов. Следует отметить, что одновременно хранилище данных может выбирать только одну группу каналов. Можно также указать определенные каналы в выбранной группе каналов для чтения. В этом случае все каналы считываются по умолчанию.
mds.SelectedChannelGroupNumber mds.SelectedChannelNames
ans =
1
ans =
2×1 string array
"Sigend_Int16_LE_Offset_32"
"Unsigend_UInt32_LE_Master_Offset_0"
Использование preview можно получить быстрый просмотр данных, доступных в наборе файлов. Предварительный просмотр всегда возвращает до восьми точек данных из первого файла в хранилище данных.
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, хранилище данных сбрасывается в начало набора данных.
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 для получения данных из набора файлов. По умолчанию операции чтения из хранилища данных MDF обеспечивают считывание всего объема данных файла за один вызов. Мощность хранилища данных зависит от последовательного чтения нескольких файлов в наборе файлов. При чтении хранилище данных автоматически выполняет переход от одного файла к другому до тех пор, пока не будут считаны все данные из всех файлов.
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 как длительность считывания точек данных по прошедшему времени. Обратите внимание, что при изменении типа считывания хранилище данных сбрасывается в начало набора данных.
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