電圧定在波
モジュールのインポート
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()
前のページに戻る
「目次」のページに戻る