Main Content

앱에서 생성한 MATLAB 코드 분석하기

진단 특징 디자이너를 사용하면 선택한 특징 및 변수에 대한 계산을 자동화하는 MATLAB® 코드를 생성할 수 있습니다. 이 생성된 코드는 앱으로 가져온 앙상블 데이터와 동일한 방식으로 구성된 앙상블 데이터를 받을 수 있으며 새로운 특징 테이블뿐 아니라 계산된 신호, 스펙트럼, 순위 지정 테이블을 생성하여 특징 분석 또는 모델 훈련에 사용할 수 있습니다. 이 코드는 사용자가 앱에서 설정한 다양한 옵션을 복제하며 다음을 수행할 수 있습니다.

  • 각 멤버에 대한 신호 및 특징의 전체 신호 계산

  • 특징에 대해 순위 지정

  • 앙상블 동작 특성화를 위한 앙상블 수준 계산

  • 병렬 처리

  • 프레임 기반 처리라고도 하는 분할된 신호 처리

앙상블 관리는 생성된 코드의 기본 구성 요소입니다. 데이터 앙상블 및 앙상블 변수 유형에 대한 자세한 내용은 상태 모니터링 및 예측 정비를 위한 데이터 앙상블 항목을 참조하십시오.

앱에서 사용자 고유 코드를 생성하여 이 기능 설명을 실제 코드와 비교할 수 있습니다. 자세한 내용은 생성된 MATLAB 코드를 사용한 자동 특징 추출 항목을 참조하십시오. 코드 생성 방법을 보여주는 예제는 진단 특징 디자이너에서 MATLAB 함수 생성하기 항목을 참조하십시오. 프레임 기반 코드 생성을 위한 설정을 제공하는 예제는 진단 특징 디자이너를 사용하여 성능이 저하되는 시스템에 대한 예지진단 특징 순위 지정하기 항목을 참조하십시오.

기본 함수 흐름

이 그림은 생성된 코드의 기본 함수 흐름을 보여줍니다. 이 도식에서 함수는 특징과 도출된 변수를 모두 반환하고 직렬 처리를 사용하며 전체 신호에 대해 연산을 수행합니다.

이 그림은 코드 흐름을 세 개의 주요 부분, 즉 초기화(Initialize), 멤버 순환(Loop through Members), 출력 생성(Create Outputs)으로 나눕니다.

  • 초기화(Initialize) 블록은 초기 구성을 수행합니다. 구체적인 작업은 원래 가져온 데이터의 유형과 코드 생성을 위해 지정한 변수 및 특징에 따라 달라집니다.

  • 멤버 순환(Loop Through Members) 블록 작업은 한 번에 한 멤버씩 모든 변수와 특징 계산을 실행합니다.

  • 출력 생성(Create Outputs)은 특징 테이블과 전체 앙상블을 추출하고 형식을 지정합니다.

입력

함수는 사용자가 처음에 앱으로 가져온 데이터와 일치하는 입력 데이터에 대해 연산을 수행합니다. 앱에서 코드를 생성하려는 경우 코드를 적용하려는 데이터와 동일한 형식으로 데이터를 가져오는 것이 좋습니다.

  • 앙상블 테이블 또는 셀형 배열과 같은 작업 공간 변수를 메모리에서 가져온 경우 함수에는 앙상블 테이블 또는 셀형 배열이 필요합니다.

  • 파일 또는 시뮬레이션 앙상블 데이터저장소를 가져온 경우 함수에는 파일 또는 시뮬레이션 앙상블 데이터저장소가 필요합니다.

코드에 사용되는 입력 데이터의 변수 구조는 앱으로 가져온 데이터와 유사해야 합니다. 입력 앙상블에는 추가 변수가 포함될 수도 있습니다. 코드는 추가 변수를 무시하며 오류로 표시하지 않습니다.

초기화

