Frequency Response · 학습
실행 조건
python-control의 ctl.frequency_response에서 magnitude와 phase를 읽습니다. 위상은 radian으로 반환되므로 표에는 degree로 변환하세요.
모듈이 없으면 Colab·Jupyter 코드 셀에서 %pip install control==0.10.2를 실행하세요.
이번에 배울 내용
주파수마다 입력의 진폭과 위상이 어떻게 변하는지 알면 Bode plot을 실제 신호와 연결할 수 있습니다.
전체 흐름
정현파 입력 → Steady State 출력 → 진폭비·위상 → Bode plot
정현파를 넣고 Steady State만 읽기
선형 시스템에 sin(ωt)를 넣으면 안정한 Steady State에서는 같은 주파수의 정현파가 나옵니다. 진폭의 비가 |G(jω)|, 입력에 대한 이동이 위상입니다.
시작 직후의 Transient Response는 추정에서 제외해야 합니다.
Bode plot의 단위
Gain의 dB 표시는 20log10(진폭비)입니다. 위상은 degree 또는 radian인지 확인합니다. 1 Hz는 2π rad/s이므로 숫자 1을 그대로 대입하면 다른 실험이 됩니다.
공진 부근에서는 주파수를 조금 바꿔도 응답이 크게 달라질 수 있습니다.
정현파와 위상 지연
에 sin(t)를 입력합니다. rad/s에서 진폭비는 1/√2, 위상은 −45°입니다.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s=ctl.tf('s')
G=1/(s+1);t=np.linspace(0,25,2501);u=np.sin(t)
t,y=ctl.forced_response(G,t,u)
plt.plot(t,u,label='Input');plt.plot(t,y,label='Output');plt.xlim(15,25);plt.xlabel('Time [s]');plt.ylabel('Amplitude');plt.legend();plt.grid()
print('Magnitude',abs(ctl.evalfr(G,1j)),'Phase [deg]',np.angle(ctl.evalfr(G,1j),deg=True))
Magnitude 0.7071067811865476 Phase [deg] -45.0