AEGLOSLAB 제어공학 종합 핸드북

제4부 현대 제어: 상태공간

4.1 상태공간 표현

제4부 현대 제어: 상태공간 · 시작. 입출력(전달함수)을 넘어 내부 상태로 시스템을 적는다. 상태방정식 ẋ=Ax+Bu, y=Cx+Du, 전달함수와의 상호 변환, 그리고 같은 시스템의 표현이 무한히 많되 고유값(=극)은 불변임을. 극배치·LQR·칼만필터(제4·5부)가 모두 이를 기반으로 한다.

이 장을 마치면 물리계·전달함수를 상태공간으로 옮기고, $A$의 고유값이 곧 극임을 이해하며, 상사변환으로 표현을 바꿔도 동특성은 같음을 알아야 한다.

4.1.1 왜 상태공간 — 전달함수의 한계를 넘어

전달함수(제1·2부)는 강력하지만 한계가 있다.

  • 입출력 하나(SISO)에 치우침: 드론·로봇팔처럼 입출력이 여럿(MIMO)이면 전달함수 행렬이 번거롭다.
  • 내부를 드러내지 않는다: 1.2.9에서 봤듯 전달함수는 상쇄된 내부 모드를 은닉한다 → 내부 불안정을 못 본다.
  • 시변·비선형 확장이 약함: 라플라스는 LTI 전제. 선형화(1.1.9)의 자연스러운 도착지가 상태공간이다.

상태공간은 시스템을 내부 상태의 시간변화로 적는다. MIMO가 자연스럽고, 내부를 드러내며(가제어·가관측, 4.2), 행렬 한 묶음으로 다변수 고성능 설계(극배치·LQR·칼만·MPC)를 연다. 현대 제어의 표준 표현이다.

4.1.2 상태와 상태변수

상태(state): 미래를 예측하는 데 필요한 최소한의 현재 정보. 현재 상태와 앞으로의 입력만 알면, 시스템의 미래가 완전히 정해진다.

  • 상태변수: 그 정보를 담는 변수들(예: 위치·속도). 보통 에너지를 저장하는 요소 수만큼 필요하다 — 스프링(위치 에너지)·질량(운동 에너지)·커패시터(전하)·인덕터(전류).
  • 차수 $n$: 상태변수 개수 = 전달함수 극의 개수(1.2.3)와 일치.
  • 상태벡터 $x = [x_1, x_2, \ldots, x_n]^T$: 상태들을 쌓은 열벡터(0.2.5).

예: 질량-스프링-댐퍼는 "지금 어디 있고(위치) 얼마나 빨리 가나(속도)"를 알아야 미래가 정해진다 → 상태 둘($n=2$).

4.1.3 상태공간 방정식

연속 LTI 시스템의 표준형(두 식):

$$\dot{x} = A\cdot x + B\cdot u$$ — 상태방정식 (상태가 어떻게 변하나)

$$y = C\cdot x + D\cdot u$$ — 출력방정식 (상태에서 무엇을 관측하나)

내부 동역학 u B Σ ∫ x (상태) C Σ y A D

각 행렬의 의미(차원: 상태 $n$, 입력 $m$, 출력 $p$):

  • $A$ ($n\times n$) 시스템행렬: 내부 동역학·상태 간 결합. $A$의 고유값 = 극 = 시스템의 모드(핵심, 4.1.6).
  • $B$ ($n\times m$) 입력행렬: 입력이 상태에 미치는 영향.
  • $C$ ($p\times n$) 출력행렬: 상태에서 무엇을 측정하나.
  • $D$ ($p\times m$) 직접전달행렬: 입력→출력 직통. 순수 프로퍼(1.2.3) 플랜트는 보통 $D=0$.

MIMO가 자연스럽다 — $B$의 열이 입력 수, $C$의 행이 출력 수일 뿐 구조는 같다.

4.1.4 물리계에서 상태공간으로

절차: 상태를 고르고(에너지 저장 요소) → 각 상태의 도함수를 다른 상태·입력으로 표현.

질량-스프링-댐퍼(1.1.4) m ẍ + b ẋ + k x = F. 상태 x₁=위치 x, x₂=속도 ẋ:

$$\dot{x}_1 = x_2$$

$$\dot{x}_2 = \ddot{x} = -\frac{k}{m}x_1 - \frac{b}{m}x_2 + \frac{1}{m}F$$

$$A = \begin{bmatrix} 0 & 1 \\ -k/m & -b/m \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 1/m \end{bmatrix}, \quad C = \begin{bmatrix} 1 & 0 \end{bmatrix}, \quad D = 0 \quad (\text{출력=위치})$$

