直線電流素子による放射パターン

モジュールのインポートや初期設定など

import matplotlib.pyplot as plt  
import numpy as np
import warnings
np.set_printoptions(precision=5) # ndarrayの小数点以下の桁数を一括設定
warnings.simplefilter('ignore') # warningの抑制
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'])
# rcPramsを使ってTeXのフォントをデフォルトにする
#plt.rcParams['font.family'] = 'Times New Roman' # font familyの設定
plt.rcParams['font.family'] = 'serif' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'cm' # math fontの設定
#plt.rcParams["font.size"] = 9
plt.rcParams['figure.figsize'] = [6, 5]

ユーザ関数

任意の数の配列要素をフォーマット付き出力するため,
def table(*args):
    n1, n2 = np.shape(args)
    for i in range(n2):
        [print(f'{args[j][i]:8.3f}',end=' ') for j in range(n1)]
        print("")
    return

有限長の一様電流分布による遠方放射電界

 長さ$L$の範囲に一様電流が$z$方向に流れている線状電流素子による規格化指向性は, \begin{gather} \bar{\boldsymbol{E}} =\frac{\boldsymbol{E}}{\boldsymbol{E}_{max} \cdot \boldsymbol{a}_\theta} = \frac{\sin u}{u} \sin \theta \ \boldsymbol{a}_\theta \equiv f(\theta) \ \boldsymbol{a}_\theta \end{gather} ここで, \begin{gather} u = \frac{\pi L}{\lambda } \cos \theta \end{gather} 波長で規格化した長さ$\bar{L}=L/\lambda$を定義して, \begin{gather} u = \pi \bar{L} \cos \theta \end{gather} パラメータ $u$,規格化した放射電界の成分(主偏波)$f(\theta)$,相対的な放射電力のデシベル値は,
def ue_pattern(th,L):
    u = np.pi*L*np.cos(th)
    f = np.sinc(u/np.pi)*np.sin(th)
    p = 20*np.log10(np.abs(f))
    return u,f,p
放射方向の角度 $\theta$ を等角度間隔で1次元配列とし,
qq = 180.0/np.pi
th_min, th_max, n_th = -np.pi, np.pi, 361
th = np.linspace(th_min, th_max, n_th)
th_deg = th*qq
電流素子の長さ $L$ を次のように設定し,一様電流分布による遠方の放射パターンを求めると,
L = np.array([0.1,0.3,0.5,0.75,1.0,1.25,1.5])
u,f0,p0 = ue_pattern(th,L[0])
u,f1,p1 = ue_pattern(th,L[1])
u,f2,p2 = ue_pattern(th,L[2])
print(f"{'th[deg]':>8s} {'p0[dB]':>8s} {'p1[dB]':>8s} {'p2[dB]':>8s} {'u':>8s}")
table(th_deg[::20],p0[::20],p1[::20],p2[::20],u[::20])
 th[deg]   p0[dB]   p1[dB]   p2[dB]        u
-180.000 -318.383 -319.566 -322.162   -1.571 
-160.000   -9.445  -10.486  -12.740   -1.476 
-140.000   -3.923   -4.607   -6.046   -1.203 
-120.000   -1.285   -1.573   -2.161   -0.785 
-100.000   -0.137   -0.172   -0.241   -0.273 
 -80.000   -0.137   -0.172   -0.241    0.273 
 -60.000   -1.285   -1.573   -2.161    0.785 
 -40.000   -3.923   -4.607   -6.046    1.203 
 -20.000   -9.445  -10.486  -12.740    1.476 
   0.000     -inf     -inf     -inf    1.571 
  20.000   -9.445  -10.486  -12.740    1.476 
  40.000   -3.923   -4.607   -6.046    1.203 
  60.000   -1.285   -1.573   -2.161    0.785 
  80.000   -0.137   -0.172   -0.241    0.273 
 100.000   -0.137   -0.172   -0.241   -0.273 
 120.000   -1.285   -1.573   -2.161   -0.785 
 140.000   -3.923   -4.607   -6.046   -1.203 
 160.000   -9.445  -10.486  -12.740   -1.476 
 180.000 -318.383 -319.566 -322.162   -1.571 
放射パターンをプロットすると,
fig = plt.figure(figsize=(8, 5))
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on()
plt.axis([-180,180,-30,2])
plt.xticks(np.arange(-180, 180+45, step=45))
for i in range(3):
    plt.plot(th_deg, ue_pattern(th,L[i])[2], label=rf"uniform, $L/\lambda={L[i]:.2f}$")
