同軸導波管の遮断定数および分散特性¶

In [1]:
from json.encoder import INFINITY
import matplotlib.pyplot as plt  
import numpy as np  
from scipy.special import jv, yv# ベッセル関数
from scipy.special import jn_zeros, jnp_zeros, jnjnp_zeros, jnyn_zeros# ベッセル関数の零点
from scipy import optimize
import pandas as pd
import scienceplots
plt.style.use(['science', 'notebook'])
In [2]:
np.set_printoptions(precision=3)
In [3]:
# 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"] = 10
plt.rcParams['figure.figsize'] = [6, 5]

零点の計算¶

In [4]:
def func_dbesj(m,x):# 第1種ベッセル関数の導関数
    return (jv(m-1,x)-jv(m+1,x))*0.5
In [5]:
def func_dbesy(m,x):# 第2種ベッセル関数の導関数
    return (yv(m-1,x)-yv(m+1,x))*0.5
In [6]:
def func_djdn(x,m,c):# 特性方程式(for TE mode)
    xc = x*c
    return func_dbesj(m,x) * func_dbesy(m,xc) - func_dbesj(m,xc) * func_dbesy(m,x)
In [7]:
def func_jjnn(x,m,c):# 特性方程式(for TM mode)
    xc = x*c
    return jv(m,x) * yv(m,xc) - jv(m,xc) * yv(m,x)
In [8]:
def table2(sx,sy1,sy2,x,y1,y2):
    nx = len(x)
    print(f"{sx:>7s}",f"{sy1:>7s}",f"{sy2:>7s}")
    for i in range(nx):
        print(f'{x[i]:7.2f}',f'{y1[i]:7.2f}',f'{y2[i]:7.2f}')
    return
In [9]:
m = 2
c = 3 # = a(外導体)/b(内導体)
x_min, x_max, n_x = 0.2, 2.0, 41
x = np.linspace(x_min, x_max, n_x)
y1 = func_djdn(x,m,c)
y2 = func_jjnn(x,m,c)
In [10]:
table2('x','F_TE(x)','F_TM(x)/dx', x, y1, y2)
      x F_TE(x) F_TM(x)/dx
   0.20  -44.34    1.38
   0.24  -28.63    1.37
   0.29  -19.66    1.35
   0.34  -14.07    1.33
   0.38  -10.35    1.31
   0.42   -7.77    1.28
   0.47   -5.91    1.25
   0.52   -4.53    1.22
   0.56   -3.48    1.19
   0.60   -2.66    1.16
   0.65   -2.03    1.12
   0.70   -1.53    1.08
   0.74   -1.13    1.04
   0.78   -0.80    1.00
   0.83   -0.54    0.96
   0.88   -0.33    0.91
   0.92   -0.17    0.87
   0.97   -0.03    0.82
   1.01    0.07    0.77
   1.05    0.16    0.73
   1.10    0.22    0.68
   1.15    0.27    0.63
   1.19    0.31    0.59
   1.23    0.33    0.54
   1.28    0.34    0.49
   1.32    0.35    0.45
   1.37    0.34    0.40
   1.41    0.34    0.36
   1.46    0.32    0.32
   1.50    0.31    0.27
   1.55    0.29    0.23
   1.59    0.27    0.20
   1.64    0.24    0.16
   1.68    0.22    0.12
   1.73    0.19    0.09
   1.77    0.17    0.06
   1.82    0.14    0.03
   1.86    0.12    0.00
   1.91    0.09   -0.02
   1.95    0.07   -0.05
   2.00    0.04   -0.07
In [11]:
x_min, x_max, n_x = 0.2, 2.0, 201
x = np.linspace(x_min, x_max, n_x)
for c in [2, 3, 4, 6]:
    plt.plot(x,func_djdn(x,m,c), label='$c=$'+str(c))
plt.grid(color = "gray", linestyle="--")
plt.ylim(-10, 3)
plt.xlabel(r"$x$")
plt.ylabel(r"$F_{\mathrm{TE}}(x)$")
plt.legend(ncol=1, loc='lower right', fancybox=False, frameon=True)
Out[11]:
<matplotlib.legend.Legend at 0x13f85d790>
No description has been provided for this image
In [12]:
for c in [2, 3, 4, 6]:
    plt.plot(x,func_jjnn(x,m,c), label='$c=$'+str(c))