$A$의 고유값: $\det(\lambda I-A)=\lambda^2+(b/m)\lambda+k/m=0$ — 1.1.4의 특성방정식 그대로. 상태공간의 고유값 = 전달함수의 극임이 여기서 보인다.

DC모터(1.1.7)는 상태 [전류 i, 각속도 ω] 또는 [각도 θ, 각속도 ω]로 정의해 같은 식으로 옮긴다(연습 4.1.12-2).

4.1.5 표준형 — 같은 시스템, 다른 옷

전달함수에서 상태공간을 만드는 표준 realization이 여럿이다.

가제어 표준형(controllable canonical form) — $G(s)=(b_1s+b_0)/(s^2+a_1s+a_0)$이면:

$$A = \begin{bmatrix} 0 & 1 \\ -a_0 & -a_1 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \quad C = \begin{bmatrix} b_0 & b_1 \end{bmatrix}, \quad D = 0$$

분모 계수가 $A$의 마지막 행에, 분자 계수가 $C$에 그대로 들어간다 — 전달함수↔상태공간을 손으로 오가기 쉽다. 이 밖에 가관측 표준형(4.2.7.1 — 위 가제어 표준형을 전치한 쌍대형), 모달(대각) 표준형($A$를 고유값 대각행렬로 — 모드가 분리됨)이 있다.

4.1.6 전달함수 ↔ 상태공간

4.1.6.1 상태공간 → 전달함수

라플라스(초기조건 0)로 ẋ=Ax+Bu를 풀면:

$$G(s) = C\cdot(sI - A)^{-1}\cdot B + D$$

  • 극 = $A$의 고유값 = det(sI−A)=0의 근. 0.2.5.3·2.1의 그 사실 — 이제 행렬에서 직접 나온다.
  • $(sI-A)^{-1}$의 분모가 det(sI−A)(특성다항식)이므로 극이 거기서 나온다.

4.1.6.2 전달함수 → 상태공간

가제어·가관측 표준형(4.1.5)으로 realization한다. 한 전달함수에 대응하는 상태공간은 무한히 많다(다음 절).

4.1.7 상사변환 — 표현은 무한, 고유값은 불변

상태변수를 다시 고르는 것(좌표 변환)은 시스템을 안 바꾼다. $x = T\cdot z$(가역 $T$)로 바꾸면:

$$\begin{aligned} \dot{z} &= (T^{-1}AT)\cdot z + (T^{-1}B)\cdot u \\ y &= (CT)\cdot z + D\cdot u \end{aligned}$$

$$\to A' = T^{-1}AT, \quad B' = T^{-1}B, \quad C' = CT, \quad D' = D$$

  • A'와 $A$는 닮음(similar) → 고유값이 같다. 따라서 극·전달함수가 불변. 같은 시스템의 다른 좌표 표현일 뿐.
  • 그래서 상태공간 realization은 비유일하다 — 무한히 많은 $(A,B,C,D)$가 같은 전달함수를 낸다. 표준형·모달형은 그중 편리한 좌표를 고른 것.
  • 활용: 모달 변환($T$=고유벡터 행렬)으로 $A$를 대각화하면 모드가 분리돼 해석이 쉬워진다.

4.1.8 상태방정식의 해 — 상태천이행렬

ẋ=Ax+Bu의 해(스칼라 지수해의 행렬판):

$$x(t) = \underbrace{e^{At}\cdot x(0)}_{\text{자유응답}} + \underbrace{\int_0^t e^{A(t-\tau)}\cdot B\cdot u(\tau)\,d\tau}_{\text{강제응답}}$$

  • e^{At} = 상태천이행렬 $\Phi(t)$: 초기상태가 시간에 따라 어떻게 전파되나.
  • 고유분해 $A=V\Lambda V^{-1}$이면 $e^{At}=V e^{\Lambda t} V^{-1}$, $e^{\Lambda t}=\operatorname{diag}(e^{\lambda_it})$. 즉 응답은 모드 $e^{\lambda_it}$의 합이고, $\lambda_i$(고유값)가 좌반평면이면 감쇠 = 안정(2.1과 일관).
  • 이산형(ZOH, 3.2): $x[k+1]=\Phi\cdot x[k]+\Gamma\cdot u[k]$, $\Phi=e^{AT}$, $\Gamma=(\int_0^Te^{A\tau}d\tau)B$. 이산 안정은 $\Phi$의 고유값이 단위원 안(3.1.6).

4.1.9 도구로 — ss·ss2tf·tf2ss

# statespace.py — 상태공간 ↔ 전달함수, 고유값
import control as ct, numpy as np
m, b, k = 1.0, 0.4, 4.0
A = [[0, 1], [-k/m, -b/m]]; B = [[0], [1/m]]; C = [[1, 0]]; D = [[0]]
sys = ct.ss(A, B, C, D)

