Чтение данных о представителе из ансамбля 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}.Variables
ans = Variable with properties: Name: 'ToothFaultGain' Value: -2 Workspace: 'global-workspace' Description: ""
data2.SimulationInput{1}.Variables
ans = 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.