강의자료 · 제어공학2

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을 그대로 대입하면 다른 실험이 됩니다.

공진 부근에서는 주파수를 조금 바꿔도 응답이 크게 달라질 수 있습니다.

정현파와 위상 지연

G(s)=1s+1G(s)=\frac1{s+1}에 sin(t)를 입력합니다. ω=1\omega=1 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
실행 결과

참고 예제

추가 예제 보기

참고 자료