plt.xlabel(r"Angle $\theta$ [deg]")
plt.ylabel("Relative power [dB]")
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True)
fig.savefig('p3_ap_uniform_pattern.pdf')

コサインテーパ分布による遠方放射電界

 長さ $L$ の $z$ 方向のコサインテーパ分布の電流素子による規格化指向性は, \begin{gather} \bar{\boldsymbol{E}} =\frac{\boldsymbol{E}}{\boldsymbol{E}_{max} \cdot \boldsymbol{a}_\theta} = \frac{\cos u}{1-(\frac{2u}{\pi})^2} \sin \theta \ \boldsymbol{a}_\theta \equiv f(\theta) \ \boldsymbol{a}_\theta \end{gather} ここで, \begin{gather} u = \frac{\pi L}{\lambda } \cos \theta = \pi \bar{L} \cos \theta \end{gather} ただし,$u=\pm \pi/2$のときは $f(\theta)$ の分母がゼロになるので,ロピタルの定理より, \begin{gather} \left. \frac{\cos u}{1-(\frac{2u}{\pi})^2} \right|_{u=\pm \pi/2} = \lim_{u\to\pm \pi/2} \frac{-\sin u}{-\frac{8u}{\pi^2}} = \frac{\pi}{4} \end{gather} パラメータ $u$,コサインテーパ分布による規格化放射電界の成分(主偏波)$f(\theta)$,相対的な放射電力のデシベル値は,
def cos_taper_pattern(th,L):
    u = np.pi*L*np.cos(th)
    x = 1.0-(2*u/np.pi)**2
    f = np.where(np.abs(x)<1.0e-10, np.pi/4, np.cos(u)/x)
    f = f*np.sin(th)
    p = 20*np.log10(np.abs(f))
    return u,f,p
これより,
l = L[4]
u,f_ue,p_ue = ue_pattern(th,l)
u,f_cos,p_cos = cos_taper_pattern(th,l)
print(f"{'th[deg]':>8s} {'f_ue':>8s} {'f_cos':>8s} {'u':>8s}")
table(th_deg[::20],f_ue[::20],f_cos[::20],u[::20])
 th[deg]     f_ue    f_cos        u
-180.000   -0.000   -0.000   -3.142 
-160.000   -0.022   -0.133   -2.952 
-140.000   -0.179   -0.354   -2.407 
-120.000   -0.551   -0.680   -1.571 
-100.000   -0.937   -0.957   -0.546 
 -80.000   -0.937   -0.957    0.546 
 -60.000   -0.551   -0.680    1.571 
 -40.000   -0.179   -0.354    2.407 
 -20.000   -0.022   -0.133    2.952 
   0.000    0.000    0.000    3.142 
  20.000    0.022    0.133    2.952 
  40.000    0.179    0.354    2.407 
  60.000    0.551    0.680    1.571 
  80.000    0.937    0.957    0.546 
 100.000    0.937    0.957   -0.546 
 120.000    0.551    0.680   -1.571 
 140.000    0.179    0.354   -2.407 
 160.000    0.022    0.133   -2.952 
 180.000    0.000    0.000   -3.142
この放射パターンと一様電流分布による放射パターンを比較してプロットすると,
fig = plt.figure(figsize=(8, 5))
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on()
plt.axis([-180,180,-30,2])
plt.xticks(np.arange(-180, 180+45, step=45))
plt.plot(th_deg, ue_pattern(th,l)[2], alpha=0.5, linewidth=3, label=rf"uniform, $L/\lambda={l:.2f}$")
plt.plot(th_deg, cos_taper_pattern(th,l)[2], '--', color='tab:red', label=rf"cos taper, $L/\lambda={l:.2f}$")
plt.xlabel(r"Angle $\theta$ [deg]")
plt.ylabel("Relative power [dB]")
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True)
fig.savefig('p3_ap_cos_taper_pattern.pdf')

