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