read

Чтение данных о представителе из ансамбля datastore

Описание

Используйте эту функцию для чтения данных из ансамблевых хранилищ данных для мониторинга условия и прогнозирующего обслуживания.

пример

data = read(ensemble) считывает данные от представителя ансамбля datastore ensemble. Функция читает переменные, указанные в SelectedVariables свойство ансамбля datastore и возвращает их в таблицу.

Если ансамбль не читался с момента его создания (или с момента последнего сброса с помощью reset), затем read считывает данные от первого представителя ансамбля, как определено программным обеспечением. В противном случае, read считывает данные от следующего представителя ансамбля. read обновляет LastMemberRead свойство ансамбля идентифицировать самого недавно прочитанного представителя. Для получения дополнительной информации о том, как работают ансамблевые хранилища данных, смотрите Data Ensembles для мониторинга условия и прогнозирующего обслуживания.

[data,info] = read(ensemble) также возвращает информацию о местоположении, из которого считываются данные, и размере данных.

Примеры

свернуть все

В целом вы используете 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')

Figure contains an axes. The axes with title Vibration - First Ensemble Member contains an object of type line.

При следующем звонке 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 datastore для чтения, указывается как:

  • simulationEnsembleDatastore объект - read читает следующего представителя ансамбля.

  • fileEnsembleDatastore объект - read использует функцию, заданную в ensemble.ReadFcn свойство для чтения следующего представителя ансамбля. (Для получения дополнительной информации о работе с файловыми ансамблевыми хранилищами данных см. fileEnsembleDatastore.)

В любом случае, read возвращает таблицу, содержащую все переменные, указанные в ensemble.SelectedVariables.

Выходные аргументы

свернуть все

Выбранные переменные от представителя ансамбля, возвращенные как table. Табличные переменные являются выбранными переменными, а данные таблицы - это значения, считанные из данных ансамбля. По умолчанию, read считывает один представитель ансамбля за раз и возвращает одну строку таблицы.

Чтобы читать несколько представители ансамбля за один раз, установите ReadSize свойство ensemble в значение, больше 1. Например, если вы задаете ReadSize до 3, затем read читает следующие 3 представители ансамбля и возвращает таблицу с 3 строками. Если меньше ReadSize представители непрочитаны, тогда read возвращает таблицу с таким количеством строк, сколько осталось представителей. Для получения примера смотрите Read Multiple Ensemble Представителей in One Operation. Избегайте установки ReadSize к такому большому значению, как риск истощения памяти при загрузке данных.

Данные и сведения о представителе ансамбля, возвращенные как структура с полями:

  • Size - Размерности табличной data, возвращается как вектор. Например, если ваш ансамбль имеет четыре переменные, заданные в ensemble.SelectedVariables, затем Info.Size = [1 4].

  • FileName - Путь к файлу данных, соответствующему полученному члену ансамбля, возвращаемый в виде строки. Для примера, "C:\Data\Experiment1\fault1.mat". Вызов read также устанавливает LastMemberRead свойство ансамбля на это значение. Если на ReadSize свойство ensemble больше 1, это значение является строковым вектором, содержащим пути ко всем доступным файлам.

Введенный в R2018a