中央給電ダイポールアンテナ

 中央給電ダイポールの電流分布 $I(z')$ は, \begin{gather} I(z') = I_0 \sin \left[ k \left( \frac{L}{2} - |z'| \right) \right] \ \ \ \ \ \left( |z'| < \frac{L}{2} \right) \end{gather} ただし,$k$ は波数を示し, \begin{gather} k = \frac{2 \pi}{\lambda} \end{gather} これより, \begin{gather} \bar{\boldsymbol{E}} =\frac{\boldsymbol{E}}{\boldsymbol{E}_{max} \cdot \boldsymbol{a}_\theta} = \frac{\cos u -\cos \left( \frac{\pi L}{\lambda } \right) }{\sin \theta} \boldsymbol{a}_\theta \equiv f(\theta) \ \boldsymbol{a}_\theta \end{gather} ここで, \begin{gather} u = \frac{\pi L}{\lambda } \cos \theta = \pi \bar{L} \cos \theta \end{gather} 波長で規格化した座標 $\bar{z}'=z'/\lambda$ を定義して, \begin{gather} I(\bar{z}') = I_0 \sin \left[ 2\pi \left( \frac{\bar{L}}{2} - |\bar{z}'| \right) \right] \ \ \ \ \ \left( |\bar{z}'| < \frac{\bar{L}}{2} \right) \end{gather} まず,中央給電ダイポールアンテナの電流分布は,
def dipole_current(z,L):
    current = np.where(np.abs(z) < L/2, np.sin(2*np.pi*(L/2-np.abs(z))), 0.0)
    return current
これより電流の値を求めると,
Lmax = np.max(L)
z = np.linspace(-Lmax/2,Lmax/2, 201)
i2 = dipole_current(z,L[2])
i3 = dipole_current(z,L[3])
i4 = dipole_current(z,L[4])
i5 = dipole_current(z,L[5])
print(f"{'z/wl':>8s} {'i2':>8s} {'i3':>8s} {'i4':>8s} {'i5':>8s}")
table(z[::10],i2[::10],i3[::10],i4[::10],i5[::10])
    z/wl       i2       i3       i4       i5
  -0.750    0.000    0.000    0.000    0.000 
  -0.675    0.000    0.000    0.000    0.000 
  -0.600    0.000    0.000    0.000    0.156 
  -0.525    0.000    0.000    0.000    0.588 
  -0.450    0.000    0.000    0.309    0.891 
  -0.375    0.000    0.000    0.707    1.000 
  -0.300    0.000    0.454    0.951    0.891 
  -0.225    0.156    0.809    0.988    0.588 
  -0.150    0.588    0.988    0.809    0.156 
  -0.075    0.891    0.951    0.454   -0.309 
   0.000    1.000    0.707    0.000   -0.707 
   0.075    0.891    0.951    0.454   -0.309 
   0.150    0.588    0.988    0.809    0.156 
   0.225    0.156    0.809    0.988    0.588 
   0.300    0.000    0.454    0.951    0.891 
   0.375    0.000    0.000    0.707    1.000 
   0.450    0.000    0.000    0.309    0.891 
   0.525    0.000    0.000    0.000    0.588 
   0.600    0.000    0.000    0.000    0.156 
   0.675    0.000    0.000    0.000    0.000 
   0.750    0.000    0.000    0.000    0.000 
この電流分布をプロットすると,
fig = plt.figure(figsize=(8, 5))
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on()
plt.axis([-Lmax/2,Lmax/2,-1,1])
for i in range(2,6):
    plt.plot(z, dipole_current(z,L[i]), label=rf"$L/\lambda={L[i]:.2f}$")
plt.xlabel(r"$z/\lambda$")
plt.ylabel(r"$I/I_{max}$")
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True)
fig.savefig('p3_ap_dipole_current.pdf')

中央給電ダイポールアンテナの指向性は,
def dipole_pattern(th,L):
    u = np.pi*L*np.cos(th)
    cl = np.cos(np.pi*L)
    f = np.where(np.abs(np.cos(th))==1.0, 0.0, (np.cos(u)-cl)/np.sin(th)/(1-cl))
    p = 20*np.log10(np.abs(f))
    return u,f,p
より計算して,
u,fd2,pd2 = dipole_pattern(th,L[2])
u,fd3,pd3 = dipole_pattern(th,L[3])
u,fd4,pd4 = dipole_pattern(th,L[4])
u,fd5,pd5 = dipole_pattern(th,L[5])
print(f"{'th[deg]':>8s} {'pd2[dB]':>8s} {'pd3[dB]':>8s} {'pd4[dB]':>8s} {'pd5[dB]':>8s} {'u':>8s}")
table(th_deg[::20],pd2[::20],pd3[::20],pd4[::20],pd5[::20],u[::20])
 th[deg]  pd2[dB]  pd3[dB]  pd4[dB]  pd5[dB]        u
