Main Content

잔여 수명 예측을 위한 코드 생성하기

이 예제에서는 MATLAB® Coder™를 사용하여 잔여 수명(RUL)을 예측하는 알고리즘을 배포하는 방법을 보여줍니다. 이와 같은 코드 생성은 MATLAB에서 RUL 예측 모델을 훈련시켜 예측 알고리즘을 다른 환경에 배포할 경우 유용합니다. 이 예제에서는 MATLAB Coder를 사용하여 MATLAB에서 실행할 수 있는 MEX 파일을 생성합니다. 유사한 절차를 사용하여 MATLAB Coder가 지원하는 모든 대상에 대한 코드를 생성할 수 있습니다.

이 예제에서는 linearDegradationModel을 사용하여 RUL을 예측하는 C 코드를 생성하는 방법을 보여줍니다. 성능 저하 모델, 유사성 기반 모델(예: residualSimilarityModel), 생존 기반 모델(예: covariateSurvivalModel) 등의 Predictive Maintenance Toolbox™ RUL 모델에 대한 예측 알고리즘 코드를 생성하는 데에도 동일한 절차를 사용할 수 있습니다.

RUL을 예측하는 코드를 생성하기 위한 워크플로는 다음 도식에 나와 있습니다. 첫 번째 단계는 시스템의 과거 데이터를 사용하여 RUL 모델을 피팅하는 것입니다. 또한 시스템에서 새 데이터를 수신하고 피팅된 모델에 이 데이터를 사용하여 새 RUL을 예측하는 MATLAB 함수도 작성해야 합니다. 이 함수를 진입점 함수라고 합니다. 그런 다음 진입점 함수에서 C/C++ 코드를 생성합니다.

codegen1a.png

RUL 모델 피팅하기

RUL 예측을 위한 코드를 생성하기 전에 과거 데이터를 사용하여 RUL 모델을 피팅해야 합니다. 이 예제에서는 linTrainTables.mat의 데이터를 불러옵니다. 이 파일에는 시간 경과에 따라 측정된 상태 지표의 측정값이 "Time""Condition"이라는 열 레이블을 갖는 테이블 형태로 포함되어 있습니다. 이 데이터를 사용하여 선형 성능 저하 모델을 훈련시킵니다. (RUL 모델을 구성하고 훈련시키는 방법에 대한 자세한 내용은 linearDegradationModel 항목 또는 다른 RUL 모델 유형의 도움말 페이지를 참조하십시오.)

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 추정값을 얻을 수 있습니다. 상태 지표 식별, 데이터 처리, 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 지시문도 포함합니다. 따라서, 코드 생성 중 또는 런타임에 오류를 발생시킬 수 있는 위반 사항을 코드 분석기를 통해 진단하고 수정할 수 있습니다. 코드 분석기에 대한 자세한 내용은 Check Code with the Code Analyzer (MATLAB Coder) 항목을 참조하십시오.

진입점 함수의 기능 및 제한 사항

이 예제에서 다루는 진입점 함수는 단순한 형태로, 모델을 불러와 새 RUL 예측을 얻는 작업을 수행합니다. 진입점 함수는 입력 데이터에 대한 추가 처리를 통해 예측에 사용할 상태 지표를 추출하는 등의 다른 작업을 수행할 수 있습니다. 단, 진입점 함수 내의 모든 함수와 연산이 코드 생성을 지원해야 합니다. 성능 저하 기반 RUL 모델에 대해, 함수는 update 명령을 사용하여 새 데이터를 기반으로 예측 모델을 업데이트할 수도 있습니다. 이 경우, 배포된 시스템을 종료하고 다시 시작할 때 업데이트된 모델 파라미터가 유지되도록 추가 코드를 포함시킬 수 있습니다. 자세한 내용은 시스템을 다시 시작할 때 RUL 모델 상태를 보존하는 코드 생성하기 항목을 참조하십시오.

RUL 모델의 코드 생성 시 제한 사항에 대한 자세한 내용은 predictRUL 및 개별 RUL 모델 유형에 대한 도움말 페이지에서 확장 기능 섹션을 참조하십시오.