초기화(Initialize) 블록에서 코드는 멤버 순환(Loop through Members) 블록에서 함수가 계산하는 입력값과 출력값 모두에 대한 변수를 포함하는 앙상블을 구성합니다. 이러한 계산된 출력값에는 코드를 생성할 때 명시적으로 선택한 변수 및 특징과 특징에 필요한 추가 변수(예: tsa 신호)가 포함됩니다.

  • 입력 데이터가 테이블 또는 셀형 배열인 경우 코드는 입력 데이터 변수에 상응하는 변수를 포함하는 workspaceEnsemble 객체를 만듭니다. 이 객체는 ensemble datastore 객체와 유사하지만, 외부 파일이 아닌 메모리의 데이터에 대해 연산을 수행합니다.

  • 입력 데이터가 simulationEnsembleDatastore 또는 fileEnsembleDatastore 객체인 경우 코드는 객체에 대해 직접 연산을 수행합니다.

코드가 앙상블을 초기화한 후에 코드는 멤버 계산 중에 계산될 모든 변수와 특징을 추가합니다. 이 코드는 unique 함수를 사용하여 중복 변수를 제거합니다.

이 그림은 작업 공간 앙상블과 해당 데이터 변수의 예를 보여줍니다. 데이터 변수는 입력 신호, 출력 신호 및 스펙트럼, 특징을 식별합니다.

초기화 과정에서 앙상블과 관련된 주요 함수는 다음과 같습니다.

  • reset — 코드가 시작 부분부터 읽어오도록 앙상블을 원래 읽지 않음 상태로 재설정

  • workspaceEnsemble — 메모리상의 데이터를 관리하는 ensemble 객체

  • fileEnsembleDatastore — 외부 파일상의 데이터를 관리하는 ensemble 객체

  • simulationEnsembleDatastore — 외부 로그 또는 파일에 있는 시뮬레이션된 데이터를 관리하는 ensemble 객체

참고

초기화하는 동안 함수는 처리 과정에서 사용할 배열을 사전 할당하지 않습니다. 이렇게 사전 할당하지 않는 것은 명확성과 유연성을 위해서인데, 코드가 임의 개수의 멤버를 갖는 입력 앙상블에 대해 연산을 수행해야 하기 때문입니다. 중간 결과값 테이블에 새로 계산된 데이터를 추가하는 후속 계산 주기 동안 코드는 인라인 주석 %#ok<AGROW>을 사용하여 사전 할당에 대한 MATLAB 코드 분석기 경고를 표시하지 않습니다. 코드 분석기 메시지 기본 설정에 대한 자세한 내용은 코드 분석기 기본 설정 항목을 참조하십시오.

멤버 계산 루프

멤버 계산 루프에서 함수는 한 번에 한 멤버씩 모든 멤버별 계산을 수행합니다.

일련의 read 함수 호출이 루프를 시작하며 남아 있는 앙상블 멤버가 없을 때까지 각 앙상블 멤버를 연속적으로 읽어 옵니다. 각 read 명령 다음에 수행되는 계산에서 해당 멤버에 대해 지정된 모든 변수와 특징이 제공됩니다.

실행 중인 멤버 수준 결과값 테이블은 각 변수 또는 특징 세트가 계산됨에 따라 결과를 수집합니다.

이 그림은 멤버 수준 결과값 테이블의 예를 보여줍니다. 여기서 결과값 테이블에는 특징이 포함된 두 개의 임베디드 테이블과 계산된 신호가 포함된 임베디드 타임테이블이 있습니다.

모든 계산이 완료되면 코드는 전체 멤버 결과값 테이블을 메인 앙상블에 다시 추가합니다.

멤버 계산에서는 처리할 수 없는 입력 데이터를 다루기 위해 try/catch 조합이 사용됩니다. 이 접근 방식은 잘못된 데이터가 코드 실행을 중단하는 것을 방지합니다.

