이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
식별 기법을 사용하여 급격한 시스템 변화 감지하기
이 예제에서는 온라인 추정 및 자동 데이터 분할 기법을 사용하여 시스템 동작의 급격한 변화를 감지하는 방법을 보여줍니다. 이 예제에서는 System Identification Toolbox™의 기능을 사용하며, Predictive Maintenance Toolbox™는 필요하지 않습니다.
문제 설명
전송 지연이 2초에서 1초로 바뀌는 선형 시스템을 살펴보겠습니다. 전송 지연이란 입력값이 측정된 출력값에 영향을 주기까지 걸리는 시간입니다. 이 예제에서는 온라인 추정 및 데이터 분할 기법을 사용하여 전송 지연의 변화를 감지합니다. 시스템에서 측정된 입력-출력 데이터는 데이터 파일 pdmAbruptChangesData.mat
에 있습니다.
데이터를 불러온 후 플로팅합니다.
load pdmAbruptChangesData.mat z = iddata(z(:,1),z(:,2)); plot(z) grid on
전송 지연은 20초 부근에서 변하지만, 플롯에서 이를 쉽게 확인할 수가 없습니다.
하나의 A
다항식 계수, 두 개의 B
다항식 계수와 하나의 지연을 갖는 ARX 구조를 사용하여 시스템을 모델링합니다.
여기서 A = [1 a]
이고 B = [0 b1 b2]
입니다.
이 모델에는 피드스루가 없으므로 B
다항식의 선행 계수는 0입니다. 시스템 동특성이 변하면 세 개의 계수 a
, b1
, b2
의 값도 변합니다. b1
이 0에 가까운 경우, B
다항식은 2개의 선행 계수가 0이 되므로 실질적인 전송 지연은 2개 샘플이 됩니다. b1
이 이보다 큰 경우 실질적인 전송 지연은 1개 샘플이 됩니다.
따라서 B
다항식 계수의 변화를 모니터링하여 전송 지연의 변화를 감지할 수 있습니다.
변화 감지에 온라인 추정 사용하기
온라인 추정 알고리즘은 새로운 데이터를 사용할 수 있게 되면 모델 파라미터와 상태 추정값을 재귀적으로 업데이트합니다. System Identification Toolbox 라이브러리의 Simulink 블록을 사용하거나 명령줄에서 recursiveARX
와 같은 재귀적 식별 루틴을 사용하여 온라인 추정을 수행할 수 있습니다. 온라인 추정은 노후화되는 기계, 변화하는 날씨 패턴과 같이 시간에 따라 변하는 동특성을 모델링하거나 전기기계 시스템의 결함을 검출하는 데 사용할 수 있습니다.
추정기가 모델 파라미터를 업데이트하면 파라미터 b1
과 b2
의 값이 평소보다 크게 바뀌며 시스템 동특성의 변화(지연)를 나타냅니다. B
다항식 계수의 변화는 다음을 계산하여 추적됩니다.
ARX 모델의 온라인 파라미터 추정에는 recursiveARX
객체를 사용합니다.
na = 1; nb = 2; nk = 1; Estimator = recursiveARX([na nb nk]);
재귀적 추정 알고리즘을 NormalizedGradient
로 지정하고 적응 이득을 0.9로 지정합니다.
Estimator.EstimationMethod = 'NormalizedGradient';
Estimator.AdaptationGain = .9;
iddata
객체 z
에서 원시 데이터를 추출합니다.
Output = z.OutputData; Input = z.InputData; t = z.SamplingInstants; N = length(t);
애니메이션된 선을 사용하여 추정된 파라미터 값과 L
을 플로팅합니다. 추정 전에 애니메이션된 선을 초기화합니다. 스트리밍 데이터를 시뮬레이션하려면 데이터를 한 번에 한 샘플씩 추정기에 입력하십시오. 추정 전에 모델 파라미터를 초기화한 다음 온라인 추정을 수행합니다.
%% Initialize plot Colors = {'r','g','b'}; ax = gca; cla(ax) for k = 3:-1:1 h(k) = animatedline('Color',Colors{k}); % lines for a, b1 and b2 parameters end h(4) = animatedline('Marker','.','Color',[0 0 0]); % line for L legend({'a','b1','b2','Deviation'},'location','southeast') title('ARX Recursive Parameter Estimation') xlabel('Time (seconds)') ylabel('Parameter value') ax.XLim = [t(1),t(end)]; ax.YLim = [-2, 2]; grid on box on %% Now perform recursive estimation and show results n0 = 6; L = NaN(N,nk); B_old = NaN(1,3); for ct = 1:N [A,B] = step(Estimator,Output(ct),Input(ct)); if ct>n0 L(ct) = norm(B-B_old); B_old = B; end addpoints(h(1),t(ct),A(2)) addpoints(h(2),t(ct),B(2)) addpoints(h(3),t(ct),B(3)) addpoints(h(4),t(ct),L(ct)) pause(0.1) end
데이터에서 처음 n0
= 6인 샘플은 변화 감지량 L
의 계산에 사용되지 않습니다. 이 구간에서는 알 수 없는 초기 상태로 인해 파라미터 변화가 큽니다.
Signal Processing Toolbox의 findpeaks
명령을 사용하여 L
에 있는 모든 피크의 위치를 찾습니다.
[v,Loc] = findpeaks(L); [~,I] = max(v); line(t(Loc(I)),L(Loc(I)),'parent',ax,'Marker','o','MarkerEdgeColor','r',... 'MarkerFaceColor','y','MarkerSize',12)
fprintf('Change in system delay detected at sample number %d.\n',Loc(I));
Change in system delay detected at sample number 21.
가장 큰 피크의 위치는 B
다항식 계수의 가장 큰 변화에 해당하며, 따라서 이것이 바로 전송 지연이 변화하는 위치입니다.
온라인 추정 기법은 추정 방법과 모델 구조를 선택할 때 보다 많은 옵션을 제공하는 반면, 데이터 분할 방법은 급격한 변화와 분리된 변화의 감지를 자동화하는 데 도움이 됩니다.
변화 감지에 데이터 분할 사용하기
데이터 분할 알고리즘은 데이터를 여러 동적 동작을 나타내는 영역으로 자동으로 분할합니다. 이는 고장이나 작동 상태의 변화로 인해 발생하는 급격한 변화를 캡처하는 데 유용합니다. segment
명령을 사용하면 단일 출력값 데이터에 대해 이 작업을 쉽게 진행할 수 있습니다. segment
는 시스템 작동 중에 시변 동작을 캡처할 필요가 없는 경우 온라인 추정 기법의 대안으로 사용할 수 있습니다.
데이터 분할의 응용 분야에는 음성 신호의 분할(각 세그먼트는 음소 하나에 해당함), 고장 검출(세그먼트는 고장이 있는 상태의 작동과 고장이 없는 상태의 작동에 해당함), 시스템의 여러 작동 모드에 대한 추정 등이 있습니다.
segment
명령에 대한 입력값에는 측정된 데이터, 모델 차수, 시스템에 영향을 주는 잡음의 분산 r2
에 대한 추측값 등이 있습니다. 분산이 전혀 알려져 있지 않은 경우에는 자동으로 추정할 수 있습니다. 온라인 추정에 사용된 것과 동일한 차수를 갖는 ARX 모델을 사용하여 데이터 분할을 수행합니다. 분산을 0.1로 설정합니다.
[seg,V,tvmod] = segment(z,[na nb nk],0.1);
분할 방법은 AFMM(adaptive forgetting through multiple models, 다중 모델을 통한 적응 망각)을 기반으로 합니다. 이 방법에 대한 자세한 내용은 Andersson, Int. J. Control Nov 1985를 참조하십시오.
다중 모델 접근 방식은 시변 시스템을 추적하는 데 사용됩니다. 결과로 생성되는 추적 모델은 다중 모델의 평균으로, segment
의 세 번째 출력 인수인 tvmod
로 반환됩니다.
추적 모델의 파라미터를 플로팅합니다.
plot(tvmod) legend({'a','b_1','b_2'},'Location','best') xlabel('Samples'), ylabel('Parameter value') title('Time-varying estimates')
이들 파라미터 궤적과 recursiveARX
를 사용하여 추정된 궤적의 유사성을 살펴봅니다.
segment
는 tvmod
와 모델이 급격한 변화를 보일 확률 q
를 사용하여 변화가 발생한 시점을 결정합니다. 이러한 시점은 추적 모델에 대해 평활화 절차를 사용하여 분할된 모델을 생성하는 데 사용됩니다.
분할된 모델의 파라미터 값은 segment
의 첫 번째 출력 인수 seg
로 반환됩니다. 각 후속 행의 값은 해당하는 시점에서 기본이 되는 분할된 모델의 파라미터 값입니다. 이 값은 후속 행에서도 일정하게 유지되며, 시스템 동특성이 변한 것으로 확인된 경우에만 달라집니다. 따라서 seg
의 값은 조각별로 상수입니다.
파라미터 a
, b1
, b2
의 추정된 값을 플로팅합니다.
plot(seg) title('Parameter value segments') legend({'a','b1','b2'},'Location','best') xlabel('Time (seconds)') ylabel('Parameter value')
샘플 번호 19 주변에서 파라미터 값의 변화가 나타납니다. b1
의 값은 작은 값(0에 가까운 값)에서 큰 값(1에 가까운 값)으로 변합니다. b2
의 값은 반대의 패턴을 보입니다. 이처럼 B
파라미터의 값이 바뀌는 것은 전송 지연이 변했음을 나타냅니다.
segment
의 두 번째 출력 인수 V
는 분할된 모델의 손실 함수(즉, 분할된 모델의 추정된 예측 오차 분산)입니다. V
를 사용하여 분할된 모델의 품질을 평가할 수 있습니다.
분할 알고리즘에서 가장 중요한 두 가지 입력값은 r2
와 segment
의 네 번째 입력 인수 q
입니다. 이 예제에서는 q
가 지정되지 않았는데 디폴트 값 0.01로 충분했기 때문입니다. r2
의 값을 더 작게 하고 q
의 값을 더 크게 하면 더 많은 분할 점이 생성됩니다. 적절한 값을 찾기 위해서는 r2
와 q
의 값을 바꾸어 보면서 가장 잘 작동하는 값을 사용할 수 있습니다. 일반적으로 분할 알고리즘은 q
보다 r2
에 더 민감합니다.
결론
시스템 동특성의 급격한 변화를 감지하기 위해 온라인 추정 및 데이터 분할 기법을 사용하는 것을 평가했습니다. 온라인 추정 기법은 추정 과정에 대해 더 많은 유연성과 제어를 제공합니다. 하지만 드물거나 급격한 변화의 경우 segment
를 이용해서 시변 파라미터 추정값에 대한 평활화에 기반을 둔 자동 감지 기법을 사용할 수 있습니다.