Класс: matlab.io.datastore.SimulationDatastore
Пакет: matlab.io.datastore
Определение доступности данных для чтения
tf = hasdata(dst)
tf = hasdata( возвращает логический dst)1 (true), если имеются данные, доступные для чтения из хранилища данных (matlab.io.datastore.SimulationDatastore объект), указанный dst. В противном случае возвращается логическое значение 0 (false).
dst - Хранилище входных данныхmatlab.io.datastore.SimulationDatastore объектХранилище входных данных, указанное как matlab.io.datastore.SimulationDatastore объект. Создание SimulationDatastore объект, см. matlab.io.datastore.SimulationDatastore.
В этом примере показано, как регистрировать большие данные из моделирования, а также проверять и анализировать части этих данных, взаимодействуя с matlab.io.datastore.SimulationDatastore объект.
Вести журнал больших данных из модели
Открыть пример модели sldemo_fuelsys.
open_system('sldemo_fuelsys')

Выберите Параметры конфигурации > Импорт/экспорт данных > Данные набора данных журнала для файла.
set_param('sldemo_fuelsys','LoggingToFile','on')
Моделирование модели.
sim('sldemo_fuelsys')
Файл MAT out.mat отображается в текущей папке. Файл содержит данные для зарегистрированных сигналов, таких как fuel (который находится на корневом уровне модели).
В командной строке создайте DatasetRef объект, который ссылается на переменную регистрации по имени, sldemo_fuelsys_output.
DSRef = Simulink.SimulationData.DatasetRef('out.mat','sldemo_fuelsys_output');
Предварительный просмотр больших данных
Использовать фигурные скобки ({ и }) для извлечения сигнального элемента fuel, который является десятым элементом в DSRef, как Simulink.SimulationData.Signal объект, содержащий SimulationDatastore объект.
SimDataSig = DSRef{10};
Для упрощения взаимодействия с SimulationDatastore объект, который находится в Values имущества Signal объект, сохранение дескриптора в переменной с именем DStore.
DStore = SimDataSig.Values;
Используйте preview способ проверки первых пяти образцов зарегистрированных данных для fuel сигнал.
preview(DStore)
ans =
10x1 timetable
Time Data
______________ ______
0 sec 1.209
0.00056199 sec 1.209
0.0033719 sec 1.209
0.01 sec 1.1729
0.02 sec 1.1409
0.03 sec 1.1124
0.04 sec 1.0873
0.05 sec 1.0652
0.055328 sec 1.0652
0.055328 sec 1.0652
Проверка конкретного образца
Осмотреть 603-й образец зарегистрированного fuel данные.
Установите ReadSize имущество DStore к числу, которое, принимая во внимание ресурсы памяти, может переноситься компьютером. Например, установить ReadSize кому 200.
DStore.ReadSize = 200;
Прочитайте из хранилища данных три раза. Каждая операция считывания продвигает положение считывания на 200 выборок.
read(DStore); read(DStore); read(DStore);
Теперь, когда вы очень близко к 603-й выборке, набор ReadSize на меньшее число. Например, установить ReadSize кому 5.
DStore.ReadSize = 5;
Повторите чтение из хранилища данных.
read(DStore)
ans =
5x1 timetable
Time Data
________ ______
5.79 sec 1.6097
5.8 sec 1.6136
5.81 sec 1.6003
5.82 sec 1.5904
5.83 sec 1.5832
Третья выборка считанных данных - 603-я выборка в хранилище данных.
Проверить более ранний образец
Осмотреть 403-й образец зарегистрированного fuel данные. Из-за предыдущих операций чтения хранилище данных теперь считывается начиная с 606-го образца, поэтому необходимо сбросить хранилище данных. Затем можно прочитать от первого образца до 403-го образца.
Используйте reset метод для сброса DStore.
reset(DStore);
Набор ReadSize кому 200 снова.
DStore.ReadSize = 200;
Дважды считывайте из хранилища данных, чтобы переместить положение считывания в 401-й образец.
read(DStore); read(DStore);
Набор ReadSize кому 5 снова.
DStore.ReadSize = 5;
Чтение из хранилища данных.
read(DStore)
ans =
5x1 timetable
Time Data
________ _______
3.85 sec 0.999
3.86 sec 0.99219
3.87 sec 0.98538
3.88 sec 0.97858
3.89 sec 0.97179
Извлечь несколько образцов
Извлекают образцы с 1001 по 1020 (всего 20 образцов).
Сбросьте хранилище данных.
reset(DStore)
Переход к выборке 1001.
DStore.ReadSize = 200; for i = 1:5 read(DStore); end
Подготовьтесь к извлечению 20 образцов из хранилища данных.
DStore.ReadSize = 20;
Извлеките образцы с 1001 по 1020. Сохранение извлеченных данных в переменной с именем targetSamples.
targetSamples = read(DStore)
targetSamples =
20x1 timetable
Time Data
________ ______
9.7 sec 1.5828
9.71 sec 1.5733
9.72 sec 1.5664
9.73 sec 1.5614
9.74 sec 1.5579
9.75 sec 1.5553
9.76 sec 1.5703
9.77 sec 1.582
9.78 sec 1.5913
9.79 sec 1.5988
9.8 sec 1.605
9.81 sec 1.6101
9.82 sec 1.6145
9.83 sec 1.6184
9.84 sec 1.6049
9.85 sec 1.595
9.86 sec 1.5877
9.87 sec 1.5824
9.88 sec 1.5785
9.89 sec 1.5757
Найти максимальное значение данных в хранилище данных
Сбросьте хранилище данных.
reset(DStore)
Написать while цикл, с использованием hasdata способ для инкрементного анализа данных в порциях из 200 выборок.
DStore.ReadSize = 200; runningMax = []; while hasdata(DStore) tt = read(DStore); rawChunk = tt.Data; runningMax = max([rawChunk; runningMax]); end
Теперь переменная runningMax сохраняет максимальное значение во всем хранилище данных.
runningMax
runningMax =
1.6423
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.