電圧定在波

モジュールのインポート

import numpy as np
import matplotlib.pyplot as plt
import scienceplots
#Warning : As of version 2.0.0, you need to add import scienceplots before setting the style (plt.style.use('science')).
plt.style.use(['science', 'notebook'])

ユーザ関数

定在波の波形から最大値と最小値がわかれば,電圧定在波比(VSWR)が求められ,
def VSW(gamma, betal, th):
    vamp = np.sqrt(1.0+2.0*gamma*np.cos(th-2.0*betal) + gamma**2)*0.5
    v_max = vamp.max()
    v_min = vamp.min()
    VSWR = v_max/v_min
    return vamp, VSWR, v_max, v_min
そして,VSWRが与えられれば,反射係数を求めることができ,
def VSWR_Gamma(rho):
    gamma = (rho-1)/(rho+1) # 電圧反射係数
    pr = gamma**2*100 # 正規化した反射電力
    gdb = 20.0*np.log10(gamma) # 反射電力 [dB]
    return gamma, pr, gdb
種々の計算値をフォーマット出力するため,可変長引数を利用して,
def table_s(x, *args): # 可変長引数*args(複数の引数をタプルとして受け取る)
    nx = len(x)
    ny = len(args)
    for i in range(nx):
        print(f'{x[i]:9.3f}',end='')
        for j in range(ny):
            print(f'{args[j][i]:9.3f}',end='')
        print('')
    return
さらに,計算値の凡例ももう一つの可変長引数で渡して,
def table_ss(x, *args, **kwargs):  # 可変長引数*args(複数の引数をタプルとして受け取る, 可変長引数*args(複数の引数を辞書として受け取る)
    nx = len(x)
    ny = len(args)
    for k in kwargs.values():
        print(f'{k:>9s}',end='')
    print('')
    for i in range(nx):
        print(f'{x[i]:9.3f}',end='')
        for j in range(ny):
            print(f'{args[j][i]:9.3f}',end='')
        print('')
    return

VSWRと反射特性の関係

まず,VSWRの計算データを,配列に設定して,
rho  = np.linspace(1.0, 1.3, 31) # VSWR
rho = np.append(rho, np.linspace(1.32,  2.0, 35)) # VSWR
rho = np.append(rho, np.linspace(2.5, 10.0, 16)) # VSWR
rho = np.append(rho, np.linspace(11.0,20.0, 10)) # VSWR
rho = np.append(rho, np.linspace(25.0,40.0,  4)) # VSWR
計算,出力すると,
gamma, pr, gdb = VSWR_Gamma(rho)
table_ss(rho, gamma, pr, gdb, z1='VSWR', z2='Gamma', z3='P_r[%]', z4='Reflet[dB]')
  VSWR    Gamma   P_r[%]Reflet[dB]
 1.000    0.000    0.000     -inf
 1.010    0.005    0.002  -46.064
 1.020    0.010    0.010  -40.086
 1.030    0.015    0.022  -36.607
 1.040    0.020    0.038  -34.151
 1.050    0.024    0.059  -32.256
 1.060    0.029    0.085  -30.714
 1.070    0.034    0.114  -29.417
 1.080    0.038    0.148  -28.299
 1.090    0.043    0.185  -27.318
 1.100    0.048    0.227  -26.444
 1.110    0.052    0.272  -25.658
 1.120    0.057    0.320  -24.943
 1.130    0.061    0.373  -24.289
 1.140    0.065    0.428  -23.686
 1.150    0.070    0.487  -23.127
 1.160    0.074    0.549  -22.607
 1.170    0.078    0.614  -22.120
 1.180    0.083    0.682  -21.664
 1.190    0.087    0.753  -21.234
 1.200    0.091    0.826  -20.828
 1.210    0.095    0.903  -20.443
 1.220    0.099    0.982  -20.079
 1.230    0.103    1.064  -19.732
 1.240    0.107    1.148  -19.401
 1.250    0.111    1.235  -19.085
 1.260    0.115    1.324  -18.783
 1.270    0.119    1.415  -18.493
 1.280    0.123    1.508  -18.216
 1.290    0.127    1.604  -17.949
 1.300    0.130    1.701  -17.692
 1.320    0.138    1.902  -17.207
 1.340    0.145    2.111  -16.755
 1.360    0.153    2.327  -16.332
 1.380    0.160    2.549  -15.936
 1.400    0.167    2.778  -15.563
 1.420    0.174    3.012  -15.211
 1.440    0.180    3.252  -14.879
 1.460    0.187    3.497  -14.564
 1.480    0.194    3.746  -14.264
 1.500    0.200    4.000  -13.979
 1.520    0.206    4.258  -13.708
 1.540    0.213    4.520  -13.449
 1.560    0.219    4.785  -13.201
 1.580    0.225    5.054  -12.964
 1.600    0.231    5.325  -12.736
 1.620    0.237    5.600  -12.518
 1.640    0.242    5.877  -12.308
 1.660    0.248    6.156  -12.107
 1.680    0.254    6.438  -11.913
 1.700    0.259    6.722  -11.725
 1.720    0.265    7.007  -11.545
 1.740    0.270    7.294  -11.370
 1.760    0.275    7.582  -11.202
 1.780    0.281    7.872  -11.039
 1.800    0.286    8.163  -10.881
 1.820    0.291    8.455  -10.729
 1.840    0.296    8.748  -10.581
 1.860    0.301    9.042  -10.437
 1.880    0.306    9.336  -10.298
 1.900    0.310    9.631  -10.163
 1.920    0.315    9.927  -10.032
 1.940    0.320   10.223   -9.904
 1.960    0.324   10.519   -9.780
 1.980    0.329   10.815   -9.660
 2.000    0.333   11.111   -9.542
 2.500    0.429   18.367   -7.360
 3.000    0.500   25.000   -6.021
 3.500    0.556   30.864   -5.105
 4.000    0.600   36.000   -4.437
 4.500    0.636   40.496   -3.926
 5.000    0.667   44.444   -3.522
 5.500    0.692   47.929   -3.194
 6.000    0.714   51.020   -2.923
 6.500    0.733   53.778   -2.694
 7.000    0.750   56.250   -2.499
 7.500    0.765   58.478   -2.330
 8.000    0.778   60.494   -2.183
 8.500    0.789   62.327   -2.053
 9.000    0.800   64.000   -1.938
 9.500    0.810   65.533   -1.835
