1. ss(A, B, C, D)
ss 함수를 통해서 상태공간(state space) 모델을 만들 수 있다.
아래 예시처럼 mass-spring-damper system 등의 동적시스템을 상태공간의 모델 형식으로 변환할 수 있다.
연속 시간/ 이산시간 과 SISO(single input single output) / MIMO(multi input multi output)모두 표현 가능하다.
위의 식을 통해 상태공간의 모델은 정의되고 여기서 x는 상태, u는 입력, y는 출력을 나타낸다.
예를 들어서 질량이 m인 물체에 스프링(k)와 댐퍼(b)가 부착되어 있고 힘 F가 가해지고 있다고 하자
그러면 아래의 식으로 표현되고 형식에 맞춰서 아래처럼 정리된다.
matlab 코드는 아래와 같다.
m = 1;
k = 1;
b = 0.2;
F = 1;
A = [0 1; -k/m -b/m];
B = [0 ; 1/m];
C = [1 0];
D = [0];
sys = ss(A, B, C, D);
이렇게 사용된다.
2. tf()
라플라스 변환으로 만들어진 s-domain에서 시스템의 표현방법인 전달함수를 정의하는 함수이다.
여러가지 방식으로 정의되어 있다.
1)계수입력
sys = tf(<numerator>, <denominator>);
sys = tf([1] , [2, 0.2, 1]);
2)특수변수 s 정의
s = tf('s');
sys = 1/(m*s^2+b*s+k);
3. zpk(zeros, poles, gain)
zero, pole, gain의 값을 이용해서 시스템(전달함수)을 정의하는 함수이다.
sys = zpk([] ,[1,2], 1);
1,2의 pole을 갖고 zero는 없으며 gain k의 값이 1인 전달함수 이다.
4. rlocus(sys)
위처럼 계수를 이용하거나 pole/zero의 값을 이용해서 전달함수를 정의할 수 있다.
이렇게 정의된 전달함수는 대부분 open loop transfer function일 것이다.
시스템이 안정적으로 작동하기 위해서는 closd loop system을 사용하게 되고 이러한 시스템은 gain k의 값에 따라 특성이 변하게 된다.
즉 k의 값이 따라 closed loop transfer function의 pole의 위치가 변하게 되고 어떻게 변하는지 안다면
우리는 적절할 k값을 설정할 수 있다.
open loop pole을 이용해서 k값(0~무한)의 k값에 따른 closed loop pole의 위치를 그래프로 나타낸것이
근궤적(root locus)이다.
matlab에서는 rlocus()함수를 사용해서 아래처럼 쉽게 그릴 수 있다.
sys = zpk([] ,[1,2], 1);
rlocus(sys);
참고)
k=0 => closed loop transfer function의 pole = open loop transfer function의 pole
k=무한 => closed loop transfer function의 pole = open loop transfer function의 zero
결국 근궤적은 open loop tf의 pole에서 시작해서 zero에서 끝난다.
시스템을 전달함수(transfer function) 또는 상태공간(state space)로 정의를 완료했으면
시간과 주파수 domain에서 system이 어떻게 반응할지에 대한 분석이 필요하다.
우리의 목적은 system의 stablity, response 속도, steady-state error를 개선하는 것이다.
아래부터는 시스템을 분석하기 위해 사용하는 함수들 이다.
5. pole(sys)
closed loop system의 전달함수 pole이 모두 LHP(left half plane)에 있으면 시스템은 stable하고
하나의 pole이라도 RHP(right half plane)에 존재하면 시스템은 unstable하다.
이렇게 시스템의 stability는 pole의 위치로 결정이 된다.
pole(sys)함수를 통해서 매트랩에서 pole의 위치를 쉽게 찾을 수 있다.
sys = zpk([] ,[1,2], 100);
pole(sys)
위의 예시에서는 시스템은 unstable하다.
참고)
시스템의 pole은 앞에서 state-space 표현식에서의 행렬 A의 eigenvalue와 같다고 한다.
따라서 다음과 같이 ssdata()함수로 A,B,C,D의 행렬을 구하고 eig()함수를 통해서 pole의 위치를 구할 수 있다.
sys = zpk([] ,[1,2], 100);
[A,B,C,D] = ssdata(sys);
eig(A)
결과는 처음과 같이 pole이 1,2이다.
'simulink' 카테고리의 다른 글
| System Order (0) | 2025.01.12 |
|---|