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