В этом примере показано, как использовать MATLAB® Coder, чтобы развернуть алгоритм для предсказания остающегося срока полезного использования (RUL). Такая генерация кода полезна, когда вы обучили модель предсказания RUL, такую как linearDegradationModel
или covariateSurvivalModel
в MATLAB и готовы развернуть алгоритм прогнозирования для другой среды. Этот пример использует MATLAB Coder, чтобы сгенерировать файл MEX, который является исполняемым файлом из MATLAB. Можно использовать подобную процедуру, чтобы сгенерировать код для любой цели тот MATLAB Coder поддержки.
Рабочий процесс для генерации кода для предсказания RUL проиллюстрирован в следующей схеме. Первый шаг должен подбирать модель RUL с помощью исторических данных от системы, как описано в Обновлении Предсказание RUL, когда Данные Прибывают. Необходимо также записать функцию точки входа, от которой можно сгенерировать код. Этой функцией является функция MATLAB, которая получает новые данные из вашей системы и использует ее, чтобы предсказать новый RUL.
Можно использовать рабочий процесс этого примера, чтобы сгенерировать код для предсказания остающегося срока полезного использования с основанными на ухудшении моделями RUL (linearDegradationModel
и exponentialDegradationModel
) или с основанными на выживании моделями (covariateSurvivalModel
и reliabilitySurvivalModel
).
Прежде, чем сгенерировать код для предсказания RUL, необходимо подбирать модель RUL с помощью исторических данных. В данном примере загрузите данные в linTrainTables.mat
. Этот файл содержит измерения некоторого индикатора состояния, бравшегося в зависимости от времени, организованный в таблицы со столбцом маркирует "Time"
и "Condition"
. Используйте эти данные, чтобы обучить линейную модель ухудшения. (Для получения дополнительной информации о конфигурировании и обучении этот тип модели RUL, смотрите linearDegradationModel
.)
load('linTrainTables.mat') mdl = linearDegradationModel; fit(mdl,linTrainTables,"Time","Condition")
Если вы имеете обученную модель RUL, сохраняете модель с помощью saveRULModelForCoder
. Эта функция сохраняет модель RUL в файл MAT. Позже, в функции точки входа, используйте loadRULModelForCoder
загрузить и восстановить модель RUL из того файла.
saveMATfilename = 'savedModel.mat';
saveRULModelForCoder(mdl,saveMATfilename);
Функция точки входа является функцией, для которой вы хотите сгенерировать код. Когда предсказание RUL, ваша точка входа функциональная сила берет входные данные, обрабатывает его в некотором роде, чтобы извлечь индикатор состояния, и затем использовать predictRUL
получить новую оценку RUL из модели.
В данном примере создайте функцию точки входа degradationRULPredict.m
, как показано здесь.
type degradationRULPredict.m
function [estRUL,ci,pdfRUL] = degradationRULPredict(data) %#codegen threshold = 60; % Load prepared model mdl = loadRULModelForCoder('savedModel.mat'); % Use input data for new prediction [estRUL,ci,pdfRUL] = predictRUL(mdl,data,threshold); end
Эта функция берет в качестве входа точку данных, состоящую из времени и значения индикатора состояния. Функция использует loadRULModelForCoder
загружать версию обученной модели, ранее сохраненной с saveRULModelForCoder
. Функция также включает необходимый %#codegen
директива, которая дает Проверке кода команду с Анализатором кода (MATLAB Coder) помогать вам диагностировать и зафиксировать нарушения, которые могут привести к ошибкам во время генерации кода или во времени выполнения.
Простая функция точки входа этого примера загружает модель и получает новое предсказание RUL. Ваша функция точки входа может сделать другие операции, такие как последующая обработка на входных данных, чтобы извлечь индикатор состояния для использования в предсказании. Однако все функции и операции в функции точки входа должны поддержать генерацию кода. Для основанных на ухудшении моделей RUL ваша функция может также использовать update
команда, чтобы обновить предсказание, основанное на модели на новых данных. Когда вы делаете так, можно включать дополнительный код, чтобы сохранить обновленные параметры модели, когда вы закрываете и перезапускаете развернутую систему. Для получения дополнительной информации смотрите, Генерируют Код который Консервы состояние Модели RUL для Системного Перезапуска.
Ваша функция точки входа может обычно изменять свойства объекта модели RUL, которые не только для чтения. Однако значения следующих свойств, которые являются в противном случае чтением-записью, фиксируются в сгенерированном коде. Попытка изменить их во время выполнения генерирует ошибку.
LifeTimeVariable
LifeTimeUnit
DataVariables
CensorVariable
(только модели выживания)
EncodedVariables
(covariateSurvivalModel
только)
EncodingMethod
(covariateSurvivalModel
только)
Чтобы сгенерировать код, необходимо обеспечить выборочные данные, имеющие тип данных и формат, ожидаемый функцией точки входа. В данном примере загрузите некоторые тестовые данные в том же формате как данные, вы раньше обучали модель RUL, таблицы значений индикатора состояния и времен. Поскольку ваша функция точки входа занимает время и значение как его вход, извлеките одну запись из таблицы тестовых данных. Для генерации кода определенные значения не имеют значения, только типы данных.
load('linTestData.mat','linTestData1') testData = linTestData1(1,:); testData
testData=1×2 table
Time Condition
____ _________
1 2.1316
В рабочем столе MATLAB, на вкладке Apps, под Генерацией кода, нажимают MATLAB Coder. Приложение MATLAB Coder открывается на странице Select Source Files. В Сгенерировать коде для функционального поля введите имя функции точки входа, degradationRULPredict
. Затем нажмите Далее.
Задавать типы входных данных для функции точки входа, на странице Define Input Types, testData
использования в вызове
degradationRULPredict
. При вводе вызов, MATLAB Coder отображает обнаруженные входные типы и количество выходных параметров. Нажмите Далее, чтобы подтвердить.
Опционально, проверяйте функцию точки входа на проблемы, возникающие во время выполнения. Для этого нажмите Check for Issues. Когда вы готовы, нажимаете Далее, чтобы перейти к Сгенерировать Кодовой странице. На этой странице вы задаете цель для генерации кода. Можно сгенерировать код предсказания RUL для любой из целей, которые MATLAB Coder поддерживает, включая автономный код C/C++, код C/C++, скомпилированный к библиотеке или коду C/C++, скомпилированному к исполняемому файлу. В данном примере из списка типов Сборки, выберите MEX
. Файл MEX является исполняемым файлом, который можно вызвать из MATLAB.
Нажмите Generate, чтобы сгенерировать файл MEX, degradationRULPredict_mex
. Для получения дополнительной информации о возможностях MATLAB Coder и файлах это генерирует, смотрите, Генерируют код С при помощи Приложения MATLAB Coder (MATLAB Coder).
codegen
КомандаКак альтернатива использованию приложения MATLAB Coder, можно сгенерировать код с помощью следующего codegen
(MATLAB Coder) команда.
codegen degradationRULPredict -args {testData} -nargout 3
Code generation successful.
Чтобы подтвердить сгенерированный код, в командной строке MATLAB, запускают функцию MATLAB точки входа на тестовых данных. Затем запустите сгенерированный файл MEX на тех же данных и подтвердите, что результатами является то же самое.
[estRUL,ci,pdfRUL] = degradationRULPredict(testData); [estRUL_mex,ci_mex,pdfRUL_mex] = degradationRULPredict_mex(testData);
Например, сравните предполагаемый RUL, полученный с функцией MATLAB и сгенерированным файлом MEX.
estRUL
estRUL = 114.2927
estRUL_mex
estRUL_mex = 114.2927
Можно теперь использовать сгенерированный код в качестве части развернутой системы для предсказания остающегося срока полезного использования.
saveRULModelForCoder
| loadRULModelForCoder
| predictRUL