Datastore ансамбля файла с результатами измерений

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

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

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

Каждый из этих файлов данных содержит одну структуру данных, bearing. Загрузите и исследуйте структуру данных от первого здорового набора данных. (Из-за объема данных операция unzip занимает несколько минут.)

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

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

Создайте и Datastore ансамбля файла конфигурации

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

Считайте данные от члена ансамбля

Функции, которые вы присвоили, говорят read и команды writeToLastMemberRead, как взаимодействовать с файлами данных, которые составляют datastore ансамбля. Таким образом, когда вы вызываете команду 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"    [146484x1 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 к файлу данных как отдельные переменные. Во-первых, добавьте новые переменные в список переменных данных в datastore ансамбля.

fensemble.DataVariables = [fensemble.DataVariables;"freq";"spectrum"];
fensemble.DataVariables
ans = 6x1 string array
    "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"    [146484x1 double]    48828     50      25 

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

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

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

Смотрите также

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте