Предсказание временных рядов в Simulink Используя нейронную сеть для глубокого обучения

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

Загрузите модель Simulink RULPredictionLSTM.slx.

modelName = 'RULPredictionLSTM';
open_system(modelName);

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

Ссылки

  1. Saxena, Abhinav, Кай Гоебель, Дон Саймон и Нил Экланд. "Повредите моделирование распространения для симуляции запуска к отказу авиационного двигателя". В Предзнаменованиях и медицинском управлении, 2008. PHM 2008. Международная конференция по вопросам, стр 1-9. IEEE, 2008.

  2. Saxena, Abhinav, Кай Гоебель. "Турбовентиляторный Набор Данных моделирования Ухудшения Engine". НАСА Репозиторий данных Предзнаменований Эймса https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/, Исследовательский центр Эймса, Поле Moffett, CA

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

| | |

Похожие темы