코드는 다음과 같은 주요 앙상블 관리 함수를 사용합니다.

  • read — 다음 앙상블 멤버 읽기

  • readMemberData — 특정 변수에 대해 앙상블 멤버에서 데이터 추출

  • writeToLastMemberRead — 앙상블 멤버에 데이터 쓰기

  • table — 명명된 열에는 변수와 특징을 포함하고 행에는 멤버를 포함하는 앙상블 배열

  • array2table — 배열을 테이블로 변환

  • timetable — 명명된 변수 열에는 신호를 포함하고 각 행에 대해 특정 시간을 포함하는 특화된 멤버별 테이블

  • array2timetable — 배열을 타임테이블로 변환

출력

생성된 함수의 주요 출력값은 코드가 readFeatureTable 함수를 사용하여 추출하는 특징 테이블입니다. 이 출력값은 입력값으로 작업 공간 앙상블을 사용하든 앙상블 데이터저장소를 사용하든 동일합니다. 특징 테이블에는 스칼라 특징뿐만 아니라 상태 변수도 포함됩니다.

아래 그림은 특징 테이블의 예를 보여줍니다. 각 행은 하나의 멤버를 나타냅니다. 첫 번째 열에는 상태 변수가 포함되고, 뒤에 오는 열에는 스칼라 특징 값이 포함됩니다.

선택적인 두 번째 출력 인수를 사용하여 앙상블 자체를 반환합니다. 함수에 대한 입력값이 테이블 또는 셀형 배열인 경우 함수는 readall 함수를 사용하여 작업 공간 앙상블을 테이블로 변환하고 테이블을 반환합니다.

다음 그림은 출력 테이블의 예를 보여줍니다. 각 행은 하나의 멤버를 나타냅니다. 처음 두 개의 열은 입력 변수이며 나머지 열들은 특징 또는 계산된 변수를 포함합니다.

함수가 ensemble datastore 객체의 원래 가져오기를 기반으로 하는 경우 이 함수는 업데이트된 datastore 객체를 반환합니다.

코드에는 다음과 같이 출력을 위한 주요 함수가 포함됩니다.

  • readFeatureTable — 앙상블 데이터 세트에서 테이블로 상태 변수 및 특징 데이터 읽어오기

  • readall — 앙상블 데이터 세트의 모든 데이터를 테이블로 읽어오기

순위 지정

코드를 생성할 때 하나 이상의 순위 지정 테이블을 선택하면, 그림과 같이 함수는 특징 테이블 추출 다음에 순위 지정 섹션을 포함합니다. 그림은 기본 함수 흐름 그림에서 변경된 순서도 부분에 대해서만 세부적으로 보여줍니다. 출력 생성(Create Outputs)에서 그림은 순위 지정을 사용할 때의 모든 출력 인수를 보여줍니다.

순위를 초기화하기 위해 코드는 특징 테이블에서 특징 값과 레이블(상태 변수 값)을 추출합니다. 그런 다음 코드는 grp2idx 함수를 통해 레이블을 숫자형 값으로 변환하여 각 특징에 그룹 인덱스를 할당하여 클래스 그룹을 정의합니다. 예를 들어 상태 변수 FaultCode에 레이블 "Faulty", "Degraded""Healthy"가 있는 경우 grp2idx는 이러한 레이블이 있는 멤버를 그룹 1, 2, 3으로 그룹화합니다.

각 순위 지정 방법에 대해 코드는 다음 단계를 통해 각 특징에 대한 점수를 계산합니다.

  1. 지정된 정규화 체계를 사용하여 특징을 정규화합니다.

  2. 그룹을 구분하는 그룹 인덱스 마스크를 사용하여 순위 지정 방법에 대한 함수를 호출합니다. 특정 구문은 순위 지정 방법 함수에 따라 달라집니다.

  3. 상관 중요도 인자가 지정된 경우 correlationWeightedScore를 사용하여 점수를 업데이트합니다. 상관 가중치는 더 높은 순위의 특징과 상관 관계가 높으며 따라서 중복되는 특징인 경우 해당 특징의 점수를 낮춥니다.

  4. 점수를 점수화 행렬에 추가하고 방법을 방법 목록에 추가합니다.

