Frequency Response
학습 목표
주파수마다 입력의 진폭과 위상이 어떻게 변하는지 알면 Bode plot을 실제 신호와 연결할 수 있습니다.
실행 조건
python-control의 ctl.frequency_response에서 magnitude와 phase를 읽습니다. 위상은 radian으로 반환되므로 표에는 degree로 변환하세요.
모듈이 없으면 Colab·Jupyter 코드 셀에서 %pip install control==0.10.2를 실행하세요.
정현파로 이득·위상 측정
시작 조건
, , rad/s. s, s입니다.
진행 방법
ctl.forced_response로 출력을 계산하고 마지막 두 주기만 골라 입력과 출력을 그리세요.- 출력을 에 최소제곱 적합해 이득 와 위상 를 구하세요.
ctl.frequency_response의 magnitude·phase와 비교하세요. phase는 radian으로 반환됩니다. 표의 위상은 두 계산 모두 degree로 변환하세요.
남길 결과
- 주파수 3행 표와 마지막 두 주기의 비교 그림 3개.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
G=1/(s*s+.5*s+1)
omega=1.;t=np.arange(0,200,.01);u=np.sin(omega*t)
response=ctl.forced_response(G,t,u)
y=np.asarray(response.outputs).reshape(-1)
keep=t>=t[-1]-4*np.pi/omega
# TODO: keep 구간의 a,b를 적합하고 이득·위상을 계산하세요.
결과 기록·자가 점검
ω [rad/s]:
측정 이득:
계산 이득:
측정 위상 [deg]:
계산 위상 [deg]:
확인할 점
- Transient가 남은 앞 구간을 제외했는가?
- 위상 단위와 360° 주기 차이를 맞춘 뒤 오차를 비교했는가?
Damping과 공진 비교
시작 조건
분모를 로 두고 을 비교합니다. ω는 logspace(-2,2,400)입니다.
진행 방법
- 세 모델의 이득·위상을 같은 주파수축에 그리세요.
- 각 모델의 최대 이득과 그 주파수, DC Gain을 표로 적으세요.
- 최대 이득 부근의 정현파 한 조건을 골라 첫 활동의 방법으로 확인하세요.
남길 결과
- Bode 형태의 그림 1세트와 공진 비교 표.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
omega=np.logspace(-2,2,400)
for a in [.2,.5,1.]:
response=ctl.frequency_response(1/(s*s+a*s+1),omega)
print(a,np.max(response.magnitude))
# TODO: 위상과 공진 주파수 표를 완성하세요.
결과 기록·자가 점검
a:
최대 이득:
최대 이득의 ω:
DC Gain:
확인할 점
- dB와 선형 이득을 구분했는가?
- 모델 간 주파수 격자와 입력 크기를 동일하게 두었는가?
시간축에서 주파수 단위 확인
시작 조건
rad/s와 Hz를 구분합니다. 두 번째 입력은 입니다.
진행 방법
- 두 입력의 주기를 먼저 적고 같은 G에서 응답을 계산하세요.
- 위상차를 시간 지연으로 읽은 값과 각도 값으로 읽은 값을 함께 적으세요.
- rad/s와 Hz를 섞었을 때 Bode plot에서 어떤 점을 잘못 읽게 되는지 설명하세요.
남길 결과
- 단위 비교 2행 표와 출력 그림.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
G=1/(s*s+.5*s+1)
for w in [1.,2*np.pi]:
print(w,'period',2*np.pi/w)
# TODO: 두 입력의 응답을 비교하세요.
결과 기록·자가 점검
입력:
ω [rad/s]:
주기 [s]:
이득:
위상 [deg]:
확인할 점
- 관계를 사용했는가?
- 진폭 변화와 주기 변화를 서로 다른 현상으로 기록했는가?