File Ensemble Datastore с измеренными данными

При проекте алгоритма прогнозирующего обслуживания вы часто работаете с большими наборами данных, собранными из операции вашей системы при меняющихся условиях. The fileEnsembleDatastore объект помогает вам управлять такими данными и взаимодействовать с ними. В данном примере создайте fileEnsembleDatastore объект, который указывает на ансамблевые данные на диске. Сконфигурируйте его с функциями, которые считывают данные из и записывают данные в ансамбль.

Структура файлов данных

В данном примере у вас есть два файла данных, содержащих исправные рабочие данные из несущей системы, baseline_01.mat и baseline_02.mat. У вас также есть три файла данных, содержащих дефектные данные из одной системы, FaultData_01.mat, FaultData_02.mat, и FaultData_03.mat. На практике у вас может быть намного больше файлов данных.

Каждый из этих файлов данных содержит одну структуру данных, bearing. Загрузите и исследуйте структуру данных из первого исправного набора данных.

unzip fileEnsData.zip  % extract compressed files
load baseline_01.mat
bearing
bearing = struct with fields:
      sr: 97656
      gs: [5000x1 double]
    load: 270
    rate: 25

Структура содержит вектор данных акселерометра gs, частота дискретизации sr при котором эти данные были записаны, и другие переменные данных.

Создайте и сконфигурируйте File Ensemble Datastore

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

fensemble = fileEnsembleDatastore(pwd,'.mat');

Прежде чем вы сможете взаимодействовать с данными в ансамбле, необходимо создать функции, которые скажут программному обеспечению, как обработать файлы данных, чтобы считать переменные в рабочую область MATLAB ® и записать данные обратно в файлы. В данном примере используйте следующие предоставленные функции:

  • readBearingData - Извлечение запрашиваемых переменных из структуры, bearingи другие переменные, сохраненные в файле. Эта функция также анализирует имя файла для состояния отказа данных. Функция возвращает строку таблицы, содержащую по одной переменной таблицы для каждой запрашиваемой переменной.

  • writeBearingData - Возьмите структуру и запишите ее переменные в файл данных как отдельные сохраненные переменные.

Присвойте эти функции ReadFcn и WriteToMemberFcn свойства ансамбля datastore, соответственно.

addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path

fensemble.ReadFcn = @readBearingData;
fensemble.WriteToMemberFcn = @writeBearingData; 

Наконец, установите свойства ансамбля, чтобы идентифицировать переменные данных и переменные условия.

fensemble.DataVariables = ["gs";"sr";"load";"rate"];
fensemble.ConditionVariables = ["label";"file"];

Осмотрите ансамбль. Функции и имена переменных присваиваются соответствующим свойствам.

