강의자료 · 제어공학2

Transfer Function

학습 목표

같은 계수라도 연결 방식이나 상쇄 조건에 따라 응답이 달라집니다. 계수에서 동작을 예측하는 연습입니다.

실행 조건

Pole과 Zero는 python-control의 ctl.poles와 ctl.zeros로 구합니다.

모듈이 없으면 Colab·Jupyter 코드 셀에서 %pip install control==0.10.2를 실행하세요.

계수에서 Pole·Zero로

시작 조건

진행 방법

  1. A를 기준 예제로 실행하세요. 분자·분모를 다항식으로 쓰고 np.roots와 ctl.poles/ctl.zeros로 계산합니다.
  2. B와 C에도 같은 절차를 적용하세요. 분자·분모의 차수와 유한 Zero 개수를 구분하고, 복소근은 실수부·허수부를 함께 기록합니다.
  3. 세 모델의 Pole·Zero를 한 복소평면에 표시하세요. Pole은 ×, Zero는 ○로 구분하고 모델별 색을 달리합니다.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
models = {'A':([2],[5,1]), 'B':([1,2],[1,3,2]), 'C':([1,1],[1,2,5])}
H_A = ctl.tf(*models['A'])
print(H_A, ctl.poles(H_A), ctl.zeros(H_A), ctl.dcgain(H_A))
# TODO: B, C의 표와 복소평면 그림을 완성하세요.

결과 기록·자가 점검

모델:

H(s):

Pole:

유한 Zero:

DC Gain:

확인할 점

직렬·병렬·Feedback 대조

시작 조건

H1(s)=2sH_1(s)=\frac2s, H2(s)=34s+1H_2(s)=\frac3{4s+1}. Feedback은 H1H2H_1H_2에 대한 음의 단위 Feedback입니다.

진행 방법

  1. Hs=H1H2H_s=H_1H_2, Hp=H1+H2H_p=H_1+H_2, T=Hs1+HsT=\frac{H_s}{1+H_s}를 식으로 구하세요.
  2. ctl.series, ctl.parallel, ctl.feedback로 같은 모델을 만들고, ω=[0.1,1,10] rad/s에서 직접 만든 식과 비교하세요.
  3. T의 Unit Step을 0≤t≤500\le t\le 50 s에서 그리세요. Hs·Hp의 원점 Pole과 DC Gain의 의미를 구분합니다.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
H1=ctl.tf([2],[1,0]); H2=ctl.tf([3],[4,1])
Hs=ctl.series(H1,H2); Hp=ctl.parallel(H1,H2); T=ctl.feedback(Hs,1)
print(Hs, Hp, T)
t=np.linspace(0,50,2501)
t,y=ctl.step_response(T,t)
plt.plot(t,y); plt.xlabel('Time [s]'); plt.ylabel('Output'); plt.grid()
# TODO: 직접 계산한 모델과 주파수응답을 비교하세요.

결과 기록·자가 점검

연결:

직접 구한 분자:

직접 구한 분모:

최대 Frequency Response 오차:

확인할 점

상쇄와 작은 계수 변화

시작 조건

B의 분자 [1,2]를 [1,2.1]로 바꾼 모델 D를 만듭니다. 두 모델의 분모는 [1,3,2]입니다.

진행 방법

  1. B·D의 원래 Pole–Zero map과 minreal로 정리한 모델을 나란히 기록하세요.
  2. 동일한 Unit Step 입력에서 두 응답의 차이를 0≤t≤100\le t\le 10 s에 그리세요.
  3. 완전 상쇄와 근접 상쇄를 구분하고, 상쇄 전 모델도 남겨야 하는 이유를 설명하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
B=ctl.tf([1,2],[1,3,2]); D=ctl.tf([1,2.1],[1,3,2])
print(ctl.minreal(B),ctl.minreal(D))
# TODO: 같은 시간축에서 두 응답과 차이를 확인하세요.

결과 기록·자가 점검

모델:

원래 차수:

정리 후 차수:

최대 응답 차이:

확인할 점