-180.000     -inf     -inf     -inf     -inf   -3.927 
-160.000  -11.164  -14.717  -31.647  -12.029   -3.690 
-140.000   -5.053   -7.271  -13.944  -11.740   -3.008 
-120.000   -1.761   -2.649   -4.771  -13.174   -1.963 
-100.000   -0.194   -0.297   -0.521   -1.087   -0.682 
 -80.000   -0.194   -0.297   -0.521   -1.087    0.682 
 -60.000   -1.761   -2.649   -4.771  -13.174    1.963 
 -40.000   -5.053   -7.271  -13.944  -11.740    3.008 
 -20.000  -11.164  -14.717  -31.647  -12.029    3.690 
   0.000     -inf     -inf     -inf     -inf    3.927 
  20.000  -11.164  -14.717  -31.647  -12.029    3.690 
  40.000   -5.053   -7.271  -13.944  -11.740    3.008 
  60.000   -1.761   -2.649   -4.771  -13.174    1.963 
  80.000   -0.194   -0.297   -0.521   -1.087    0.682 
 100.000   -0.194   -0.297   -0.521   -1.087   -0.682 
 120.000   -1.761   -2.649   -4.771  -13.174   -1.963 
 140.000   -5.053   -7.271  -13.944  -11.740   -3.008 
 160.000  -11.164  -14.717  -31.647  -12.029   -3.690 
 180.000     -inf     -inf     -inf     -inf   -3.927
この放射パターンをプロットすると,
fig = plt.figure(figsize=(8, 5))
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on()
plt.axis([-180,180,-30,2])
plt.xticks(np.arange(-180, 180+45, step=45))
for i in range(2,6):
    plt.plot(th_deg, dipole_pattern(th,L[i])[2], label=rf"$L/\lambda={L[i]:.2f}$")
plt.xlabel(r"Angle $\theta$ [deg]")
plt.ylabel("Relative power [dB]")
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True)
fig.savefig('p3_ap_dipole_patterns.pdf')

有限長一様電流分布,コサインテーパ分布よる放射パターンと,中央給電ダイポールアンテナの放射パターンを同じ長さで比較すると,
l = L[5]
fig = plt.figure(figsize=(8, 5))
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on()
plt.axis([-180,180,-30,2])
plt.xticks(np.arange(-180, 180+45, step=45))
plt.plot(th_deg, ue_pattern(th,l)[2], alpha=0.3, linewidth=5, label=rf"uniform, $L/\lambda={l:.2f}$")
plt.plot(th_deg, cos_taper_pattern(th,l)[2], '--', label=rf"cos taper, $L/\lambda={l:.2f}$")
plt.plot(th_deg, dipole_pattern(th,l)[2], label=rf"dipole, $L/\lambda={l:.2f}$")
plt.xlabel(r"Angle $\theta$ [deg]")
plt.ylabel("Relative power [dB]")
plt.legend(ncol=1, loc='best', fancybox=False, frameon = True)
fig.savefig('p3_ap_element_pattern.pdf')

これを円グラフにプロットすると,
fig = plt.figure(figsize=(7,7))
ax = plt.subplot(111, polar=True)
plt.grid(color = "gray", linestyle="--")
#plt.minorticks_on()
ax.set_rlim([-20.0, 0.0])
ax.set_rgrids(np.arange(-20, 5, 5), fontsize=14, angle=7)
ax.set_theta_zero_location("N")# 始点を北へ
ax.set_thetalim([-np.pi, np.pi])
#ax.set_thetamin(-170)
#ax.set_thetamax(170)
ax.set_thetagrids(np.rad2deg(np.linspace(-np.pi, np.pi, 13)[1:]),fontsize=14)
plt.plot(th, ue_pattern(th,l)[2], alpha=0.3, linewidth=5, label=rf"uniform, $L/\lambda={l:.2f}$")
plt.plot(th, cos_taper_pattern(th,l)[2], '--', label=rf"cos taper, $L/\lambda={l:.2f}$")
plt.plot(th, dipole_pattern(th,l)[2], label=rf"center-fed dipole, $L/\lambda={l:.2f}$")
plt.legend(ncol=1, loc='best', bbox_to_anchor=(1.2, 1.15), fancybox=False, frameon = True, fontsize=14)
plt.tight_layout()
fig.savefig('p3_ap_element_patterns_polar.pdf')