여러가지공부

Bode Plot 이란? 사용 방법과 그리는 방법, 파이썬을 사용하여 그래프 검증

끄적끄적아무거나 2021. 5. 10. 18:14
반응형

Bode Plot (보드선도) 란?

 

회로나 기계장치 등 선형적인 성질을 가진 제품에 대해 입력을 넣으면 그에 따른 응답이 나온다. 

 

그림1

그림1은 어떤 시스템에 입력 X 를 넣고 Y라는 응답을 얻어서 H라는 전달 함수를 가져왔다. 여기서 전달함수 H 를 계산할 수 있다. 그리고 위 그림1에서 알 수 있는 점은 X, Y 입력 값을 s를 사용하였는데 이는 시간 함수를 라플라스 변환하여 주파수 성분 변경한 것이다. 주파수 변경을 위해서 전제되어야 하는 점은 시스템이 LTI (Linear Time Invariant) 라는 것이다. 즉, 시간에 관계없이 동일한 주파수 특성을 가지는 것이다. 

 

보드선도는 x축을 주파수 축으로 y축은 전달함수의 크기(amplitude) 가 된다. 크기는 일반적으로 dB로 표기한다. 전달함수는 보고자하는 응답에 따라 전류, 전압, 전력, 가속도 등 다양한 형태가 될 수 있다. Bode Plot 은 주파수에 따른 진폭과 위상(Phase) 두개의 그래프로 표현 한다.

 

 


dB에 관한 간략한 정의

 

dB는 decibel 의 약자로 10배를 의미한다. dB가 나온 배경은 사람이 감지하는 소리의 비율이 10배로 인지해서 이러한 단위가 나온게 된 것이다. 예를 들어 사람이 인식할 때 10이라는 소리와 100이라는 소리 크기 차이는 1000이라는 소리에서 1090의 소리의 차이가 아닌 2000의 차이와 비슷하게 느끼는 것이다. 

그림2

그림2는 소리의 dB 값 계산 법이다. I는 Intensity의 약자로 소리세기를 파워로 표현한 것이다. 기준점 대비 몇 dB인지 알려준다. 

주의해야할 점은 전압, 전류, 가속도와 같은 값들은 파워가 아니다. 해당 값을 제곱으로 계산해야 파워값이 나오기 때문에 log 에서 제곱 성분은 log 밖으로 가가서 곱하기로 변경 된다.

그림3

그림3과 같이 20을 곱해준다. 그러므로 응답의 형태가 Power 값인지 아닌지가 중요하다. 

 

그림4

그림4의 첫번째는 일반 전류, 전압, 가속도의 응답에 대한 -3dB 값이다.  그리고 두번째 줄은 power 값에 대한 dB이다. -3dB 만큼 떨어졌다는 의미는 기준값에서 반정도(50%) 빠졌다는 의미로 신호로서 경계를 의미하기 때문에 -3dB를 중요하게 본다. 일반 측정 값은 약 70% 정도 빠진 값을 의미하는 것이 -3dB 이다. 

 

 


예제 전달함수(Transfer function) 으로 Bode Plot (보드선도) 상상해 보기

그림5

그림5와 같은 전달 함수가 있다고 생각하자.

이를 통해 Bode Plot 을 그리기 위해 진폭과 위상값을 구해야 한다.

 

그림6

그림6처럼 진폭 위상이 나왔다. 진폭은 dB로 변환하므로 log를 씌울 것이다. 그래서 나누기 부분은 log 빼기로 변환하고 곱하기는 log 더하기로 바꾸면 된다. 분모근에 해당하는 부분에서 -3dB가 발생하고 20dB 기울기로 줄어들것이다. 여기서는 동일 근이 두개 있으므로 주파수 10에서 40dB 기울기로 줄어 들 것이다. 

 

위상은 그림6처로 분자는 정수 부분만 있으므로 0도이다. 만일 j 성분만있으면 90도이다. 아무튼 분모는 위상에서 빼주면 된다. 

 

그림7

그림7과 같이 arctan 는 양의 무한대에서는 90도이고 음의 무한대에서는 -90도로 수렴한다. 

 

 


앞의 예제 파이썬(Python)을 이용해서 구현하기

 

앞선 예제를 통해 전달함수의 Bode plot의 대략적인 모습은 알 수 있으나 검증이 필요하다. 

다행히 Python에서 Bode plot을 간단하게 구현할 수 있는 scipy 라이브러리를 제공한다. 

 

from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

# sys = signal.TransferFunction([10,0], [1, 0, -100])
sys = signal.TransferFunction([1], [1, 20, 100])
w, mag, phase = signal.bode(sys, np.arange(1, 100000.0, 1).tolist())


plt.figure()
plt.semilogx(w, mag)    # Bode magnitude plot
plt.figure()
plt.semilogx(w, phase)  # Bode phase plot
plt.show()

 

주석>>

간단히 설명하면 TransferFunction 함수의 인자에서 첫번째는 분자 부분이고 두번째 리스트는 분모 부분이다. 즉, 1 / (s^2 + 20s + 100) 이다. 

그리고 signal.bode에서 x축의 범위와 간격을 정하였다.

 

그리고 그래프를 그려주는 pyplot을 이용해서 진폭과 위상을 각 각 show를 사용해서 그려 주었다.

 

결과>>

 

진폭
위상

 

해석>>

앞서 그림6에서 풀어낸 식과 같이 주파수가 커지면서 위상은 -180도에 수렴하고 진폭은 주파수 10을 기점으로 40dB 기울기로 줄어든다. 

 

 

 

 

반응형