제3부 디지털 제어
3.1 이산시간 시스템과 z-변환
제3부 디지털 제어 · 시작. 실제 제어기는 컴퓨터에서 일정 주기로 실행된다(0.1.4.2). 연속시간 설계(제1·2부)를 컴퓨터에 구현하려면 이산시간의 언어가 필요하다. 차분방정식, z-변환, 그리고 안정 영역이 좌반평면에서 단위원 안으로 바뀌는 핵심을 다룬다.
이 장을 마치면 차분방정식과 펄스 전달함수 $G(z)$를 다루고, z-평면에서 안정성을 판정하며(|z|<1), 연속의 $s$와 이산의 $z$가 z=e^{sT}로 이어짐을 이해해야 한다.
3.1.1 왜 디지털 — 제어기는 컴퓨터에서 실행된다
0.1.4.2의 while 루프를 떠올리자: 측정 → 오차 → 계산 → 구동을 일정 주기 $T$마다 반복했다. 이것이 디지털 제어의 실체다. 마이크로컨트롤러·PC·ROS2 노드(제7부)는 연속이 아니라 이산 시각 t=0, T, 2T, …에만 동작한다.
그래서 제1·2부의 연속 설계는 둘 중 하나로 디지털화된다: ① 연속으로 설계 후 이산 변환(3.2), ② 처음부터 이산으로 설계. 어느 쪽이든 z-변환이 토대다.
3.1.2 샘플링과 홀드 — 연속과 이산의 다리
- 샘플러(ADC): 연속 $y(t)$를 매 $T$초마다 읽어 수열 $y[k] = y(kT)$로 만든다. $T$=샘플링 주기, $fs=1/T$=샘플링 주파수.
- 영차홀드(ZOH, DAC): 제어기가 낸 $u[k]$를 다음 표본까지 계단처럼 유지한다(아래 계단 모양).
이 "표본 → 계산 → 홀드"가 연속 세계와 이산 알고리즘을 잇는다. ZOH는 평균 $T/2$의 지연을 더한다(3.1.10·3.2).
3.1.3 이산시간 신호와 차분방정식
이산 신호는 수열 $y[k]$(k=0,1,2,…)다. 연속의 미분방정식(0.2.3)에 대응하는 것이 차분방정식(difference equation)으로, 미분 대신 과거 표본으로 동특성을 적는다:
$$y[k] = a_1\cdot y[k-1] + a_2\cdot y[k-2] + \cdots + b_1\cdot u[k-1] + b_2\cdot u[k-2] + \cdots$$
y[k−1]= 한 표본 전 값. 미분dy/dt의 이산 대응은 차분(y[k]−y[k−1])/T.- 이 식 자체가 구현 코드다 — 과거 입출력으로 현재 출력을 점화식처럼 계산(3.1.8). 1.4.6의 ARX 모델이 바로 이 형태였다.
3.1.4 z-변환 — 이산의 라플라스
라플라스가 연속을 $s$영역으로 옮겼듯, z-변환은 이산 수열을 $z$영역으로 옮긴다:
$$Y(z) = \sum_{k=0}^{\infty} y[k]\cdot z^{-k}$$
핵심은 정의가 아니라 한 가지 성질이다:
z^{−1}= 단위 지연(한 표본 뒤로). 즉y[k−1]의 z-변환은z^{−1}Y(z).
이것이 라플라스의 "$s$ = 미분"(0.2.4)에 대응하는 변환이다. 차분방정식의 각 y[k−n]을 z^{−n}Y로 바꾸면 대수방정식이 된다.
- 선형성: $\mathbb{Z}\{a\cdot f+b\cdot g\} = aF+bG$.
- 시간 이동:
ℤ{y[k−n]} = z^{−n}Y(z)(초기조건 0). - 그래서 미적분 없이 곱셈·나눗셈으로 푼다 — 연속에서와 똑같은 이득.
3.1.5 펄스 전달함수 G(z)
차분방정식을 z로 옮기면 펄스 전달함수 $G(z)=Y(z)/U(z)$가 나온다. 예: $y[k] = a\cdot y[k-1] + b\cdot u[k-1]$.
$$Y = a \cdot z^{-1} Y + b \cdot z^{-1} U$$
$$Y(1 - a \cdot z^{-1}) = b \cdot z^{-1} U$$
$$G(z) = \frac{Y(z)}{U(z)} = \frac{b \cdot z^{-1}}{1 - a \cdot z^{-1}} = \frac{b}{z - a} \qquad (\text{극: } z = a)$$
$G(z)$의 극·영점(분모·분자 근)이 연속에서처럼 응답·안정성을 정한다 — 단, 해석 영역이 s-평면이 아니라 z-평면이다.
3.1.6 z-평면과 안정성 — 단위원 "안"
연속에서 안정 = "모든 극이 좌반평면"(2.1)이었다. 이산에서는 다르다.
*이산 안정성: 모든 극이 단위원 안(
|z|<1).*
| s-평면(연속) | z-평면(이산) | 의미 | ||
|---|---|---|---|---|
| 좌반평면 $\sigma<0$ | 단위원 안 ` | z | <1` | 안정 |
| 허수축 $\sigma=0$ | 단위원 위 ` | z | =1` | 경계 |
| 우반평면 $\sigma>0$ | 단위원 밖 ` | z | >1` | 불안정 |
3.1.5 예에서 극 z=a는 |a|<1이면 안정(예: $a=0.9$ 안정, $a=1.2$ 불안정). 1차 연속계 $1/(\tau s+1)$를 ZOH로 이산화하면 극이 $z=e^{-T/\tau}$로 0과 1 사이 → 안정과 일관(3.2).
판정 도구도 바뀐다: Routh-Hurwitz(2.1)는 좌반평면용이라 z엔 직접 못 쓴다. 쌍일차(Tustin) 변환
z→s후 Routh를 쓰거나(3.2), Jury 판정, 또는 단순히numpy.roots로|z|를 확인한다.
3.1.7 s↔z 사상 — 주파수와 에일리어싱 예고
연속 극 $s$와 이산 극 $z$는 z=e^{sT}로 이어진다($T$=샘플링 주기). $s=\sigma+j\omega$를 넣으면:
$$z = e^{sT} = e^{\sigma T}\cdot e^{j\omega T} \quad\to\quad |z| = e^{\sigma T}, \quad \angle z = \omega T$$
- $\sigma<0$ →
|z|<1(안), $\sigma=0$ →|z|=1(위), $\sigma>0$ → 밖. 3.1.6 표 그대로. - 주파수 $\omega$는 단위원 둘레의 각 $\angle z=\omega T$로 매핑된다. $\omega=0$→$z=1$, $\omega=\pi/T$(나이퀴스트 주파수)→$z=e^{j\pi}=-1$.
- ⚠️ 사상은 다대일이다: $\omega$와 $\omega+2\pi/T$가 같은 $z$로 간다. 나이퀴스트 주파수 위 신호는 낮은 주파수로 나타남(에일리어싱) — 샘플링이 가져오는 가장 중요한 함정이며 3.2에서 본격적으로 다룬다.
3.1.8 변환표와 구현 — 차분방정식으로 코딩
자주 쓰는 z-변환쌍(상세는 부록 A.1):
| 이산 $y[k]$ | $Y(z)$ |
|---|---|
| 단위 임펄스 $\delta[k]$ | 1 |
단위 계단 1 | z/(z−1) = 1/(1−z^{−1}) |
지수 aᵏ | z/(z−a) |
구현은 거꾸로다 — $G(z)$를 z^{−1}의 비로 적고 점화식으로 코딩한다. 예 G(z)=b/(z−a) = bz^{−1}/(1−az^{−1}):
# G(z)=b/(z−a) 를 코드로: y[k] = a·y[k−1] + b·u[k−1]
y_prev, u_prev = 0.0, 0.0
def step(u): # 매 표본 호출
global y_prev, u_prev
y = a*y_prev + b*u_prev
y_prev, u_prev = y, u
return y
이것이 디지털 제어기의 본모습이다 — 2.5.7의 이산 PID도, 제7부 ROS2 노드도 결국 이런 점화식이다. z-변환은 설계·해석의 언어이고, 차분방정식은 실행 코드다.
3.1.9 도구로 — 이산 전달함수
# discrete.py — 이산 전달함수와 극, 연속→이산 미리보기
import control as ct
T = 0.1 # 샘플링 주기
Gz = ct.tf([1], [1, -0.9], T) # 1/(z−0.9), dt=T → 이산계
print("poles:", ct.poles(Gz)) # |극| < 1 이면 안정
print("안정?", all(abs(p) < 1 for p in ct.poles(Gz)))
Gs = ct.tf([1], [1, 1]) # 연속 1/(s+1)
Gd = ct.c2d(Gs, T, method='zoh') # ZOH 이산화 (자세히 3.2)
print(Gd)
이산계는 dt(샘플링 주기)를 함께 준다. $c2d$가 연속→이산 변환을 대신한다(방법·함정은 3.2). (출력은 여러분 환경에서 재현 — ✅ control 0.10.2 검증됨; 재현 권장.)
3.1.10 정직 — 이산이 새로 들고 오는 것
이산화는 대가가 따른다. 연속에는 없던 문제들이 따라온다.
- 계산·홀드 지연: 표본 사이 ZOH는 평균 $T/2$ 지연을 더하고, 계산 시간만큼 또 지연된다. 지연은 위상 여유를 줄인다(2.4) — $T$가 크면 치명적.
z^{−1}은 실제 지연: 점화식의 한 표본 지연은 실제 시간 $T$의 지연이다. 빠른 동특성에는 작은 $T$가 필요.- 에일리어싱: 나이퀴스트($\pi/T$) 위 성분은 저주파로 나타난다(3.1.7) → 안티에일리어싱 필터·적절한 $T$가 필수(3.2).
- 양자화: ADC·DAC의 유한 비트는 작은 잡음·극한주기를 만든다.
핵심 설계 결정인 샘플링 주기 $T$의 선택과 연속→이산 변환법(ZOH·Tustin)이 다음 장의 주제다.
3.1.11 정리 — 그리고 다음 장
- 디지털 제어기는 표본화→계산→홀드를 주기 $T$로 반복한다(3.1.1·3.1.2). 동특성은 차분방정식, 변환 도구는 z-변환(
z^{−1}=단위 지연)이다(3.1.3·3.1.4). - 펄스 전달함수 $G(z)$의 극으로 안정성을 보되, 안정 영역은 단위원 안
|z|<1(좌반평면 아님)이다(3.1.6). 연속과 이산은z=e^{sT}로 이어진다(3.1.7). - $G(z)$는 점화식으로 코딩되어 실제 제어기가 된다(3.1.8). 이산화는 지연·에일리어싱·양자화를 새로 들고 온다(3.1.10).
다음 3.2에서는 핵심 실무 결정 — 샘플링 주기 선정과 연속→이산 변환(ZOH·Tustin), 그리고 에일리어싱을 다룬다.
3.1.12 연습·생각해 볼 것
- 차분 ↔ z. 차분방정식
y[k] = 0.8y[k−1] + 0.5u[k] − 0.3u[k−1]의 펄스 전달함수 $G(z)=Y/U$를 구하라. 극은? 안정한가? (3.1.5·3.1.6) - 안정 판정. 다음 이산 극 집합을 안정/경계/불안정으로 분류하라: ⓐ
{0.5, −0.7}, ⓑ{0.9, 1.05}, ⓒ $\{0.6\pm j0.6\}$(|·| 계산), ⓓ{1, 0.3}. (3.1.6) - s→z 매핑. 연속 극
s=−2를 샘플링 주기 $T=0.1$로 이산화하면 z-평면 어디로 가나(z=e^{sT})? $s=-2\pm j10$은?|z|<1인가? (3.1.7) - 나이퀴스트. $T=0.01 \,\mathrm{s}$일 때 나이퀴스트 주파수(rad/s, Hz)는? 이보다 높은 주파수의 신호가 표본화되면 어떻게 보이나? (3.1.7·3.1.10)
- 구현.
G(z) = 0.2/(z−0.8)를 점화식y[k]=…로 적고, 단위 계단 입력에 대해 $y[0], y[1], y[2], y[3]$을 손으로 계산하라. 정상상태값은 얼마로 수렴하나? (3.1.8) - 연속 직관 잇기. 연속 1차계 $1/(\tau s+1)$가 안정인 것과, 그 ZOH 이산화 극 $z=e^{-T/\tau}$가
(0,1)에 있어 안정인 것이 일관됨을 설명하라. $T$를 키우면 극은 어디로 움직이나? (3.1.6·3.1.7) - (손으로)
discrete.py로 $1/(s+1)$을 $T=0.1$과 $T=1.0$으로 ZOH 이산화해 극 위치를 비교하라. $T$가 커지면 이산 극이 단위원 어디로 가며, 응답은 어떻게 달라질지 추측하라. (검증 필요 — 3.2 예고)
막히면 "z⁻¹은 한 표본 지연, 안정은 단위원 안, s와 z는 z=e^{sT}" 세 마디로 돌아가라.