2次遅れ系のボード線図・ナイキスト線図と減衰係数

# はじめに
RLC直列回路やバネのモデルで表される基本的な振動系の一種に2次遅れ系というものが存在する。二次遅れ系では、固有角速度付近で共鳴するという特徴があり、その大きさは減衰係数というものに依存する。したがって、今回は二次遅れ系のボード線図についてゲインと位相それぞれの場合について示す。そして、減衰定数を変化させていった場合、どのようにボード線図が変化するのかをコンター図を用いて図示する。そして最後に、ナイキスト線図も示す。

# 二次遅れ系
二次遅れ系は、RLC直列回路のような振動する系のモデルであり以下の伝達関数で定義される。

``` math
G(s) =\frac{\omega_n^2}{s^2+2\zeta \omega_n +\omega^2_n}
```

ただし、$\zeta$は減衰係数で$\omega_n$は固有角速度である。

ここで、$0<\zeta<1$という領域で$\zeta$を動かしたとき、ボード線図はどのように変化するのかをコンター図を用いて確認する。

# ボード線図
コンター図を描くプログラムはPythonを用いて作成した。
## ゲイン
以下のようなプログラムを作成する。

``` python bode_g_con.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

n=1000
m=100
omega = np.linspace(0,m,n)

jita=np.linspace(0,1,n)

omega,jita=np.meshgrid(omega,jita)

omega_n=20

s=1j*omega

#伝達関数G（s）→G(jω)
G=omega_n**2/(s**2+2*jita*omega_n*s+omega_n**2)

#ゲインの定義
g=20*np.log10(abs(G))
#横軸対数表示
plt.gca().set_xscale('log')
plt.xlim(0,m) #x軸範囲指定
plt.grid()
plt.contourf(omega, g, jita)
plt.colorbar(label="減衰係数")
plt.title('ボード線図（ゲイン）')
plt.xlabel('ω[rad/s]')
plt.ylabel('ゲイン[dB]')
plt.savefig("bode_g.png")

plt.show()
```
これを実行すると以下のような画像が出力される。

![bode_g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/0161c890-44b3-f040-10f7-56a9706e1ddf.png)

このように、固有角速度付近でゲインが急上昇していることが分かる。また、その度合は減衰係数に依存していて、減衰係数が小さくなるほど急上昇しやすい。

## 位相角
次に、位相角についてプログラムを示す。

``` python bode_t_con.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

n=1000
m=1000
omega = np.linspace(0,m,n)

jita=np.linspace(0,1,n)

omega,jita=np.meshgrid(omega,jita)

omega_n=100

s=1j*omega

#伝達関数G（s）→G(jω)
G=omega_n**2/(s**2+2*jita*omega_n*s+omega_n**2)

#ゲインの定義
g=20*np.log10(abs(G))
#位相の定義
theta = np.degrees(np.angle(G))


#横軸対数表示
plt.gca().set_xscale('log')
plt.xlim(0,m) #x軸範囲指定
plt.grid()
plt.contourf(omega, theta, jita)
plt.colorbar(label="減衰係数")
plt.title('ボード線図（位相）')
plt.xlabel('ω[rad/s]')
plt.ylabel('位相[度]')
plt.savefig("bode_t.png")

plt.show()
``` 
このプログラムを実行すると以下のような画像が出力される。

![bode_t.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/98eeb2ae-6637-af6b-2538-da85bc25358a.png)

このグラフから分かるとおり、ゲインの場合と同様に、減衰係数が小さい程変化が急になることが分かる。

# ナイキスト線図
ナイキスト線図を描くプログラムは以下のようになる。

``` python Nyquist_con.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

n=1000
m=1000
omega = np.linspace(0,m,n)

jita=np.linspace(0,1,n)

omega,jita=np.meshgrid(omega,jita)

omega_n=100

# k=omega_n**2/((omega_n**2-omega**2)**2+(2*omega_n*jita*omega)**2)

# x= k*(omega_n**2-omega**2)
# y= k*(-2*omega_n*jita*omega)

s=1j*omega

#伝達関数G（s）→G(jω)
G=omega_n**2/(s**2+2*jita*omega_n*s+omega_n**2)
x=G.real
y=G.imag
plt.xlim(-1,1) #x軸範囲指定
plt.ylim(-2,0) #y軸範囲指定
plt.grid()
plt.title("二次遅れ系のナイキスト線図")
plt.xlabel('実軸')
plt.ylabel('虚軸')

plt.contourf(x, y,jita)
plt.colorbar(label="減衰係数")
plt.savefig("ナイキスト線図.png")
plt.show()
``` 


![ナイキスト線図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/b9b554df-31e1-fc76-90e3-acc6727eab03.png)

このように、減衰係数が変化するとナイキスト線図の描写が変化するということが分かる。また、減衰係数が減少するほどに変化が急になるのは、ボード線図と共通している。


# まとめ
今回は、2次遅れ系についてのボード線図・ナイキスト線図をPythonを用いて描写した。そして、減衰係数を変化させていったときのボード線図・ナイキスト線図の変化の様子をコンター図を用いて図示した。その結果、減衰係数が減少するほど、ボード線図の周波数依存性の変化は大きくなるということが分かった。一方でナイキスト線図でも変化が急になるということが分かった。