Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

식별 기법을 사용하여 급격한 시스템 변화 감지하기

이 예제에서는 온라인 추정 및 자동 데이터 분할 기법을 사용하여 시스템 동작의 급격한 변화를 감지하는 방법을 보여줍니다. 이 예제에서는 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 구조체를 사용하여 시스템을 모델링합니다.

y(t)+ay(t-1)=b1u(t-1)+b2u(t-2)

여기서 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와 같은 재귀적 식별 루틴을 사용하여 온라인 추정을 수행할 수 있습니다. 온라인 추정은 노후화되는 기계, 변화하는 날씨 패턴과 같이 시간에 따라 변하는 동특성을 모델링하거나 전자기계 시스템의 결함을 검출하는 데 사용할 수 있습니다.

추정기가 모델 파라미터를 업데이트하면 파라미터 b1b2의 값이 평소보다 크게 바뀌며 시스템 동특성의 변화(지연)를 나타냅니다. B 다항식 계수의 변화는 다음을 계산하여 추적됩니다.

L(t)=abs(B(t)-B(t-1))

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를 사용하여 추정된 궤적의 유사성을 살펴봅니다.

segmenttvmod와 모델이 급격한 변화를 보일 확률 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를 사용하여 분할된 모델의 품질을 평가할 수 있습니다.

분할 알고리즘에서 가장 중요한 두 가지 입력값은 r2segment의 네 번째 입력 인수 q입니다. 이 예제에서는 q가 지정되지 않았는데 디폴트 값 0.01로 충분했기 때문입니다. r2의 값을 더 작게 하고 q의 값을 더 크게 하면 더 많은 분할 점이 생성됩니다. 적절한 값을 찾기 위해서는 r2q의 값을 바꾸어 보면서 가장 잘 작동하는 값을 사용할 수 있습니다. 일반적으로 분할 알고리즘은 q보다 r2에 더 민감합니다.

결론

시스템 동특성의 급격한 변화를 감지하기 위해 온라인 추정 및 데이터 분할 기법을 사용하는 것을 평가했습니다. 온라인 추정 기법은 추정 과정에 대해 더 많은 유연성과 제어를 제공합니다. 하지만 드물거나 급격한 변화의 경우 segment를 이용해서 시변 파라미터 추정값에 대한 평활화에 기반을 둔 자동 감지 기법을 사용할 수 있습니다.

관련 항목