print("eigvals(A) =", np.linalg.eigvals(A))   # = 극
G = ct.ss2tf(sys); print("TF:", G)            # 상태공간 → 전달함수
sys2 = ct.tf2ss(G)                            # 전달함수 → 상태공간(다른 realization)
print("poles:", ct.poles(G))                  # eigvals(A)와 일치해야

eigvals(A)와 poles(G)가 일치함을, 그리고 $tf2ss$가 원래와 다른 `(A,B,C,D)를 주되 같은 극을 가짐을 확인하라(상사변환·비유일성). (출력은 여러분 환경에서 재현 — ✅ control 0.10.2 검증됨; 재현 권장.)*

4.1.10 정직 — 실현의 비유일성과 숨은 모드

  • 비유일: 같은 입출력을 내는 상태공간은 무한히 많다(4.1.7). 어떤 좌표를 고르느냐는 편의 문제지 시스템을 바꾸지는 않는다.
  • 최소 실현 vs 숨은 모드: 전달함수→상태공간 realization이 항상 최소 차수는 아니다. 가제어·가관측이 모두 성립할 때만 최소 실현이고, 그렇지 않으면 전달함수에 안 나타나는 숨은 모드가 생긴다 — 1.2.9의 상쇄가 상태공간에서는 불가관측/불가제어 모드로 드러난다. 이것을 가려내는 것이 다음 장 가제어성·가관측성이다.
  • $D$: 순수 프로퍼 플랜트는 $D=0$. D≠0은 입력이 출력에 즉시 비치는 직통 경로(드물지만 센서 일부).

4.1.11 정리 — 그리고 다음 장

  • 상태공간은 시스템을 내부 상태로 적는다: ẋ=Ax+Bu, y=Cx+Du. MIMO가 자연스럽고 내부를 드러낸다(4.1.1·4.1.3).
  • 상태 = 미래 예측에 필요한 최소 정보, 차수 $n$ = 에너지 저장 요소 수 = 극 수(4.1.2).
  • $A$의 고유값 = 극(4.1.6), 응답은 모드 $e^{\lambda t}$의 합(4.1.8). 표현은 상사변환으로 무한히 많되 고유값은 불변(4.1.7).
  • realization이 최소가 아니면 숨은 모드가 생긴다 → 4.2에서 가제어·가관측으로 가려낸다.

다음 4.2에서는 "이 시스템을 실제로 제어할 수 있나, 관측할 수 있나"를 판정하는 가제어성·가관측성을 다룬다 — 상태공간 설계의 전제 조건이다.

4.1.12 연습·생각해 볼 것

  1. 상태공간 세우기. RLC 회로 LC·v̈ + RC·v̇ + v = v_in(1.1.5)을 상태 $[v, \dot{v}]$로 상태공간 $(A,B,C,D)$(출력=$v$)로 적어라. $A$의 고유값이 특성방정식 근과 같음을 확인하라.
  2. DC모터. 1.1.7의 DC모터를 상태 $[i, \omega]$로 상태공간으로 옮겨라(전기·기계 두 식 사용). $B$는 어떻게 생겼나? 출력이 $\omega$면 $C$는?
  3. SS→TF. A=[[0,1],[−2,−3]], B=[[0],[1]], C=[1,0], D=0의 전달함수를 $C(sI-A)^{-1}B$로 구하라. 극은? 안정한가? (4.1.6)
  4. 고유값=극. 3번에서 eigvals(A)와 전달함수 극이 같음을 보여라. 왜 항상 그런가? (4.1.6)
  5. 상사변환. 3번 시스템에 $T=[[1,0],[1,1]]$로 상사변환한 (A',B',C')를 구하고, A'의 고유값이 $A$와 같음을 확인하라. 전달함수는 바뀌나? (4.1.7)
  6. 숨은 모드. 전달함수 (s−1)/[(s−1)(s+2)]을 약분 없이 2차로 realization하면, 약분되는 $s=1$ 모드가 상태공간에서 어떤 형태로 남는가? 이것이 왜 위험할 수 있나? (4.1.10, 1.2.9)
  7. (손으로) statespace.py로 1번 또는 본문 예제를 실행해 eigvals(A)=poles(G)를 확인하고, $tf2ss$로 다시 상태공간을 만들어 원래 $A$와 다르지만 고유값은 같음을 확인하라. (검증 필요)

막히면 "상태 = 미래에 필요한 최소 정보, A의 고유값 = 극, 표현은 무한·고유값은 불변" 세 마디로 돌아가라.