그런 다음 코드는 코드 생성 중에 앱에 지정된 정렬 기준 방법의 점수를 기준으로 행을 정렬하기 위해 sortrows를 사용하여 순위 지정 테이블을 만듭니다.

아래 그림은 T-검정 결과를 기준으로 정렬된 네 가지 특징에 대한 순위 지정 테이블의 예를 보여줍니다.

코드는 순위 지정을 관리하기 위해 다음과 같은 주요 함수를 사용합니다.

  • grp2idx — 레이블을 숫자형 값으로 변환

  • correlationWeightedScore — 상관 인자가 있는 특징 순위 지정 점수에 가중치 적용

  • sortrows — 점수에 따라 행을 정렬하여 특징에 순위 지정

앙상블 통계량 및 잔차

앙상블 통계량은 개별 멤버가 아닌 전체 앙상블을 나타내는 통계 메트릭입니다. 예를 들어, 앱에서 진동 신호에 대한 앙상블 최댓값을 지정할 수 있습니다. 결과로 생성되는 단일 멤버 통계량에는 각 시간 샘플에 대해 모든 멤버 진동 값 중 최댓값에 해당되는 진동 값이 포함됩니다.

앙상블 통계량을 사용하여 특정 변수에 대한 모든 멤버 신호에서 동일한 앙상블 메트릭을 뺄셈하여 잔차를 계산할 수 있습니다. 예를 들어, 앙상블 평균이 평균 동작점을 나타내는 경우 모든 멤버에서 평균을 뺄셈하여 동작점 주변의 동작을 분리할 수 있습니다. 분리된 신호는 잔차의 한 형식입니다.

이 그림은 평균 잔차 신호를 기반으로 하여 특징을 지정할 경우 코드 흐름을 보여줍니다.

이 흐름에는 두 개의 개별 멤버 루프가 있습니다. 첫 번째 멤버 루프는 앙상블 통계량을 계산합니다. 두 번째 멤버 루프는 신호, 스펙트럼 및 특징 처리를 수행합니다. 순서도에서 두 번째 멤버 처리 루프는 잔차 신호 및 잔차 기반 특징 처리 단계를 보여줍니다.

루프 1: 앙상블 통계량 처리

지정된 변수에 대한 앙상블 통계량을 계산하기 위해 코드는 먼저 누산기를 유지하면서 멤버를 순환합니다. 루프 시퀀스의 지정된 점에서 누산기는 다음을 포함할 수 있습니다.

  • 지금까지 계산한 최대 신호 값

  • 모든 데이터 값의 이동 합계 및 반복 횟수

  • 지금까지 계산한 최소 신호 값

아래 그림은 mean 변수의 누산기 내용과 이동 합계 및 횟수의 예를 보여줍니다.

루프 반복이 끝나면 코드는 누산기의 앙상블 최대 및 최소 신호를 앙상블 통계량 최대 및 최소 변수로 전송합니다. 코드는 앙상블 합계를 횟수로 나누어 앙상블 평균을 계산합니다.

아래 그림은 최종 앙상블 통계량 테이블과, 평균 신호를 포함하는 최종 mean 변수의 예를 보여줍니다.

루프 2: 잔차 처리

메인 멤버 처리 루프에서 코드는 지정된 신호에서 지정된 통계량을 뺄셈하여 잔차 신호 변수를 생성하고 다른 신호 및 특징과 동일한 방식으로 이러한 잔차를 패키징합니다.

다음 그림은 잔차가 있는 멤버 결과 테이블의 예를 보여줍니다. 테이블에는 두 개의 잔차 신호와 해당 신호에서 계산된 두 개의 특징 세트가 포함되어 있습니다.

병렬 처리

병렬 처리를 지정하면 코드가 앙상블 멤버를 서브앙상블로 분할하고 그림과 같이 각 서브앙상블에 대해 전체 멤버 처리 루프를 병렬로 실행합니다.

