角錐ホーンのユニバーサルパターン
モジュールのインポート
import numpy as np
import scipy as sp
from scipy.integrate import quad
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'])
ユーザ関数
可変長引数**kwargsを使えば,複数のキーワード引数を辞書として受け取ることができ,被積分関数が複素数の場合に,積分変数以外の変数を引数とする場合の数値積分の関数を,
def complex_quadrature(func, a, b, **kwargs):
def real_func(x):
return np.real(func(x))
def imag_func(x):
return np.imag(func(x))
real_integral = quad(real_func, a, b, **kwargs)
imag_integral = quad(imag_func, a, b, **kwargs)
return (real_integral[0] + 1j*imag_integral[0], real_integral[1:], imag_integral[1:])
dB値と位相の計算は,
def dbdeg(z): # 電磁界の複素係数から絶対値,デジベル(dB),偏角(deg)の計算
q = 180.0/np.pi
amp = np.abs(z)
db = 20.0*np.log10(amp)
rad = np.angle(z)
rad = np.unwrap(rad, discont=0.95*np.pi)
deg = rad*q
return amp,db,deg
E面パターンを計算する場合の被積分関数は,
def func_ge(x):# E面パターンの被積分関数
return np.exp(-1j*2*np.pi*t*x**2 + 1j*np.pi*u*x)/2
また,H面パターンを計算する場合の被積分関数は,
def func_gh(x):# H面パターンの被積分関数
return np.cos(np.pi*x/2.0)*np.exp(-1j*2*np.pi*t*x**2 + 1j*np.pi*u*x)*np.pi/4
角錐ホーンの開き角による利得低下量
ttt = np.linspace(0.0, 1.0, 41)# tパラメータ
u = 0
eta_db = np.empty([2,len(ttt)])
print(f"{'t':>10s} {'eta_e(t)':>10s} {'eta_h(t)':>10s}")
for j,t in enumerate(ttt):
eta_e = complex_quadrature(func_ge, -1, 1)[0]
eta_h = complex_quadrature(func_gh, -1, 1)[0]
eta_db[:,j] = 20*np.log10(np.abs([eta_e, eta_h]))
print(f"{t:10.4f} {eta_db[0,j]:10.4f} {eta_db[1,j]:10.4f}")
t eta_e(t) eta_h(t)
0.0000 0.0000 0.0000
0.0250 -0.0095 -0.0046
0.0500 -0.0381 -0.0184
0.0750 -0.0858 -0.0413
0.1000 -0.1528 -0.0733
0.1250 -0.2391 -0.1145
0.1500 -0.3448 -0.1647
0.1750 -0.4703 -0.2238
0.2000 -0.6157 -0.2919
0.2250 -0.7813 -0.3688
0.2500 -0.9674 -0.4543
0.2750 -1.1744 -0.5485
0.3000 -1.4025 -0.6511
0.3250 -1.6522 -0.7619
0.3500 -1.9240 -0.8807
0.3750 -2.2181 -1.0074
0.4000 -2.5350 -1.1417
0.4250 -2.8750 -1.2832
0.4500 -3.2386 -1.4317
0.4750 -3.6258 -1.5868
0.5000 -4.0369 -1.7481
0.5250 -4.4715 -1.9151
0.5500 -4.9292 -2.0873
0.5750 -5.4089 -2.2643
0.6000 -5.9090 -2.4453
0.6250 -6.4268 -2.6297
0.6500 -6.9585 -2.8168
0.6750 -7.4985 -3.0059
0.7000 -8.0393 -3.1961
0.7250 -8.5710 -3.3866
0.7500 -9.0812 -3.5765
0.7750 -9.5552 -3.7650
0.8000 -9.9767 -3.9510
0.8250 -10.3300 -4.1337
0.8500 -10.6016 -4.3122
0.8750 -10.7831 -4.4856
0.9000 -10.8728 -4.6531
0.9250 -10.8764 -4.8141
0.9500 -10.8054 -4.9679
0.9750 -10.6752 -5.1140
1.0000 -10.5021 -5.2521
プロットして,
fig = plt.figure() # グラフ領域の作成
plt.grid(color = "gray", linestyle="--")
plt.plot(ttt, eta_db[0,:], label="E-plane")
plt.plot(ttt, eta_db[1,:], label="H-plane")
plt.xlim(0.0, 0.8) # x軸範囲の設定
plt.ylim(-10.0, 0.0) # y軸範囲の設定
plt.xlabel(r"$t_e, t_h$") # y軸のラベル設定
plt.ylabel("Gain loss [dB]") # x軸のラベル設定
plt.legend(ncol=1, loc='lower left', fancybox=False, frameon = True, fontsize=10)
fig.savefig('p3_ap_s2_1.pdf')
角錐ホーンのE面ユニバーサルパターン
$t$ パラメータのデータは,
tt = np.linspace(0.0, 1.0, 6)
uu = np.linspace(0, 5, 501)
ff = np.empty((len(tt),len(uu)), dtype=complex)
tt
array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])
変数 $u$ に対してE面ユニバーサルパターンを求めると,
for j,t in enumerate(tt):
u = 0
f0 = complex_quadrature(func_ge, -1, 1)[0]
for i,u in enumerate(uu):
ff[j,i] = complex_quadrature(func_ge, -1, 1)[0]/f0
amp, db, deg = dbdeg(ff)
計算値を出力して,
print(f"{'u/pi':>8s} {'t=0.0':>8s} {'t=0.2':>8s} {'t=0.4':>8s}")
for i in range(0,len(uu),25):
print(f"{uu[i]:8.2f} {db[0,i]:8.3f} {db[1,i]:8.3f} {db[2,i]:8.3f}")
u/pi t=0.0 t=0.2 t=0.4
0.00 0.000 0.000 0.000
0.25 -0.912 -0.866 -0.691
0.50 -3.922 -3.599 -2.529
0.75 -10.455 -8.320 -4.346
1.00 -323.174 -11.622 -4.775
1.25 -14.891 -10.483 -5.077
1.50 -13.465 -11.166 -6.850
1.75 -17.814 -15.547 -10.471
2.00 -327.611 -22.444 -13.020
2.25 -19.997 -17.618 -11.948
2.50 -17.902 -16.447 -12.347
2.75 -21.740 -20.236 -15.946
3.00 -336.261 -29.816 -20.449
3.25 -23.191 -21.706 -17.367
3.50 -20.824 -19.760 -16.483
3.75 -24.434 -23.301 -19.860
4.00 -inf -35.023 -26.111
4.25 -25.521 -24.403 -20.992
4.50 -23.007 -22.118 -19.350
4.75 -26.487 -25.537 -22.614
5.00 -319.999 -39.010 -30.415
プロットして,
fig = plt.figure() # グラフ領域の作成
plt.grid(color = "gray", linestyle="--")
for j,t in enumerate(tt):
plt.plot(uu, db[j,:], label=r"$t=$"+f"{t:.1f}")
plt.xlim(0.0, 5.0) # x軸範囲の設定
plt.ylim(-50.0, 5.0) # y軸範囲の設定
plt.xlabel(r"$u/\pi$ with $u = \frac{\pi D}{\lambda} \sin \theta$") # y軸のラベル設定
plt.ylabel("Relative power [dB]") # x軸のラベル設定
plt.legend(ncol=1, loc='lower left', fancybox=False, frameon = True, fontsize=10)
fig.savefig('p3_ap_s2_2.pdf')
開口面振幅分布(基本モード)によ利得低下量を求めると,
G_loss_amp = 10*np.log10(8/np.pi**2)# 開口面振幅分布(基本モード)によ利得低下量
G_loss_amp
-0.912097583963241
同様にして,変数 $u$ に対してH面ユニバーサルパターンを求めると,
for j,t in enumerate(tt):
u = 0
f0 = complex_quadrature(func_gh, -1, 1)[0]
for i,u in enumerate(uu):
ff[j,i] = complex_quadrature(func_gh, -1, 1)[0]/f0
amp, db, deg = dbdeg(ff)
プロットして,
fig = plt.figure() # グラフ領域の作成
plt.grid(color = "gray", linestyle="--")
for j,t in enumerate(tt):
plt.plot(uu, db[j,:], label=r"$t=$"+f"{t:.1f}")
plt.xlim(0.0, 5.0) # x軸範囲の設定
plt.ylim(-50.0, 5.0) # y軸範囲の設定
plt.xlabel(r"$u/\pi$ with $u = \frac{\pi D}{\lambda} \sin \theta$") # y軸のラベル設定
plt.ylabel("Relative power [dB]") # x軸のラベル設定
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon = True, fontsize=10)
fig.savefig('p3_ap_s2_3.pdf')
前のページに戻る
「目次」のページに戻る