exponenta event banner

Хранилище данных файлового ансамбля с измеренными данными

При разработке алгоритмов прогностического обслуживания часто используются большие наборы данных, собираемых при работе системы в различных условиях. 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 при котором эти данные были записаны, и другие переменные данных.

Создание и настройка хранилища данных файлового ансамбля

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

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

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

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

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

Присвойте эти функции ReadFcn и WriteToMemberFcn свойства хранилища данных ансамбля соответственно.

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]

Считывание данных от участника ансамбля

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

Укажите переменные для чтения и прочтите их от первого участника ансамбля. 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 

Запись данных члену ансамбля

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

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

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

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 снова считывает данные из следующего файла в хранилище данных ансамбля и обновляет свойство 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.

Данные пакетной обработки от всех участников ансамбля

Можно повторить шаги обработки для вычисления и добавления спектра для этого члена ансамбля. На практике более полезно автоматизировать процесс чтения, обработки и записи данных. Для этого следует сбросить хранилище данных ансамбля в состояние, в котором данные не считывались. ( 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

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

Чтобы подтвердить, что производные переменные присутствуют в хранилище данных ансамбля файлов, прочитайте их у первого и второго участников ансамбля. Для этого снова сбросьте ансамбль и добавьте новые переменные к выбранным переменным. На практике после вычисления производных значений может быть полезно считывать только эти значения без повторного чтения необработанных данных, что может занять значительное место в памяти. В этом примере прочитайте выбранные переменные, которые включают новые переменные, но не включают необработанные данные. 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

См. также

| |

Связанные темы