메인 앙상블이 workspaceEnsemble 객체인 경우, 각 파티션 처리 주기가 끝날 때 코드는 업데이트된 서브앙상블을 모든 서브앙상블에 대한 결과를 저장하는 배열의 셀로 저장합니다. 다음 그림은 이 배열의 예를 처음 두 개 셀과 함께 보여줍니다. 아래 그림에서 각 파티션에는 13개의 멤버가 있습니다.

메인 앙상블이 작업 공간 앙상블인 경우, 모든 파티션 처리가 완료되면 코드는 결과 파티션을 다시 조립하고 refresh 명령을 사용하여 메인 앙상블을 업데이트합니다.

메인 앙상블이 ensemble datastore 객체인 경우, 코드는 각 멤버 루프의 끝에서 서브앙상블 멤버에 결과를 쓸 때 객체를 직접 업데이트합니다.

코드는 병렬 처리를 위해 다음과 같은 주요 함수를 사용합니다.

  • numpartitions — 앙상블 멤버를 분할할 파티션 개수

  • partition — 앙상블 분할

  • refresh — 재조립 분할 결과로 작업 공간 앙상블 업데이트

프레임 기반 처리

앱에서 프레임 기반 처리를 지정한 경우, 생성 코드는 각각의 전체 멤버 신호를 세그먼트 또는 프레임으로 나눕니다. 이러한 프레임의 크기와 빈도는 프레임 정책에 저장됩니다.

다음 그림은 흐름을 보여줍니다. 코드는 각 멤버 루프 내에서 프레임 루프를 실행합니다. 코드 생성을 위한 특징을 선택할 때, 앱은 특징 선택을 단일 프레임 정책으로 제한합니다. 따라서 생성된 함수에는 두 개 이상의 프레임 루프가 포함되지 않습니다.

초기화 부분에서 코드는 FRM_2와 같은 입력 변수 및 프레임 정책 ID만 데이터 변수에 추가합니다. 코드는 계산되는 변수를 추가하지 않습니다. 이러한 변수는 FRM_ 변수에 저장됩니다.

멤버 루프의 첫 번째 부분에서 코드는 다음을 수행합니다.

  1. 전체 멤버 신호를 읽습니다.

  2. frameintervals를 사용하여 전체 신호의 시간 범위를 포함하고 각 프레임의 시작 시간과 중지 시간을 포함하는 프레임 구간 테이블을 만듭니다.

  3. 멤버 수준에서 프레임 테이블을 초기화합니다. 이 테이블에는 궁극적으로 멤버의 모든 프레임에 대해 계산된 변수 값이 포함됩니다.

멤버 루프의 두 번째 부분은 프레임 루프입니다. 각 프레임에 대해 코드는 다음을 수행합니다.

  1. 프레임 구간 정보를 사용하여 전체 신호에서 해당 프레임에 대한 데이터를 추출합니다.

  2. 멤버 수준에서 전체 신호 처리와 동일한 방식으로 신호, 스펙트럼 및 특징을 계산합니다. 각각의 새 변수를 계산한 후, 코드는 이 변수를 프레임 결과값 테이블에 추가합니다. 다음 그림은 멤버 프레임 테이블의 예를 보여줍니다. 처음 두 개 요소에는 프레임 구간의 시작 시간과 중지 시간이 포함됩니다. 마지막 요소에는 해당 프레임에 대해 계산된 특징이 포함됩니다.

  3. 변수 계산이 완료되면 코드는 완료된 프레임 결과값 테이블을 멤버 수준 프레임 테이블에 추가합니다. 아래 그림은 모든 멤버에 대한 프레임 결과값을 포함하는 멤버 수준 테이블의 예를 보여줍니다.

멤버 루프의 마지막 작업은 완료된 멤버 프레임 테이블을 앙상블 멤버에 쓰는 것입니다.

특징 테이블 출력값을 생성하는 것은 기본 사례와 기본적으로 동일하지만 이제 각 멤버 변수에 모든 세그먼트가 포함됩니다.

참고 항목

| | | | | | | | | | | |

관련 항목