코드 생성하기

코드를 생성하려면 진입점 함수에 필요한 데이터형과 형식을 갖는 샘플 데이터를 제공해야 합니다. 이 예제에서는 시간 값과 상태 지표 값으로 구성된 테이블인, RUL 모델을 훈련시키는 데 사용한 데이터와 동일한 형식의 테스트 데이터를 불러옵니다. 이 진입점 함수는 하나의 시간과 하나의 값을 입력값으로 받으므로, 테스트 데이터 테이블에서 하나의 행을 추출합니다. 코드 생성 시 샘플 데이터의 특정 값은 중요하지 않으며, 데이터형만 중요합니다.

load('linTestData.mat','linTestData1')
sampleData = linTestData1(1,:);
sampleData
sampleData=1×2 table
    Time    Condition
    ____    _________

     1       2.1316  

이제 두 가지 방법 중 하나, 즉 MATLAB Coder 앱을 사용하거나 MATLAB 명령줄에서 코드를 생성할 수 있습니다.

MATLAB Coder 앱을 사용하여 코드 생성하기

MATLAB 데스크탑의 탭에서 코드 생성 아래에 있는 MATLAB Coder를 클릭합니다. MATLAB Coder 앱이 열리고 Select Source Files 페이지가 표시됩니다. Generate code for function 상자에 진입점 함수 이름 degradationRULPredict를 입력합니다. 그런 후 Next를 클릭합니다.

진입점 함수에 대한 입력 데이터형을 지정하기 위해 Define Input Types 페이지에서 degradationRULPredict에 대한 호출에 sampleData를 사용합니다. 호출을 입력하면 감지된 입력 유형과 출력값 개수가 표시됩니다. Next를 클릭하여 확인합니다.

선택적으로, 진입점 함수에서 런타임에 발생하는 문제가 있는지 확인합니다. 이렇게 하려면 Check for Issues를 클릭하십시오. 준비되었으면 Next를 클릭하여 코드 생성 페이지로 진행합니다. 이 페이지에서 코드 생성 대상을 지정합니다. 독립 실행형 C/C++ 코드, 라이브러리로 컴파일된 C/C++ 코드 또는 실행 파일로 컴파일된 C/C++ 코드를 포함하여, MATLAB Coder가 지원하는 모든 대상에 대한 RUL 예측 코드를 생성할 수 있습니다. 이 예제에서는 빌드 유형 목록에서 MEX를 선택합니다. MEX 파일은 MATLAB 내에서 호출할 수 있는 실행 파일입니다.

Generate를 클릭하여 MEX 파일 degradationRULPredict_mex를 생성합니다. MATLAB Coder 기능과 MATLAB Coder가 생성하는 파일에 대한 자세한 내용은 Generate C Code by Using the MATLAB Coder App (MATLAB Coder) 항목을 참조하십시오.

codegen 명령으로 코드 생성하기

MATLAB Coder 앱을 사용하는 대신에 다음 codegen (MATLAB Coder) 명령을 사용하여 코드를 생성할 수 있습니다.

codegen degradationRULPredict -args {sampleData} -nargout 3
Code generation successful.

생성된 코드 검증하기

생성된 코드를 검증하려면 MATLAB 명령 프롬프트에서 테스트 데이터에 대해 MATLAB 진입점 함수를 실행합니다. 그런 다음, 생성된 MEX 파일을 동일한 데이터에 대해 실행하고 결과가 같은지 확인합니다.

[estRUL,ci,pdfRUL] = degradationRULPredict(sampleData);

[estRUL_mex,ci_mex,pdfRUL_mex] = degradationRULPredict_mex(sampleData);

예를 들어, MATLAB 함수를 사용하여 얻은 추정된 RUL 값과 생성된 MEX 파일을 사용하여 얻은 추정된 RUL 값을 비교합니다.

estRUL
estRUL = 114.2927
estRUL_mex
estRUL_mex = 114.2927

이제 생성된 코드를 배포된 시스템의 일부로 사용하여 잔여 수명을 예측할 수 있습니다.

참고 항목

| | | | | | | | |

관련 항목