plt.grid(color = "gray", linestyle="--")
plt.xlabel(r"$x$")
plt.ylabel(r"$F_{\mathrm{TM}}(x)$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
Out[12]:
<matplotlib.legend.Legend at 0x13afd7950>
No description has been provided for this image
In [13]:
def multi_zero(func, x1, delta, n_del, *args):
    """
    与えられた関数 func のゼロ点を複数探索する関数.
    
    引数:
      func : 対象の関数 (例: TEモードの特性方程式 func_djdn)
      x1   : 探索の開始点
      delta: 区間幅 (探索ステップ)
      n_del: 区間分割の回数
      *args: func に渡す追加引数 (m, c など)
    
    処理内容:
      [x1, x1+delta], [x1+delta, x1+2*delta], … と順番に区間を動かしていき,
      区間両端で関数の符号が変わっていれば「ゼロ点がある」と判定する。
      そのとき Brent 法 (optimize.brentq) で正確な根を求め,配列 z に追加する。
    """
    j = 0
    z = np.empty(0)  # ゼロ点を格納する配列
    for i in range(n_del):
        x2 = x1 + delta
        # 区間 [x1, x2] の符号が異なる → ゼロ点あり
        if func(x1, *args) * func(x2, *args) < 0.0:
            j = j + 1
            # Brent 法でゼロ点を厳密に求める
            zero = optimize.brentq(func, x1, x2, args)
            z = np.append(z, zero)
        # 次の区間へ移動
        x1 = x2
    return z

TE$_{1m}$モードの遮断波数(see Table 2.4 and 2.5 in Waveguide Handbook)¶

In [14]:
m = 1
print('m =',m)
x1, delta, n_del = 0.01, 0.5, 300 # root 探索条件の設定
print(f"{'c':>3s}",f"{'(c+1)x TE11':>17s}",f"{'(c-1)x TE11':>17s}",f"{'(c-1)x TE12':>17s}",f"{'(c-1)x TE13':>17s}",f"{'(c-1)x TE14':>17s}")
for c in [1.1, 1.5, 2, 3, 4, 6]:
    chi_TE = multi_zero(func_djdn,x1,delta,n_del, m,c) #TE1m-mode
    print(f"{c:.1f} {(c+1)*chi_TE[0]:17.15f} {(c-1)*chi_TE[0]:17.15f} {(c-1)*chi_TE[1]:17.15f} {(c-1)*chi_TE[2]:17.15f} {(c-1)*chi_TE[3]:17.15f}")
m = 1
  c       (c+1)x TE11       (c-1)x TE11       (c-1)x TE12       (c-1)x TE13       (c-1)x TE14
1.1 2.000753996264717 0.095273999822129 3.144125471019917 6.284451414570857 9.425621994596963
1.5 2.012728899933146 0.402545779986629 3.188254248271056 6.306433270897156 9.440263049861674
2.0 2.032008015409752 0.677336005136584 3.282471191161380 6.353211168548531 9.471329653051917
3.0 2.054484689878674 1.027242344939337 3.515531883259984 6.472220753333443 9.549879429822674
4.0 2.055631721559711 1.233379032935826 3.753344220786587 6.606241589942695 9.638222102609868
6.0 2.032932994527979 1.452094996091414 4.153112072189210 6.887132881999404 9.829413931957662
In [15]:
#x1, delta, n_del = 0.01, 0.5, 300 # root 探索のパラメータ設定
cc = np.linspace(1.1,6.0,41)
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    cchi[0,i] = (c+1)*chi[0]
    cchi[1:4,i] = (c-1)*chi[1:4]
In [16]:
fig = plt.figure(figsize=(7, 4.5))
plt.plot(cc, cchi[0], label='$n=$1') # 基本モード (n=1): (c+1)χ_11
for i in range(1,4): # 高次モード (n=2,3,4): (c-1)χ_1n
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TE$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c+1)\chi_{11}$, $(c-1)\chi_{1n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TE1n.pdf')
No description has been provided for this image

TE$_{2m}$モードの遮断波数¶

In [17]:
m = 2
print('m =',m)
x1, delta, n_del = 0.01, 0.5, 300
# TE2mの遮断波数
print(f"{'c':>3s}",f"{'(c+1)x TE21':>17s}",f"{'(c-1)x TE21':>17s}",f"{'(c-1)x TE22':>18s}",f"{'(c-1)x TE23':>17s}",f"{'(c-1)x TE24':>17s}")
for c in [1.1, 1.5, 2, 3, 4, 6]:
    chi_TE = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    print(f"{c:.1f}",(c+1)*chi_TE[0], (c-1)*chi_TE[0], (c-1)*chi_TE[1], (c-1)*chi_TE[2], (c-1)*chi_TE[3])
m = 2
  c       (c+1)x TE21       (c-1)x TE21        (c-1)x TE22       (c-1)x TE23       (c-1)x TE24
1.1 4.001491501673691 0.190547214365414 3.1484695679248547 6.286622151523257 9.427068988968987
1.5 4.020157430349295 0.8040314860698591 3.2690382332197125 6.346399493533962 9.46684280224748
2.0 4.021806430003566 1.3406021433345219 3.5312908080237304 6.4747056913231384 9.551579248282932
3.0 3.9099700806611617 1.9549850403305808 4.1802056140110695 6.813346977873948 9.770132405519135
4.0 3.761619455473697 2.256971673284218 4.767938075348915 7.217395890377823 10.028427876817007
6.0 3.551995626828201 2.537139733448715 5.486414554817708 8.02239603775778 10.632535373268826
In [18]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    cchi[0,i] = (c+1)*chi[0]
    cchi[1:4,i] = (c-1)*chi[1:4]

fig = plt.figure(figsize=(7, 4.5))
plt.plot(cc, cchi[0], label='$n=$1')
for i in range(1,4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TE$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c+1)\chi_{21}$, $(c-1)\chi_{2n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TE2n.pdf')
No description has been provided for this image

TE$_{3m}$モードの遮断波数¶

In [19]:
m = 3
print('m =',m)
x1, delta, n_del = 0.01, 0.5, 300
# TE3mの遮断波数
print(f"{'c':>3s}",f"{'(c+1)x TE21':>17s}",f"{'(c-1)x TE21':>17s}",f"{'(c-1)x TE22':>18s}",f"{'(c-1)x TE23':>17s}",f"{'(c-1)x TE24':>17s}")
for c in [1.1, 1.5, 2, 3, 4, 6]:
    chi_TE = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    print(f"{c:.1f}",(c+1)*chi_TE[0], (c-1)*chi_TE[0], (c-1)*chi_TE[1], (c-1)*chi_TE[2], (c-1)*chi_TE[3])
m = 3
  c       (c+1)x TE21       (c-1)x TE21        (c-1)x TE22       (c-1)x TE23       (c-1)x TE24
1.1 6.0021960265170895 0.2858188584055759 3.155696565461434 6.290238389511922 9.42948015467189
1.5 6.017118591491891 1.2034237182983782 3.40003978460221 6.412507249892721 9.510989377239284
2.0 5.936631281735962 1.9788770939119873 3.9200545489290777 6.673799945201808 9.684214417729782
3.0 5.5521216134522415 2.7760608067261208 5.084381160559855 7.374391794349502 10.135244489994959
4.0 5.241932021855283 3.1451592131131703 5.899847098923287 8.190307973913484 10.691097965957802
6.0 4.900528758774552 3.5003776848389654 6.663064740880522 9.36138732401703 11.903292725503796
In [20]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    cchi[0,i] = (c+1)*chi[0]
    cchi[1:4,i] = (c-1)*chi[1:4]
    
fig = plt.figure(figsize=(7, 4.5))
plt.plot(cc, cchi[0], label='$n=$1')
for i in range(1,4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TE$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c+1)\chi_{31}$, $(c-1)\chi_{3n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TE3n.pdf')
No description has been provided for this image

TE$_{0m}$モードの遮断波数¶

In [21]:
m = 0
print('m =',m)
x1, delta, n_del = 0.01, 0.5, 300
# TE0mの遮断波数
print(f"{'c':>3s}",f"{'(c-1)x TE02':>18s}",f"{'(c-1)x TE03':>18s}",f"{'(c-1)x TE04':>18s}",f"{'(c-1)x TE05':>18s}")
for c in [1.1, 1.5, 2, 3, 4, 6]:
    chi_TE = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    print(f"{c:.1f}",[(c-1)*chi_TE[j] for j in range(4)])
m = 0
  c        (c-1)x TE02        (c-1)x TE03        (c-1)x TE04        (c-1)x TE05
1.1 [3.142676116865281, 6.283727669721799, 9.425139613958596, 12.566641874783558]
1.5 [3.160935955274682, 6.293059955108771, 9.431387699448678, 12.57133501016001]
2.0 [3.196578380810635, 6.312349510373262, 9.444464925482274, 12.58120281010411]
3.0 [3.271231999808586, 6.357681348818459, 9.476181289445739, 12.605437500222733]
4.0 [3.335629195208695, 6.4026911311253105, 9.509219129515062, 12.631222007422597]
6.0 [3.432159938260941, 6.481891277291728, 9.571581160252988, 12.68165361030949]
In [22]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
    cchi[0:4,i] = (c-1)*chi[0:4]
    
fig = plt.figure(figsize=(7, 4.5))
for i in range(4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TE$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c-1)\chi_{0n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TE0n.pdf')
No description has been provided for this image

TM$_{1m}$モードの遮断波数¶

In [23]:
m = 1
print('m =',m)
# TM1mの遮断波数(see Table 2.3 in Waveguide Handbook)
x1, delta, n_del = 0.01, 0.5, 300
print(f"{'c':>3s}",f"{'(c-1)x TM11':>18s}",f"{'(c-1)x TM12':>18s}",f"{'(c-1)x TM13':>18s}",f"{'(c-1)x TM14':>19s}")
for c in [1.1, 1.5, 2, 2.5, 3, 3.5]:
    chi_TM = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    print(f"{c:.1f}",[(c-1)*chi_TM[j] for j in range(4)])
m = 1
  c        (c-1)x TM11        (c-1)x TM12        (c-1)x TM13         (c-1)x TM14
1.1 [3.142676116865281, 6.283727669721799, 9.425139613958596, 12.566641874783558]
1.5 [3.160935955274682, 6.293059955108771, 9.431387699448678, 12.57133501016001]
2.0 [3.196578380810635, 6.312349510373262, 9.444464925482274, 12.58120281010411]
2.5 [3.2347087197404916, 6.334635873114591, 9.459874908222703, 12.592919976460514]
3.0 [3.271231999808586, 6.357681348818459, 9.476181289445739, 12.605437500222733]
3.5 [3.3049435884308487, 6.380519094169744, 9.492740425826776, 12.61828676137987]
In [24]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    cchi[0:4,i] = (c-1)*chi[0:4]
    
fig = plt.figure(figsize=(7, 4.5))
for i in range(4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TM$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c-1)\chi_{1n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TM1n.pdf')
No description has been provided for this image

TM$_{2m}$モードの遮断波数¶

In [25]:
m = 2
print('m =',m)
# TM2mの遮断波数(see Table 2.3 in Waveguide Handbook)
x1, delta, n_del = 0.01, 0.5, 300
print(f"{'c':>3s}",f"{'(c-1)x TM21':>18s}",f"{'(c-1)x TM22':>18s}",f"{'(c-1)x TM23':>18s}",f"{'(c-1)x TM24':>19s}")
for c in [1.1, 1.5, 2, 2.5, 3, 3.5]:
    chi_TM = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    print(f"{c:.1f}",[(c-1)*chi_TM[j] for j in range(4)])
m = 2
  c        (c-1)x TM21        (c-1)x TM22        (c-1)x TM23         (c-1)x TM24
1.1 [3.147006233908805, 6.28589665279903, 9.426586088314853, 12.567726858092842]
1.5 [3.237120549621241, 6.3324091060120855, 9.457782467579609, 12.591173971808088]
2.0 [3.4069214265675254, 6.427765922596122, 9.522852269953338, 12.640381169493802]
2.5 [3.5795602121310313, 6.5366590132723115, 9.599200474232576, 12.698685429463872]
3.0 [3.7359936198087556, 6.6476530389264195, 9.67962489794302, 12.760858550622975]
3.5 [3.872443479561359, 6.755682369457354, 9.760855880809611, 12.824567578474603]
In [26]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    cchi[0:4,i] = (c-1)*chi[0:4]
    
fig = plt.figure(figsize=(7, 4.5))
for i in range(4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TM$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c-1)\chi_{2n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TM2n.pdf')
No description has been provided for this image

TM$_{3m}$モードの遮断波数¶

In [27]:
m = 3
print('m =',m)
# TM1mの遮断波数(see Table 2.3 in Waveguide Handbook)
x1, delta, n_del = 0.01, 0.5, 300
print(f"{'c':>3s}",f"{'(c-1)x TM21':>18s}",f"{'(c-1)x TM22':>18s}",f"{'(c-1)x TM23':>18s}",f"{'(c-1)x TM24':>19s}")
for c in [1.1, 1.5, 2, 2.5, 3, 3.5]:
    chi_TM = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    print(f"{c:.1f}",[(c-1)*chi_TM[j] for j in range(4)])
m = 3
  c        (c-1)x TM21        (c-1)x TM22        (c-1)x TM23         (c-1)x TM24
1.1 [3.154209865046905, 6.289509965494494, 9.428996387037229, 12.569534956057874]
1.5 [3.3601459055743677, 6.397469094107833, 9.501617907140703, 12.62417300124246]
2.0 [3.7288700680255555, 6.615921267944649, 9.652244999658542, 12.738484093925553]
2.5 [4.07978520395061, 6.860824862256251, 9.827762216227299, 12.87345925311659]
3.0 [4.377456031842572, 7.104602683092632, 10.011254265484979, 13.016962206912416]
3.5 [4.621402436733534, 7.334575780443955, 10.194724321318647, 13.163540730565513]
In [28]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    cchi[0:4,i] = (c-1)*chi[0:4]

fig = plt.figure(figsize=(7, 4.5))
for i in range(4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TM$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c-1)\chi_{3n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TM3n.pdf')
No description has been provided for this image

TM$_{0m}$モードの遮断波数¶

In [29]:
m = 0
print('m =',m)
# TM1mの遮断波数(see Table 2.3 in Waveguide Handbook)
x1, delta, n_del = 0.01, 0.5, 300
print(f"{'c':>3s}",f"{'(c-1)x TM01':>17s}",f"{'(c-1)x TM02':>17s}",f"{'(c-1)x TM03':>18s}",f"{'(c-1)x TM04':>19s}")
for c in [1.1, 1.5, 2, 2.5, 3, 3.5]:
    chi_TM = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    print(f"{c:.1f}",[(c-1)*chi_TM[j] for j in range(4)])
m = 0
  c       (c-1)x TM01       (c-1)x TM02        (c-1)x TM03         (c-1)x TM04
1.1 [3.141231415988434, 6.283004509280927, 9.424657406630049, 12.566280192920024]
1.5 [3.135117607897875, 6.2798904094287975, 9.422573728960318, 12.564715401074807]
2.0 [3.1230309195956925, 6.27343571399218, 9.418207542251581, 12.561423185525364]
2.5 [3.1098432735824115, 6.265948241282228, 9.41305497819662, 12.557511126074054]
3.0 [3.096917556578892, 6.258168031436134, 9.407594413939501, 12.553329264808474]
3.5 [3.0846872845939126, 6.250412529197461, 9.402039692670083, 12.549034146982965]
In [30]:
cchi = np.empty((5,len(cc)))
for i,c in enumerate(cc):
    chi = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
    cchi[0:4,i] = (c-1)*chi[0:4]

fig = plt.figure(figsize=(7, 4.5))
for i in range(4):
    plt.plot(cc, cchi[i], label='$n=$'+str(i+1))
plt.text( 4, 1, r"TM$_{mn}$ mode", fontsize=16)
plt.text( 4, 13, f"$m=${m:1d}", fontsize=16)
plt.xlim(1, 6)
plt.ylim(0, 15)
plt.xlabel(r"$c$")
plt.ylabel(r"$(c-1)\chi_{0n}$")
plt.legend(ncol=1, loc='upper right', fancybox=False, frameon=True)
fig.savefig('coxial_wg_chi_TM0n.pdf')
No description has been provided for this image
In [31]:
#a = 75.09 # 外導体の半径 [mm]
a = 14.3 # 外導体の半径 [mm]
D = a*2
#b = 20.02 # 内導体の半径 [mm]
b = 3.2 # 内導体の半径 [mm]
c = a/b
D, a, b, c
Out[31]:
(28.6, 14.3, 3.2, 4.46875)
In [32]:
m = 1
chi_TE = multi_zero(func_djdn,x1,delta,n_del, m,c)#TE1m-mode
chi_TM = multi_zero(func_jjnn,x1,delta,n_del, m,c)#TM1m-mode
In [33]:
n = 5
n2 = n*2
chi = np.empty(n2)
chi[0::2] = chi_TE[0:n]
chi[1::2] = chi_TM[0:n]
chi
Out[33]:
array([0.375, 0.969, 1.112, 1.852, 1.923, 2.746, 2.791, 3.645, 3.678,
       4.546])
In [34]:
mm = np.ones(n2, dtype=np.int8)
i = np.arange(n, dtype=np.int8)
nn = np.empty(n2, dtype=np.int8)
nn[0::2] = i[:]+1
nn[1::2] = i[:]+1
mm,i,nn
Out[34]:
(array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int8),
 array([0, 1, 2, 3, 4], dtype=int8),
 array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5], dtype=int8))
In [35]:
mode = np.empty(n2, dtype=object)
mode[0::2] = 'TE'
mode[1::2] = 'TM'
mode
Out[35]:
array(['TE', 'TM', 'TE', 'TM', 'TE', 'TM', 'TE', 'TM', 'TE', 'TM'],
      dtype=object)
In [36]:
imode = np.empty(n2, dtype=np.int8)
imode[mode=='TE'] = 1
imode[mode=='TM'] = -1
imode
Out[36]:
array([ 1, -1,  1, -1,  1, -1,  1, -1,  1, -1], dtype=int8)
In [37]:
k_c = chi/b# 遮断波数
wl_c = 2*np.pi/k_c# 遮断波長
CCC = 299.79
f_c = CCC/wl_c# 遮断周波数
f_c
Out[37]:
array([ 5.595, 14.45 , 16.583, 27.608, 28.678, 40.941, 41.616, 54.347,
       54.837, 67.789])
In [38]:
def cutoff_wavelength(imode,m,n,a,c):
    b = a/c
    if imode==1:# TE
        if n==1:
            wl_c = np.pi*(a+b)/m
        else:
            wl_c = 2*(a-b)/(n-1)
    else:# TM
        wl_c = 2*(a-b)/n
    return wl_c
In [39]:
wl_c_eq = np.empty(n2)
print("a =",a,"[mm], b =",b,'[mm], c =',c)
print(f"{'No.':>7s}",f"{'mode':>7s}",f"{'chi':>10s}",f"{'(c-1)*chi':>10s}",f"{'k_c':>10s}",\
      f"{'wl_c[mm]':>9s}",f"{'wlc_eq[mm]':>10s}",f"{'fc[GHz]':>10s}",f"{'fc_eq[GHz]':>10s}")
for i in range(0,n2):
    wl_c_eq[i] = cutoff_wavelength(imode[i],mm[i],nn[i],a,c)
    print(f'{i+1:6.0f} {mode[i]:2s} {mm[i]:2d} {nn[i]:2d} {chi[i]:10.6f} {(c-1)*chi[i]:10.6f} {k_c[i]:10.6f}'\
          f'{wl_c[i]:10.6f} {wl_c_eq[i]:10.6f} {f_c[i]:10.6f} {CCC/wl_c_eq[i]:10.6f}')
    
a = 14.3 [mm], b = 3.2 [mm], c = 4.46875
    No.    mode        chi  (c-1)*chi        k_c  wl_c[mm] wlc_eq[mm]    fc[GHz] fc_eq[GHz]
     1 TE  1  1   0.375218   1.301537   0.117256 53.585392  54.977871   5.594622   5.452921
     2 TM  1  1   0.969159   3.361771   0.302862 20.746016  22.200000  14.450485  13.504054
     3 TE  1  2   1.112183   3.857884   0.347557 18.078139  22.200000  16.583012  13.504054
     4 TM  1  2   1.851582   6.422676   0.578619 10.858924  11.100000  27.607707  27.008108
     5 TE  1  3   1.923336   6.671573   0.601043 10.453810  11.100000  28.677583  27.008108
     6 TM  1  3   2.745781   9.524427   0.858057  7.322577   7.400000  40.940503  40.512162
     7 TE  1  4   2.791107   9.681653   0.872221  7.203662   7.400000  41.616332  40.512162
     8 TM  1  4   3.644915  12.643299   1.139036  5.516231   5.550000  54.346891  54.016216
     9 TE  1  5   3.677804  12.757382   1.149314  5.466902   5.550000  54.837273  54.016216
    10 TM  1  5   4.546426  15.770414   1.420758  4.422418   4.440000  67.788711  67.520270
In [40]:
eps = 1.0e-14
f_stop = 50.0
nf = 31
fff = np.empty((n2,nf))
omega = np.empty((n2,nf))
beta_f = np.empty((n2,nf))
alpha_f = np.empty((n2,nf))
beta_f_norm = np.empty((n2,nf))
for i in range(n2):
    if f_stop <= f_c[i]:
        continue
    ff = np.array([f_c[i]+(f_stop-f_c[i])*(j/(nf-1))**4 for j in range(nf)])# リスト内包表記
    ff = ff+eps
    fff[i,:] = ff
    omega[i,:] = 2*np.pi*ff
    wwl = CCC/ff# 自由空間波長[mm]
    ssk = 2*np.pi/wwl# 自由空間波数
    beta_f[i,:] = np.sqrt(ssk**2-k_c[i]**2)
    beta_f_norm[i,:] = beta_f[i,:]/ssk
In [41]:
def beta_alpha(sk, kc):
    beta, wl_g, alpha = 0.0, 0.0, 0.0
    kz2 = sk**2-kc**2
    beta = np.where(sk>kc, np.sqrt(kz2), 0.0)
    alpha = np.where(sk<=kc, np.sqrt(-kz2), 0.0)
    return beta, alpha
In [42]:
k_0 = np.linspace(0.0,1.0,101)
omega_0 = k_0*CCC
In [43]:
fig = plt.figure(figsize=(8, 6))
plt.text( 0.2, 30, f"$a=${a:.1f} mm, $b=${b:.1f} mm", fontsize=16)
plt.text( 0.2, 10, f"$c=a/b=${c:.1f}", fontsize=16)
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on() # #補助目盛りをつける
plt.xlabel(r"$\beta$") # x軸のラベル設定
plt.ylabel(r"$\omega$") # y軸のラベル設定
plt.xlim(0, 0.7) # y軸範囲の設定
plt.ylim(0, 250.0) # y軸範囲の設定
for i in range(5):
    plt.plot(beta_f[i,:], omega[i,:], label=fr"{mode[i]}$_{{{mm[i]}{nn[i]}}}$")
plt.plot(k_0, omega_0, '--', label='light')
plt.legend(ncol=1, loc='lower right', fancybox=False, frameon=True)
fig.savefig('beta-omega_coxial_wg.pdf')
No description has been provided for this image
In [44]:
fig = plt.figure(figsize=(8, 6))
plt.text( 22.0, 0.9, f"$a=${a:.1f} mm, $b=${b:.1f} mm", fontsize=16)
plt.text( 22.0, 0.82, f"$c=a/b=${c:.1f}", fontsize=16)
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on() # #補助目盛りをつける
plt.xlabel(r"$f$ [GHz]") # x軸のラベル設定
plt.ylabel(r"$\beta/k_0$") # y軸のラベル設定
plt.xlim(5, 40.0) # y軸範囲の設定
plt.ylim(0, 1.0) # y軸範囲の設定
for i in range(5):
    plt.plot(fff[i,:], beta_f_norm[i,:], label=fr"{mode[i]}$_{{{mm[i]}{nn[i]}}}$")
plt.legend(ncol=1, loc='upper left', fancybox=False, frameon=True)
fig.savefig('freq-beta_coxial_wg.pdf')
No description has been provided for this image