10.000    0.818   66.942   -1.743
11.000    0.833   69.444   -1.584
12.000    0.846   71.598   -1.451
13.000    0.857   73.469   -1.339
14.000    0.867   75.111   -1.243
15.000    0.875   76.562   -1.160
16.000    0.882   77.855   -1.087
17.000    0.889   79.012   -1.023
18.000    0.895   80.055   -0.966
19.000    0.900   81.000   -0.915
20.000    0.905   81.859   -0.869
25.000    0.923   85.207   -0.695
30.000    0.935   87.513   -0.579
35.000    0.944   89.198   -0.496
40.000    0.951   90.482   -0.434
逆に,反射係数からVSWRを求めると,
gdb = np.linspace(0.0, -20.0, 21)
gamma = 10.0**(gdb/20.0)
rho = (1+gamma)/(1-gamma)
table_ss(gdb, gamma, rho, z1='Gamma[dB]', z2='|Gamma|', z3='VSWR')
Gamma[dB]  |Gamma|     VSWR
  0.000    1.000      inf
 -1.000    0.891   17.391
 -2.000    0.794    8.724
 -3.000    0.708    5.848
 -4.000    0.631    4.419
 -5.000    0.562    3.570
 -6.000    0.501    3.010
 -7.000    0.447    2.615
 -8.000    0.398    2.323
 -9.000    0.355    2.100
-10.000    0.316    1.925
-11.000    0.282    1.785
-12.000    0.251    1.671
-13.000    0.224    1.577
-14.000    0.200    1.499
-15.000    0.178    1.433
-16.000    0.158    1.377
-17.000    0.141    1.329
-18.000    0.126    1.288
-19.000    0.112    1.253
-20.000    0.100    1.222

電圧定在波

電圧定在波を求めると,
gamma = 0.5 # 電圧反射係数 [dB]
gdb = 20.0*np.log10(gamma)
betal = np.linspace(0.0, 6.0*np.pi, 201)
xxx = -betal/np.pi/2
vamp, rho, v_max, v_min = VSW(gamma, betal, np.pi)
gammal, pr, gammal_db = VSWR_Gamma(rho)
print("VSWR=",rho)
print("gamma=",gammal,gammal_db,"[dB]")
計算値の中から,一部のデータを出力して,
nstep = 10 # 出力データの刻み
xx = xxx[::nstep] # beta*l
yy = vamp[::nstep] # |V|/|Vmax|
table_ss(xx,yy, z1='beta*z/2/pi', z2='|V|')
beta*z/2/pi      |V|
   -0.000    0.250
   -0.150    0.624
   -0.300    0.717
   -0.450    0.332
   -0.600    0.485
   -0.750    0.750
   -0.900    0.485
   -1.050    0.332
   -1.200    0.717
   -1.350    0.624
   -1.500    0.250
   -1.650    0.624
   -1.800    0.717
   -1.950    0.332
   -2.100    0.485
   -2.250    0.750
   -2.400    0.485
   -2.550    0.332
   -2.700    0.717
   -2.850    0.624
   -3.000    0.250
プロットして,
fig = plt.figure() # グラフ領域の作成
plt.text( -0.8, 0.93, f"$|\Gamma_L|=${gamma:.2f}")
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on()
plt.xlim(-3, 0) # x軸範囲の設定
plt.ylim(0, 1) # y軸範囲の設定
plt.xticks(np.arange(-3, 1, step=1))
plt.yticks(np.arange(0, 1.1, step=0.1))
plt.xlabel(r"$\frac{\beta z}{2\pi}$ [$\lambda_g$]") # x軸のラベル設定
plt.ylabel(r"$|V|$") # y軸のラベル設定
plt.plot(xxx, vamp, color='red')
fig.savefig('p3_tlt_s15_VSWR_Gamma_0_5.pdf')
plt.show()