複素平面上の反射係数の軌跡

モジュールのインポート

import numpy as np
import matplotlib.pyplot as plt
import skrf as rf
from pylab import *

反射係数

まず,出力する値の精度を指定して,
np.set_printoptions(precision=4)
規格化負荷インピーダンス $Z_L/Z_0$,負荷点からの距離 $l$ (ここでは,1/4波長)を設定する.
length = 0.25 # 線路長
zl = 0.2+0.5j # 規格化負荷インピーダンス
規格化負荷インピーダンス $Z_L/Z_0$ より,反射係数 $\Gamma_L$ を求めると,
Gammal = (zl-1.0)/(zl+1.0) # 負荷点での反射係数
np.array(Gammal)
array(-0.4201+0.5917j)
無損失の場合,伝搬定数の減衰定数をゼロとし, 周波数サンプル点を配列として設定して反射係数を求めると,
nf = 101
ff = np.linspace(0.0, 1.0, nf) # 中心周波数で規格化した周波数
gamma = 0.0+2.0j*np.pi*ff # 伝搬定数(lossless)
s11_lossless = Gammal * np.exp(-2.0 * gamma * length) # 負荷点から離れた点での反射係数の周波数特性
n_lossless = rf.Network(f=ff, s=s11_lossless, z0=np.ones(nf))
中心周波数 $f_0$ についても同様にして,
f0 = 1.0 # 中心周波数
gamma0 = 0.0+2.0j*np.pi*f0 # 伝搬定数(lossless)
s11_lossless_f0 = Gammal * np.exp(-2.0 * gamma0 * length)
n_lossless_f0 = rf.Network(f=1.0, s=s11_lossless_f0, z0=1.0)
損失のある場合,減衰定数を追加設定し,線路長を 0 から半波長まで変化させると,
ll = np.linspace(0.0, 0.5, nf) 
gamma_loss = 0.2 + gamma0 # 中心周波数での伝搬定数(loss)
s11 = Gammal * np.exp(-2.0 * gamma_loss * ll)
n = rf.Network(f=np.ones(nf), s=s11, z0=np.ones(nf))
反射係数の周波数特性を複素平面上にプロットすると(メモリを変えればスミス図表),
fig = plt.figure(figsize=(6, 6)) # グラフ領域の作成
with style.context('seaborn-ticks'):
    n_lossless.plot_s_complex(label = r'$S_{11}$ (lossless)')    
    n.plot_s_complex(label = r'$S_{11} |_{0 < l < 0.5}$')
    n_lossless_f0.plot_s_complex(marker = 'o', markersize = 5, linewidth=0, \
                                 label = r'$S_{11} |_{f=f_0}$ (lossless)')
    plt.xlabel('Real Part');
    plt.ylabel('Imaginary Part');
    plt.title('Complex plane');
    plt.axis([-1.0,1.0,-1.0,1.0])
    plt.legend(ncol=2, loc='upper left', fancybox=False, frameon = True)
    plt.grid(color = "gray", linestyle="--")
    fig.savefig('p3_complex_plane_Gamma.pdf')
    plt.show()