본문 바로가기

Software/MATLAB

파라미터 추정(Parameter Estimation)을 MATLAB으로 간단히 해보자

MATLAB Simulink는 간단한 사용방법을 가졌지만, 꽤 유용한 (하긴 그런 툴이 정말 많지만 말이죠...^^) Parameter Estimation Toolbox를 가지고 있습니다.

이걸 이용하면 구하고 싶은 파라미터를 추정해볼 수 있는데요. 이번에는 요걸 한번 소개해보도록 하겠습니다.

먼저 좋은 실험 환경이 있었으면 참 좋겠지만, 그런 환경이 없으니 말이죠. 이 파라미터추정 실습을 위해 먼저 데이터를 만들어야겠네요..ㅠㅠ


먼저 Simulink에서 위와 같이 꾸밉니다. Sine Wave에는 아무것도 안건드리고 디폴트로 두었어요. 빨간 표시가 있는 곳에 -2, -1을 넣어둡니다. 그리고 실행해서 Scope를 열어보면


이런 결과가 나는데요. 여기서 표시된 아이콘을 누르고


Data History를 선택해서 Limit data points to last를 해제하시고, Save data to workspace를 선택하신후 SimOut이라고 적고, Array를 선택하지요. 아참 Scope 설정을 바꿨으니 다시 실행하시구요.


그럼 Workspace에 SimOut이라는 행렬이 저장된것이 나타납니다. 1열은 시간축이구요. 2열은 시뮬링크에서 꾸민 결과값이고, 3열은 입력이지요. 이제 이걸 데이터로 선택할 겁니다. 

무슨말이냐면, 예를들어 어떤 시스템이 있다고 치죠. 아까도 말했지만, 우리는 없으니, 저 시뮬링크로 꾸며서 얻은 데이터를 실제 실험데이터라고 생각하는겁니다. 그 시스템에 입력을 주고 출력을 받은거죠. 그리고, 실제상황에서 우리는 gain, gain1 블럭에 들어가는 -1,-2라는 값을 모르는 겁니다. 그래서 그걸 찾아보겠다는 거죠.


시뮬링크 새창을 열어서 위와 같이 꾸밉니다. input, output port를 사용하시구요. 파란표시된 부분에 어떻 값을 가져야하는지 몰라서 a, b라고 둔 것이죠.^^

이제, 실험데이터를 이용해서 저 a,b값을 찾아보는 겁니다.


중간에 해도 되지만, 일단 a, b의 초기값이 있어야합니다. 그래서 둘다 -10이라고 대충 입력해두구요.


Estimation할 블럭 (즉, 두번째로 꾸민) 시뮬링크에서 Tools 메뉴에 Parameter Estimation을 선택하시면,


위와 같은 창이 뜹니다. 거기서 Transient Data를 선택하시고


New를 누르시면


이렇게 되는데요. Import를 선택하시면,


요런 창이 떠요. 여기서 SimOut을 찾으시고, 표시된 입력(3열)을 선택하신다음


Input Data의 data가 빈칸인데요. 거길 누르고, 방금전 창에서 Import를 누르면 위에서 처럼 데이터가 들어갑니다. PlotData를 해보시면 확인하실 수 있구요


또 저 시간의 빈칸을 선택하시고


1열을 선택하고 Import를 누르면 데이터가 들어갑니다.


이번에는 Output Data 탭에서 Data공간을 선택하고


2열을 선택하고 Import를 하시면 되구요. Output의 시간또한 같은 방법으로


입력하시면 됩니다. 


이제 Variable에서 Add를 누르시면


변수로 simulink에 들어가 있던 a, b가 나타나는데요. CTRL과 마우스를 이용해서 선택하신 다음 OK를 하시구요


a를 선택하고 Maximum값을 줍니다. 

사실 아무것도 없는 곳에서 그냥 완벽하게 추정해주면 좋겠지만, 현실은 그렇지 못하거든요. 그래서 개략적인 범위를 인가하는데, 저는 a,b가 음수라는 최소한의 정보를 알려주겠다는 것이죠.


같은 방법으로 위에서처럼 b도 설정해주시면 됩니다. 그리고, 


Estimation에서 New를 선택하시고


NewEstimation에서 Parameter 탭을 누르고 추정할 변수 a,b를 모두 체크하시고


다시 Data Sets 탭에서 New Data를 체크하십니다.


그리고 Views에서 New를 누르고


여러가지 상황을 보실 수 있지만


실험치와 추정치의 비교 그래프만 보기로 하겠습니다. 위에 표시된 대로 하시고, Show Plots를 선택하시면


일단 실험치의 출력이 나옵니다.


다시 NewEstimation에서 Estimation 탭을 누르시고, Start를 하면 추정을 시작합니다.


결과나 나왔네요.


Parameters 탭에 보면, 원래 설정되었던 -2,-1에 아주 근접한 수치를 구했다는 것을 확인할 수 있습니다. ^^



이번에는 실제실험에서 항상나타나는 노이즈를 살짝 실어서 측정데이터를 바꿔보죠. 처음 꾸몄던 Simulink화일에서


위와 같이 노이즈라는 개념으로 블럭하나를 추가했습니다.


그러면 데이터가 저렇게 좀 지져분해지죠.. 그래도 a,b값을 잘 찾는지 보겠습니다. 위의 과정을 수행하시고 나면


이렇게 실험치과 추정치의 그래프가 잘 나타난다는 것을 확인할 수 있구요


파라미터도 잘 찾았음을 알 수 있습니다.^^


반응형