В этом примере показано, как использовать нейронную сеть для глубокого обучения LSTM в модели Simulink®, чтобы предсказать остающийся срок полезного использования (RUL) механизма. Вы включаете сеть в модели Simulink при помощи Stateful Predict
блокируйтесь, который предсказывает RUL в каждом шаге симуляции.
Этот пример использует данные из Турбовентиляторного Набора Данных моделирования Ухудшения Engine как описано в [1]. Пример использует обученную сеть LSTM, чтобы предсказать RUL механизма (прогнозирующее обслуживание), измеренный в циклах, учитывая данные временных рядов, представляющие различные датчики в механизме. Данные, используемые, чтобы обучить сеть, содержат симулированные данные временных рядов для 100 механизмов. Каждая последовательность имеет 17 функций различной длины и соответствует полному экземпляру запуска к отказу (RTF). Для получения дополнительной информации о том, как обучить сеть, смотрите, что Регрессия От последовательности к последовательности Использует Глубокое обучение.
Загрузите и разархивируйте Турбовентиляторный Набор Данных моделирования Ухудшения Engine от Репозитория данных Предзнаменований (НАСА) [2].
Каждые временные ряды представляют различный механизм. Каждый механизм запускается с неизвестных степеней начального износа и производственного изменения. Механизм действует обычно в начале каждых временных рядов и разрабатывает отказ в какой-то момент во время ряда. В наборе обучающих данных отказ растет в величине до системного отказа.
Данные содержат сжатые до zip текстовые файлы с 26 столбцами чисел, разделенных пробелами. Каждая строка является снимком состояния данных, взятых во время одного рабочего цикла, и каждый столбец является различной переменной. Столбцы соответствуют следующему:
Столбец 1: Модульный номер
Столбец 2: Время в циклах
Столбцы 3-5: Операционные настройки
Столбцы 6-26: измерения Датчика 1–21
filename = "CMAPSSData.zip"; dataFolder = "data"; unzip(filename,dataFolder)
Загрузите данные с помощью processTurboFanDataTrain
функция помощника. processTurboFanDataTrain
функционируйте извлекает данные из filenamePredictors
и возвращает массив ячеек XTrain
, который содержит учебные данные о предикторе.
filenamePredictors = fullfile(dataFolder,"train_FD001.txt");
[XTrain] = processTurboFanDataTrain(filenamePredictors);
Поскольку сеть была обучена с функциями, которые не остаются постоянными, навсегда продвигается, функции с постоянными значениями навсегда продвигается потребность, которая будет удалена для предсказания. Найдите строки данных, которые имеют те же минимальные и максимальные значения и удаляют строки.
m = min([XTrain{:}],[],2); M = max([XTrain{:}],[],2); idxConstant = M == m; for i = 1:numel(XTrain) XTrain{i}(idxConstant,:) = []; end
Нормируйте учебные предикторы, чтобы иметь нулевое среднее значение и модульное отклонение. Чтобы вычислить среднее и стандартное отклонение по всем наблюдениям, конкатенируйте данные о последовательности горизонтально.
mu = mean([XTrain{:}],2); sig = std([XTrain{:}],0,2); for i = 1:numel(XTrain) XTrain{i} = (XTrain{i} - mu) ./ sig; end
В модели Simulink мы вычисляем RUL для одного механизма только. В этом примере мы извлекаем 9-й элемент XTrain
и сохраните его в переменной под названием SensorData. Y
ou может выбрать любой другой механизм из XTrain
cellArray. SensorData
двойной массив размера 17 201. Каждая строка соответствует одной функции, и каждый столбец соответствует показаниям датчика в данном цикле.
SensorData = XTrain{9};
Модели Simulink имеют связанное время симуляции, которое в этом примере должно быть связано с циклами механизма. Поэтому мы задаем timeseries под названием EngineData
, который хранит данные о датчике как объект timeseries, который может загрузиться в модели Simulink. Когда временем симуляции по умолчанию в Simulink является 10.0
и механизм пробегает 201 цикл, Time
поле EngineData
потребности быть массивом размера 201 1 со значениями, линейно увеличивающимися от 0 до 10.
Time = linspace(0,10,201)'; EngineData = timeseries(SensorData',Time);
Верхняя панель этого рисунка показывает показания датчика от каждого датчика в каждом цикле и нижних телевикторинах RUL механизма в модулях циклов. После 201 цикла механизм прекращает действовать. Отметьте, если вы выбираете другой механизм из XTrain
данные, затем необходимо адаптировать Time
поле EngineData
соответственно, когда каждый механизм действует для различного количества циклов.
Загрузите модель Simulink RULPredictionLSTM.slx
.
modelName = 'RULPredictionLSTM';
open_system(modelName);
EngineData
загружается от базового рабочего пространства с помощью From Workspace
блок. В этом примере, временном шаге в EngineData
0.05. S
o, мы устанавливаем шаг расчета From Workspace
блокируйтесь к 0,05. Следовательно, в первом шаге блок выводит первую строку EngineData
, на втором шаге это выводит вторую строку - соответствие второму циклу механизма - и так далее. Если другой механизм выбран из XData
, затем шаг расчета блока должен быть обновлен соответственно.
set_param([modelName,'/From Workspace'],'SampleTime','0.05');
Stateful Predict
блок загружает предварительно обученную сеть LSTM в turbofanNet
MAT-файл и возвращает RUL в своем выходном порту. Stateful Predict
блок обновляет состояние сети с каждым предсказанием, улучшая предсказание текущего Half Gauge
RUL.The блокируйтесь показывает значение расчетного RUL (в модулях циклов механизма) во время симуляции.
RUL_sigSpec = Simulink.HMI.SignalSpecification; RUL_sigSpec.BlockPath = Simulink.BlockPath('RULPredictionLSTM/Stateful Predict'); set_param('RULPredictionLSTM/Half Gauge','Binding',RUL_sigSpec)
Поскольку симуляция считывает данные из MAT-файла, это запускается очень быстро и может затруднить, чтобы следовать. Чтобы замедлить симуляцию, установите опцию Следующего Симуляции на 0,5.
set_param(modelName,'EnablePacing','on'); set_param(modelName,'PacingRate',0.5);
Чтобы вычислить RUL, запустите симуляцию.
sim(modelName);
Рисунок показывает модель, в то время как она запускается. Прибор показывает предполагаемый RUL, соответствующий в этом случае к 90 циклам. В конце симуляции RUL возвращен в Базовое рабочее пространство в форме единого массива, содержа значения, вычисленные в каждой итерации симуляции.
Вы могли интегрировать эту систему в большей среде, например, в системе, которая постоянно контролирует состояние механизма, и которая принимает предупредительные меры, если RUL падает ниже данного пользовательского значения.
Saxena, Abhinav, Кай Гоебель, Дон Саймон и Нил Экланд. "Повредите моделирование распространения для симуляции запуска к отказу авиационного двигателя". В Предзнаменованиях и медицинском управлении, 2008. PHM 2008. Международная конференция по вопросам, стр 1-9. IEEE, 2008.
Saxena, Abhinav, Кай Гоебель. "Турбовентиляторный Набор Данных моделирования Ухудшения Engine". НАСА Репозиторий данных Предзнаменований Эймса https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/, Исследовательский центр Эймса, Поле Moffett, CA
Stateful Predict | Stateful Classify | Predict | Image Classifier