fensemble
fensemble = 
  fileEnsembleDatastore with properties:

                 ReadFcn: @readBearingData
        WriteToMemberFcn: @writeBearingData
           DataVariables: [4x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: [2x1 string]
       SelectedVariables: [0x0 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

Чтение данных от представителя Ensemble

Функции, которые вы назначили, говорят read и writeToLastMemberRead команды для взаимодействия с файлами данных, входящими в состав ансамбля datastore. Таким образом, когда вы вызываете read команда, она использует readBearingData чтобы считать все переменные в fensemble.SelectedVariables.

Укажите переменные для чтения и прочтите их от первого представителя ансамбля. The read команда считывает данные из первого представителя ансамбля в строку таблицы в рабочем пространстве MATLAB. Программа определяет, какой представитель ансамбля будет считываться первым.

fensemble.SelectedVariables = ["file";"label";"gs";"sr";"load";"rate"];
data = read(fensemble)
data=1×6 table
     label           file               gs            sr      load    rate
    ________    ______________    _______________    _____    ____    ____

    "Faulty"    "FaultData_01"    {5000x1 double}    48828     0       25 

Запись данных в представитель Ensemble

Предположим, что вы хотите проанализировать данные акселерометра gs путем вычисления его степени, а затем записи данных спектра степени обратно в ансамбль. Для этого сначала извлеките данные из таблицы и вычислите спектр.

gsdata = data.gs{1};
sr = data.sr;
[pdata,fpdata] = pspectrum(gsdata,sr);
pdata = 10*log10(pdata); % Convert to dB

Можно записать вектор частоты fpdata и спектр степени pdata в файл данных как отдельные переменные. Сначала добавьте новые переменные в список переменных данных в ансамбле datastore.

fensemble.DataVariables = [fensemble.DataVariables;"freq";"spectrum"];
fensemble.DataVariables
ans = 6x1 string
    "gs"
    "sr"
    "load"
    "rate"
    "freq"
    "spectrum"

Затем запишите новые значения в файл, соответствующий представителю ансамбля с последним чтением. Когда вы звоните writeToLastMemberRead, он преобразует данные в структуру и вызывает fensemble.WriteToMemberFcn чтобы записать данные в файл.

writeToLastMemberRead(fensemble,'freq',fpdata,'spectrum',pdata);

Можно добавить новую переменную в fensemble.SelectedVariables или другие свойства для идентификации переменных, при необходимости.

Вызывающие read снова считывает данные из следующего файла в datastore ансамбля и обновляет свойство fensemble.LastMemberRead.

data = read(fensemble)
data=1×6 table
     label           file               gs            sr      load    rate
    ________    ______________    _______________    _____    ____    ____

    "Faulty"    "FaultData_02"    {5000x1 double}    48828     50      25 

Можно подтвердить, что эти данные от другого представителя load переменная в таблице. Здесь его значение составляет 50, в то время как в ранее прочитанном представителе оно составляло 0.

Пакетная обработка данных от всех представителей ансамбля

Можно повторить шаги обработки, чтобы вычислить и добавить спектр для этого представителя ансамбля. На практике более полезно автоматизировать процесс чтения, обработки и записи данных. Для этого сбросьте ансамбль datastore в состояние, в котором данные не были считаны. (The reset операция не меняется fensemble.DataVariables, которая содержит две новые переменные, которые вы уже добавили.) Затем выполните цикл через ансамбль и выполните чтение, обработку и запись шагов для каждого представителя.

reset(fensemble)
while hasdata(fensemble)
    data = read(fensemble);
    gsdata = data.gs{1};
    sr = data.sr;
    [pdata,fpdata] = pspectrum(gsdata,sr);
    writeToLastMemberRead(fensemble,'freq',fpdata,'spectrum',pdata);
end

The hasdata команда возвращает false когда каждый представитель ансамбля был прочитан. Теперь каждый файл данных в ансамбле включает spectrum и freq переменные, выведенные из данных акселерометра в этом файле. Можно использовать методы, подобные этому циклу, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирования-обслуживания. Для примера, более подробно иллюстрирующего использование file ensemble datastore в процессе разработки алгоритмов, см. Раздел «Диагностика отказа подшипника качения». Этот пример также показывает использование Parallel Computing Toolbox™ для ускорения обработки большого ансамбля.

Чтобы подтвердить, что производные переменные присутствуют в файле datastore ансамбля, прочитайте их с первых и вторых представителей ансамбля. Для этого снова сбросьте ансамбль и добавьте новые переменные к выбранным переменным. На практике, после того, как вы вычислили производные значения, может быть полезно считать только эти значения, не перечитывая необработанные данные, которые могут занимать значительное пространство в памяти. В данном примере считайте выбранные переменные, которые включают новые переменные, но не включают необработанные данные, gs.

reset(fensemble)
fensemble.SelectedVariables = ["label","load","freq","spectrum"];
data1 = read(fensemble)
data1=1×4 table
     label      load         freq             spectrum    
    ________    ____    _______________    _______________

    "Faulty"     0      {4096x1 double}    {4096x1 double}

data2 = read(fensemble)
data2=1×4 table
     label      load         freq             spectrum    
    ________    ____    _______________    _______________

    "Faulty"     50     {4096x1 double}    {4096x1 double}

rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path

См. также

| |

Похожие темы