Чтение данных о представителе из ансамбля datastore
Используйте эту функцию для чтения данных из ансамблевых хранилищ данных для мониторинга условия и прогнозирующего обслуживания.
считывает данные от представителя ансамбля datastore data = read(ensemble)ensemble. Функция читает переменные, указанные в SelectedVariables свойство ансамбля datastore и возвращает их в таблицу.
Если ансамбль не читался с момента его создания (или с момента последнего сброса с помощью reset), затем read считывает данные от первого представителя ансамбля, как определено программным обеспечением. В противном случае, read считывает данные от следующего представителя ансамбля. read обновляет LastMemberRead свойство ансамбля идентифицировать самого недавно прочитанного представителя. Для получения дополнительной информации о том, как работают ансамблевые хранилища данных, смотрите Data Ensembles для мониторинга условия и прогнозирующего обслуживания.
В целом вы используете read команда для извлечения данных из simulationEnsembleDatastore объект в рабочую область MATLAB ®. Часто ваш ансамбль содержит больше переменных, чем нужно использовать для конкретного анализа. Используйте SelectedVariables свойство simulationEnsembleDatastore объект, чтобы выбрать подмножество переменных для чтения.
В данном примере используйте следующий код для создания simulationEnsembleDatastore объект, использующий данные, ранее сгенерированные при запуске модели Simulink ®, с различными значениями отказа (См. generateSimulationEnsemble.). Ансамбль включает данные моделирования для пяти различных значений параметра модели, ToothFaultGain. Из-за объема данных unzip операция занимает несколько минут.
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble =
simulationEnsembleDatastore with properties:
DataVariables: [5x1 string]
IndependentVariables: [0x0 string]
ConditionVariables: [0x0 string]
SelectedVariables: [5x1 string]
ReadSize: 1
NumMembers: 5
LastMemberRead: [0x0 string]
Files: [5x1 string]
Модель, которая сгенерировала данные, TransmissionCasingSimplified, был сконфигурирован таким образом, чтобы полученный ансамбль содержал переменные, включая данные акселерометра, Vibration, и данные тахометра, Tacho. По умолчанию в simulationEnsembleDatastore объект определяет все эти переменные как переменные данных и выбранные переменные, как показано на DataVariables и SelectedVariables свойства.
ensemble.DataVariables
ans = 5x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
ensemble.SelectedVariables
ans = 5x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
Предположим, что для анализа, который вы хотите сделать, вам нужно только Vibration данные и Simulink.SimulationInput объект, который описывает условия, при которых были моделированы данные этого представителя. Задайте ensemble.SelectedVariables чтобы задать переменные, которые вы хотите считать. The read затем команда извлекает эти переменные из текущего представителя ансамбля.
ensemble.SelectedVariables = ["Vibration";"SimulationInput"]; data1 = read(ensemble)
data1=1×2 table
Vibration SimulationInput
___________________ ______________________________
{20202x1 timetable} {1x1 Simulink.SimulationInput}
data.Vibration - массив ячеек, содержащий один timetable который сохраняет времена симуляции и соответствующий сигнал вибрации. Теперь можно обработать эти данные по мере необходимости. Например, извлеките данные о вибрации из таблицы и постройте график.
vibdata1 = data1.Vibration{1};
plot(vibdata1.Time,vibdata1.Data)
title('Vibration - First Ensemble Member')
При следующем звонке read на этом ансамбле последнее читаемое представителю обозначение переходит к следующему представителю ансамбля (см. Данные ансамбли для Условия мониторинга и прогнозирующего обслуживания). Прочитайте выбранные переменные от следующего представителя ансамбля.
data2 = read(ensemble)
data2=1×2 table
Vibration SimulationInput
___________________ ______________________________
{20215x1 timetable} {1x1 Simulink.SimulationInput}
Чтобы подтвердить это data1 и data2 содержат данные от разных представителей ансамбля, исследуют значения переменного параметра модели, ToothFaultGain. Для каждого ансамбля это значение хранится в Variables поле SimulationInput переменная.
data1.SimulationInput{1}.Variablesans =
Variable with properties:
Name: 'ToothFaultGain'
Value: -2
Workspace: 'global-workspace'
Description: ""
data2.SimulationInput{1}.Variablesans =
Variable with properties:
Name: 'ToothFaultGain'
Value: -1.5000
Workspace: 'global-workspace'
Description: ""
Этот результат подтверждает, что data1 от представителя ансамбля с ToothFaultGain = -2, и data2 от представителя с ToothFaultGain =-1.5 <reservedrangesplaceholder0>
Создайте file ensemble datastore для данных, хранящихся в файлах MATLAB, и сконфигурируйте его с функциями, которые говорят программному обеспечению, как читать и записывать в datastore. (Для получения дополнительной информации о настройке файловых ансамблевых хранилищ данных смотрите File Ensemble Datastore With Measured Data.)
% Create ensemble datastore that points to datafiles in current folder unzip fileEnsData.zip % extract compressed files location = pwd; extension = '.mat'; fensemble = fileEnsembleDatastore(location,extension); % Specify data and condition variables fensemble.DataVariables = ["gs";"sr";"load";"rate"]; fensemble.ConditionVariables = "label"; % Configure with functions for reading and writing variable data addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path fensemble.ReadFcn = @readBearingData; fensemble.WriteToMemberFcn = @writeBearingData;
Функции подсказывают read и writeToLastMemberRead команды для взаимодействия с файлами данных, составляющими ансамбль. Таким образом, когда вы вызываете read команда, она использует readBearingData чтобы считать все переменные в fensemble.SelectedVariables. В данном примере readBearingData извлекает запрашиваемые переменные из структуры, bearingи другие переменные, сохраненные в файле. Он также анализирует имя файла для состояния отказа данных.
Укажите переменные для чтения и прочтите их от первого представителя ансамбля.
fensemble.SelectedVariables = ["gs";"load";"label"]; data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000x1 double} 0
Теперь можно обработать данные от представителя по мере необходимости. В данном примере вычислите среднее значение сигнала, сохраненного в переменной gs. Извлеките данные из таблицы, возвращенной read.
gsdata = data.gs{1};
gsmean = mean(gsdata);Можно записать среднее значение gsmean назад в файл данных как новая переменная. Для этого сначала разверните список переменных данных в ансамбле, чтобы включить переменную для нового значения. Вызовите новую переменную gsMean.
fensemble.DataVariables = [fensemble.DataVariables;"gsMean"]fensemble =
fileEnsembleDatastore with properties:
ReadFcn: @readBearingData
WriteToMemberFcn: @writeBearingData
DataVariables: [5x1 string]
IndependentVariables: [0x0 string]
ConditionVariables: "label"
SelectedVariables: [3x1 string]
ReadSize: 1
NumMembers: 5
LastMemberRead: "/tmp/BR2021ad_1657350_6935/mlx_to_docbook3/tpb00852e4/predmaint-ex34165887/FaultData_01.mat"
Files: [5x1 string]
Затем запишите производное среднее значение в файл, соответствующий представителю ансамбля с последним чтением. (См. «Ансамбли данных» для мониторинга условия и прогнозирующего обслуживания.) Когда вы звоните writeToLastMemberRead, он преобразует данные в структуру и вызывает fensemble.WriteToMemberFcn чтобы записать данные в файл.
writeToLastMemberRead(fensemble,'gsMean',gsmean);Вызывающие read снова переводит индикатор последнего представителя чтения в следующий файл ансамбля и считывает данные из этого файла .
data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000x1 double} 50
Можно подтвердить, что эти данные получены от другого представителя, рассмотрев load переменная в таблице. Здесь его значение составляет 50, в то время как в ранее прочитанном представителе оно составляло 0.
Можно повторить шаги обработки, чтобы вычислить и добавить среднее значение для этого представителя ансамбля. На практике более полезно автоматизировать процесс чтения, обработки и записи данных. Для этого сбросьте ансамбль в состояние, в котором данные не были считаны. Затем выполните цикл через ансамбль и выполните чтение, обработку и запись шагов для каждого представителя.
reset(fensemble) while hasdata(fensemble) data = read(fensemble); gsdata = data.gs{1}; gsmean = mean(gsdata); writeToLastMemberRead(fensemble,'gsMean',gsmean); end
The hasdata команда возвращает false когда каждый представитель ансамбля был прочитан. Теперь каждый файл данных в ансамбле включает gsMean переменная, выведенная из gs данных в этом файле. Можно использовать методы, подобные этому циклу, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирования-обслуживания. Для примера, более подробно иллюстрирующего использование file ensemble datastore в процессе разработки алгоритмов, см. Раздел «Диагностика отказа подшипника качения». В примере также показано, как использовать Parallel Computing Toolbox™ для ускорения обработки больших ансамблей данных.
Чтобы подтвердить, что производная переменная присутствует в файле datastore ансамбля, прочитайте ее с первых и вторых представителей ансамбля. Для этого снова сбросьте ансамбль и добавьте новую переменную к выбранным переменным. На практике, после того, как вы вычислили производные значения, может быть полезно считать только эти значения, не перечитывая необработанные данные, которые могут занимать значительное пространство в памяти. В данном примере считайте выбранные переменные, которые включают новую переменную, gsMean, но не включать необработанные данные, gs.
reset(fensemble) fensemble.SelectedVariables = ["label";"load";"gsMean"]; data1 = read(fensemble)
data1=1×3 table
label load gsMean
________ ____ ________
"Faulty" 0 -0.22648
data2 = read(fensemble)
data2=1×3 table
label load gsMean
________ ____ ________
"Faulty" 50 -0.22937
rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path
Чтение данных от нескольких представителей ансамбля за один вызов в read команда, используйте ReadSize свойство ансамбля datastore. Этот пример использует simulationEnsembleDatastore, но можно использовать тот же метод для fileEnsembleDatastore.
Используйте следующий код для создания simulationEnsembleDatastore объект, использующий данные, ранее сгенерированные при запуске модели Simulink, при различных значениях отказа (см generateSimulationEnsemble). Ансамбль включает данные моделирования для пяти различных значений параметра модели, ToothFaultGain. (Из-за объема данных unzip операция может занять минуту или две.) Задайте некоторые из считываемых переменных данных.
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout'); ensemble.SelectedVariables = ["Vibration";"SimulationInput"];
По умолчанию вызов read на этом ансамбле datastore возвращается таблица с одной строкой, содержащая значения Vibration и SimulationInput переменные для первого представителя ансамбля. Измените ReadSize свойство для чтения сразу трёх представителей.
ensemble.ReadSize = 3; data1 = read(ensemble)
data1=3×2 table
Vibration SimulationInput
___________________ ______________________________
{20202x1 timetable} {1x1 Simulink.SimulationInput}
{20215x1 timetable} {1x1 Simulink.SimulationInput}
{20204x1 timetable} {1x1 Simulink.SimulationInput}
read возвращает таблицу с тремя строками, где каждая строка содержит данные от одного из первых , вторых и третьих представителей ансамбля. read также обновляет LastReadMember свойство datastore ансамбля для строковых массивов, содержащей пути трех соответствующих файлов. Избегайте установки ReadSize к такому большому значению, чтобы рисковать истощить память при загрузке данных.
Если ансамбль содержит три или более дополнительных представители, следующая read операция возвращает данные четвертых , пятых и шестых представителей. Поскольку ансамбль этого примера содержит всего пять представителей, следующая read операция возвращает только две строки.
data2 = read(ensemble)
data2=2×2 table
Vibration SimulationInput
___________________ ______________________________
{20213x1 timetable} {1x1 Simulink.SimulationInput}
{20224x1 timetable} {1x1 Simulink.SimulationInput}
ensemble - Ensemble datastorefileEnsembleDatastore | объекта simulationEnsembleDatastore объектEnsemble datastore для чтения, указывается как:
simulationEnsembleDatastore объект - read читает следующего представителя ансамбля.
fileEnsembleDatastore объект - read использует функцию, заданную в ensemble.ReadFcn свойство для чтения следующего представителя ансамбля. (Для получения дополнительной информации о работе с файловыми ансамблевыми хранилищами данных см. fileEnsembleDatastore.)
В любом случае, read возвращает таблицу, содержащую все переменные, указанные в ensemble.SelectedVariables.
data - Выбранные переменные из представителя ансамбляtableВыбранные переменные от представителя ансамбля, возвращенные как table. Табличные переменные являются выбранными переменными, а данные таблицы - это значения, считанные из данных ансамбля. По умолчанию, read считывает один представитель ансамбля за раз и возвращает одну строку таблицы.
Чтобы читать несколько представители ансамбля за один раз, установите ReadSize свойство ensemble в значение, больше 1. Например, если вы задаете ReadSize до 3, затем read читает следующие 3 представители ансамбля и возвращает таблицу с 3 строками. Если меньше ReadSize представители непрочитаны, тогда read возвращает таблицу с таким количеством строк, сколько осталось представителей. Для получения примера смотрите Read Multiple Ensemble Представителей in One Operation. Избегайте установки ReadSize к такому большому значению, как риск истощения памяти при загрузке данных.
info - Информация о данных и представителяхДанные и сведения о представителе ансамбля, возвращенные как структура с полями:
Size - Размерности табличной data, возвращается как вектор. Например, если ваш ансамбль имеет четыре переменные, заданные в ensemble.SelectedVariables, затем Info.Size = [1 4].
FileName - Путь к файлу данных, соответствующему полученному члену ансамбля, возвращаемый в виде строки. Для примера, "C:\Data\Experiment1\fault1.mat". Вызов read также устанавливает LastMemberRead свойство ансамбля на это значение. Если на ReadSize свойство ensemble больше 1, это значение является строковым вектором, содержащим пути ко всем доступным файлам.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.