Transfer Function · 학습
실행 조건
Pole과 Zero는 python-control의 ctl.poles와 ctl.zeros로 구합니다.
모듈이 없으면 Colab·Jupyter 코드 셀에서 %pip install control==0.10.2를 실행하세요.
이번에 배울 내용
같은 계수라도 연결 방식이나 상쇄 조건에 따라 응답이 달라집니다. 계수에서 동작을 예측하는 연습입니다.
전체 흐름
계수 배열 → Transfer Function → Pole·Zero → Step 응답
계수 배열을 Transfer Function으로 읽기
- 계수 배열: 차수가 높은 항부터.
num=[2],den=[5,1]: .- Pole: 분모의 근. 이 예에서는 .
- Zero: 분자의 근. 이 예에서는 유한 Zero 없음.
- DC Gain: . 분모의 상수항이 0이 아닙니다.
Pole과 실제 응답 연결하기
음의 실수 Pole −0.2에 대응하는 exp(−0.2t)의 Time Constant는 5초입니다. 계수로 구한 근과 Time Response를 함께 보면 계산이 물리적으로 무엇을 뜻하는지 확인할 수 있습니다.
직렬은 곱, 병렬은 합이며, 음의 단위 Feedback은 H/(1+H)로 분모까지 바꿉니다.
공통 인자의 상쇄
(s+2)/((s+1)(s+2))는 상쇄 후 1/(s+1)로 나타낼 수 있습니다. 분자의 2가 2.1로 바뀌면 완전한 상쇄가 아닙니다. 모델의 차수와 응답의 작은 차이를 함께 확인합니다.
계수에서 Pole·응답까지
H(s)=1/(2s+1)의 Pole은 −0.5, DC Gain은 1, Time Constant는 2초입니다. 아래에서 식과 그래프를 함께 확인합니다.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s=ctl.tf('s')
H=1/(2*s+1)
print('Pole:',ctl.poles(H),'Zero:',ctl.zeros(H),'DC gain:',ctl.dcgain(H))
t=np.linspace(0,10,501);t,y=ctl.step_response(H,t)
fig,axes=plt.subplots(1,2,figsize=(9,3));axes[0].scatter([-0.5],[0],marker='x');axes[0].axvline(0,color='gray');axes[0].set(xlabel='Real',ylabel='Imaginary',title='Pole location');axes[0].grid()
axes[1].plot(t,y);axes[1].axvline(2,linestyle='--',color='gray');axes[1].set(xlabel='Time [s]',ylabel='Output',title='Unit step');axes[1].grid();fig.tight_layout()
Pole: [-0.5+0.j] Zero: [] DC gain: 1.0