多層誘電体板による反射・透過特性
モジュールのインポートや初期設定など
import numpy as np
import matplotlib.pyplot as plt
np.set_printoptions(precision=4)
CCC = 299.79
qq = 180.0/np.pi
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'])
#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
ユーザ関数
多層誘電体板の反射・透過係数を求める関数は,
def func_slab_tr(nt, ep, td, t, sk, th, ic, ip):
zk00 = ep[0]*(1.0-1j*td[0])
zk00 = sk*np.sqrt(zk00)
zsin00 = np.sin(th)
zk1 = ep[nt+1]*(1.0-1j*td[nt+1])
zk1 = sk*np.sqrt(zk1)
zsin1 = zk00/zk1*zsin00
zcos1 = np.sqrt(1.0-zsin1**2)
za1, zf1 = 1.0, 1.0
zb1, zg1 = 0.0, 0.0
ttl = 0.0
zzzg = 1.0
for i in range(nt,-1,-1):
zk2 = zk1
zsin2, zcos2 = zsin1, zcos1
za2, zb2, zf2, zg2 = za1, zb1, zf1, zg1
zk1 = ep[i]*(1.0-1j*td[i])
zk1 = sk*np.sqrt(zk1)
zsin1 = zk2/zk1*zsin2
zcos1 = np.sqrt(1.0-zsin1**2)
zcos21 = zcos2/zcos1
zy2 = zcos21*(zk2/zk1)
zw2 = zcos21*(zk1/zk2)
zgm1 = 1j*t[i]*zk1*zcos1
za1 = np.exp( zgm1)*(za2*(1.0+zy2)+zb2*(1.0-zy2))/2.0
zb1 = np.exp(-zgm1)*(za2*(1.0-zy2)+zb2*(1.0+zy2))/2.0
zf1 = np.exp( zgm1)*(zf2*(1.0+zw2)+zg2*(1.0-zw2))/2.0*(zk2/zk1)
zg1 = np.exp(-zgm1)*(zf2*(1.0-zw2)+zg2*(1.0+zw2))/2.0*(zk2/zk1)
ttl = ttl+t[i]
zzzg = zzzg*np.exp(-1j*zk1*t[i]*zcos1)
ztn = 1.0/za1# transmission coefficient for perpendicular polarization
ztp = 1.0/zf1# transmission coefficient for parallel polarization
zrn = zb1/za1# reflection coefficient for perpendicular polarization
zrp = zg1/zf1# reflection coefficient for parallel polarization
if ip==1:
zrp = -zrp
if ic==0:
zzz = 1j*sk*ttl*np.cos(th)
zzz = np.exp(zzz)
ztn = ztn*zzz
ztp = ztp*zzz
zzzg = zzzg*zzz
cth = np.cos(th)
n2sth2 = np.sqrt(ep[nt+1]-np.sin(th)**2);
cth12 = n2sth2/cth
ztn = ztn*np.sqrt(cth12)
ztp = ztp*np.sqrt(cth12)
return zrn,zrp,ztn,ztp,zzzg
電磁界の複素係数から絶対値,デジベル(dB),偏角(deg)を計算するため,
def dbdeg(z):
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)
# rad = np.unwrap(rad)
deg = rad*q
return amp,db,deg
多層誘電体の寸法,比誘電率,誘電正接をフォーマット付で出力するため,
def output_dielectric(nt,t,ep,td):
print(f"{'No.':>4s} {'Thickness[mm]':>20s} {'Dielectric constant':>20s} {'Loss tangent':>20s}")
for i in range(nt+2):
print(f"{i:4d} {t[i]:20.3f} {ep[i]:20.3f} {td[i]:20.3f}")
多層誘電体による反射・透過係数の計算値をフォーマット付で出力するため,
def output_tr(aa,cha,ndel,ztn,ztp,zrn,zrp,zzzg):
atn,dtn,ptn = dbdeg(ztn)
atp,dtp,ptp = dbdeg(ztp)
arn,drn,prn = dbdeg(zrn)
arp,drp,prp = dbdeg(zrp)
atg,dtg,ptg = dbdeg(zzzg)
print(f"{'':>7s} {'Transmission coefficients':>33s} {'Reflection coefficients':>33s}")
print(f"{'':>8s} {'Perpendicular':>16s} {'Parallel':>16s} {'Perpendicular':>16s} {'Parallel':>16s}")
print(f"{cha:>8s} {'Amp[dB]':>8s} {'Ph[deg]':>8s} {'Amp[dB]':>8s} {'Ph[deg]':>8s} {'Amp[dB]':>8s} {'Ph[deg]':>8s} {'Amp[dB]':>8s} {'Ph[deg]':>8s}")
#Y1 = np.array([all,atn,ptn,atp,ptp,arn,prn,arp,prp,ptg])
#YY1 = Y1.T
for i in range(0,len(aa),ndel):
# print(('{:8.3f} '*len(aa)).format(*YY1[i]))
print(f"{aa[i]:8.2f} {dtn[i]:8.3f} {ptn[i]:8.2f} {dtp[i]:8.3f} {ptp[i]:8.2f} {drn[i]:8.3f} {prn[i]:8.2f} {drp[i]:8.3f} {prp[i]:8.2f} {ptg[i]:8.2f}")
return dtn,ptn,dtp,ptp,drn,prn,drp,prp,dtg,ptg
反射・透過係数の入射角特性を図示するため,
def figure4a(tthdeg,drn1,drp1,prn1,prp1,dtn1,dtp1,ptn1,ptp1,fname):
ymin = -40.0
dymin = np.abs(ymin)/15.0
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(11, 7)) # グラフ領域の作成,nrows=縦に並べる数,ncols=横に並べる数
ax[0][0].minorticks_on()
ax[0][0].set_xlim(0, 90)
ax[0][0].set_xticks(np.arange(0.0, 100.0, step=10))
ax[0][0].set_ylim(ymin,0.0)
ax[0][0].set_ylabel('Amplitude [dB]')
ax[0][0].plot(tthdeg,drn1, color='blue')
ax[0][0].plot(tthdeg,drp1, color='tab:green')
ax[1][0].set_xlim(0, 90)
ax[1][0].set_ylim(-180, 180)
ax[1][0].set_xticks(np.arange(0.0, 100.0, step=10))
ax[1][0].set_yticks(np.arange(-180.0, 270.0, step=90))
ax[1][0].set_ylabel('Phase [deg]')
ax[1][0].plot(tthdeg,prn1,'.', color='tab:blue')
ax[1][0].plot(tthdeg,prp1,'.', color='tab:green')
ax[0][1].minorticks_on()
ax[0][1].set_xlim(0, 90)
ax[0][1].set_xticks(np.arange(0.0, 100.0, step=10))
ax[0][1].set_ylim(ymin,0.0)
ax[0][1].set_ylabel('Amplitude [dB]')
ax[0][1].plot(tthdeg,dtn1, color='tab:orange')
ax[0][1].plot(tthdeg,dtp1, color='tab:red')
ax[1][1].set_xlim(0, 90)
ax[1][1].set_ylim(-180, 180)
ax[1][1].set_xticks(np.arange(0.0, 100.0, step=10))
ax[1][1].set_yticks(np.arange(-180.0, 270.0, step=90))
ax[1][1].set_ylabel('Phase [deg]')
ax[1][1].plot(tthdeg,ptn1,'.', color='tab:orange')
ax[1][1].plot(tthdeg,ptp1,'.', color='tab:red')
[[ax[i][j].set_xlabel('Incident angle [deg]') for i in range(2)] for j in range(2)]
[ax[i][0].legend([r'$R_\perp$ (TE, perpendicular-pol.)','$R_\parallel$ (TM, parallel-pol.)'], \
ncol=1, loc='lower right', fancybox=False, frameon=True, fontsize=10) \
for i in range(2)]
[ax[i][1].legend([r'$T_\perp$ (TE, perpendicular-pol.)','$T_\parallel$ (TM, parallel-pol.)'], \
ncol=1, loc='lower right', fancybox=False, frameon=True, fontsize=10) \
for i in range(2)]
fig.tight_layout()
fig.savefig(fname+'.pdf')
plt.show()
反射・透過係数の周波数特性を図示するため,
def figure4b(tthdeg,ffreq,drn1,drp1,prn1,prp1,dtn1,dtp1,ptn1,ptp1,drn2,drp2,prn2,prp2,dtn2,dtp2,ptn2,ptp2,fname):
ymin = -40.0
dymin = np.abs(ymin)/15.0
fig, ax = plt.subplots(2,2,figsize=(11, 7)) # グラフ領域の作成,nrows=縦に並べる数,ncols=横に並べる数
ax[0,0].minorticks_on()
ax[0,0].set_xlim(0, 90)
ax[0,0].set_xticks(np.arange(0.0, 100.0, step=10))
ax[0,0].set_ylim(ymin,0.0)
ax[0,0].set_xlabel('Incident angle [deg]')
ax[0,0].set_ylabel('Amplitude [dB]')
ax[0,0].plot(tthdeg,drn1, tthdeg,drp1, tthdeg,dtn1, tthdeg,dtp1)
ax[0,0].legend([r'$R_\perp$ (TE, perpendicular-pol.)','$R_\parallel$ (TM, parallel-pol.)','$T_\perp$ (TE, perpendicular-pol.)','$T_\parallel$ (TM, parallel-pol.)'], ncol=1, loc='lower right', fancybox=False, frameon=True, fontsize=10)
ax[1,0].set_xlim(0, 90)
ax[1,0].set_ylim(-180, 180)
ax[1,0].set_xticks(np.arange(0.0, 100.0, step=10))
ax[1,0].set_yticks(np.arange(-180.0, 270.0, step=90))
ax[1,0].set_xlabel('Incident angle [deg]')
ax[1,0].set_ylabel('Phase [deg]')
ax[1,0].plot(tthdeg,prn1,'.', tthdeg,prp1,'.', tthdeg,ptn1,'.', tthdeg,ptp1,'.')
ax[1,0].legend([r'$R_\perp$ (TE, Perpendicular-pol.)','$R_\parallel$ (TM, parallel-pol.)','$T_\perp$ (TE, Perpendicular-pol.)','$T_\parallel$ (TM, parallel-pol.)'], ncol=1, loc='lower right', fancybox=False, frameon=True, fontsize=10)
ax[0,1].set_xlim(ffreq[0], ffreq[-1])
ax[0,1].set_ylim(ymin,0.0)
ax[0,1].set_xlabel('Frequency [GHz]')
ax[0,1].set_ylabel('Amplitude [dB]')
ax[0,1].plot(ffreq,drn2, ffreq,drp2, ffreq,dtn2, ffreq,dtp2)
ax[0,1].legend([r'$R_\perp$ (TE, perpendicular-pol.)','$R_\parallel$ (TM, parallel-pol.)','$T_\perp$ (TE, perpendicular-pol.)','$T_\parallel$ (TM, parallel-pol.)'], ncol=1, loc='lower right', fancybox=False, frameon=True, fontsize=10)
ax[1,1].set_xlim(ffreq[0], ffreq[-1])
ax[1,1].set_ylim(-180, 180)
ax[1,1].set_yticks(np.arange(-180.0, 270.0, step=90))
ax[1,1].set_xlabel('Frequency [GHz]')
ax[1,1].set_ylabel('Phase [deg]')
ax[1,1].plot(ffreq,prn2,'.', ffreq,prp2,'.', ffreq,ptn2,'.', ffreq,ptp2,'.',)
ax[1,1].legend([r'$R_\perp$ (TE, perpendicular-pol. )','$R_\parallel$ (TM, parallel-pol.)','$T_\perp$ (TE, perpendicular-pol.)','$T_\parallel$ (TM, parallel-pol.)'], ncol=1, loc='lower right', fancybox=False, frameon=True, fontsize=10)
fig.tight_layout()
fig.savefig(fname+'.pdf')
plt.show()
計算条件
周波数については,
start_f, stop_f, nfreq = 5.0, 30.0, 25*20+1# 周波数の設定
ffreq = np.linspace(start_f, stop_f, nfreq)
wwl = CCC/ffreq# 波長[mm]
ssk = 2*np.pi/wwl# 波数
入射角については,
tthdeg = np.linspace(0.0, 90.0, nth+1)# incident angle
tth = tthdeg/qq
中心周波数ほかの設定は,
thdeg = 0.0
freq = 10.0# 中心周波数
nu_th = np.int64(np.round(nth)*thdeg/90)
nu_freq = np.int64(np.round((nfreq-1)*(freq-start_f)/(stop_f-start_f)))
ic = 0# =0:規格化しない, =1:誘電体スラブがない場合の位相で規格化
ip = 1# =1:式のとおり, =-1:reflection for parallel-pol. wave
誘電体境界面による反射・透過
誘電体境界面による反射・透過係数を求めるための計算条件は,
nt = 0# 誘電体スラブの層数
ep_end = 9.0# 終端の媒質の比誘電率
ep = np.array([1.0, ep_end]) # dielectric constant
td = np.array([0.0, 0.0]) # loss tangent
t = np.array([0.0, 0.0]) # thickness [mm], 境界面での反射・透過を求める場合
output_dielectric(nt,t,ep,td)
No. Thickness[mm] Dielectric constant Loss tangent
0 0.000 1.000 0.000
1 0.000 9.000 0.000
誘電体境界面による反射・透過係数を求め,計算値を出力および図示すると,
zrn,zrp,ztn,ztp,zzzg = func_slab_tr(nt, ep, td, t, ssk[nu_freq], tth, ic, ip)
print(f'Frequency={ffreq[nu_freq]:.1f}[GHz], wavelength={wwl[nu_freq]:.1f}[mm]')
dtn1,ptn1,dtp1,ptp1,drn1,prn1,drp1,prp1,dtg1,ptg1 = output_tr(tthdeg,'th[deg]',10,ztn,ztp,zrn,zrp,zzzg)
figure4a(tthdeg,drn1,drp1,prn1,prp1,dtn1,dtp1,ptn1,ptp1,'tr_nt0_angle')
Frequency=10.0[GHz], wavelength=30.0[mm]
Transmission coefficients Reflection coefficients
Perpendicular Parallel Perpendicular Parallel
th[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg]
0.00 -1.249 0.00 -1.249 0.00 -6.021 180.00 -6.021 -180.00 0.00
5.00 -1.257 0.00 -1.242 0.00 -5.999 180.00 -6.043 -180.00 0.00
10.00 -1.279 0.00 -1.220 0.00 -5.933 180.00 -6.110 -180.00 0.00
15.00 -1.317 0.00 -1.183 0.00 -5.823 180.00 -6.226 -180.00 0.00
20.00 -1.373 0.00 -1.131 0.00 -5.670 180.00 -6.396 -180.00 0.00
25.00 -1.448 0.00 -1.064 0.00 -5.475 180.00 -6.630 -180.00 0.00
30.00 -1.545 0.00 -0.982 0.00 -5.239 180.00 -6.940 -180.00 0.00
35.00 -1.668 0.00 -0.884 0.00 -4.963 180.00 -7.348 -180.00 0.00
40.00 -1.823 0.00 -0.772 0.00 -4.649 180.00 -7.884 -180.00 0.00
45.00 -2.018 0.00 -0.645 0.00 -4.299 180.00 -8.598 -180.00 0.00
50.00 -2.262 0.00 -0.508 0.00 -3.915 180.00 -9.574 -180.00 0.00
55.00 -2.571 0.00 -0.362 0.00 -3.499 180.00 -10.970 -180.00 0.00
60.00 -2.966 0.00 -0.217 0.00 -3.055 180.00 -13.120 -180.00 0.00
65.00 -3.480 0.00 -0.088 0.00 -2.586 180.00 -16.977 -180.00 0.00
70.00 -4.171 0.00 -0.006 0.00 -2.096 180.00 -28.255 -180.00 0.00
75.00 -5.140 0.00 -0.043 0.00 -1.587 180.00 -20.103 -0.00 0.00
80.00 -6.623 0.00 -0.379 0.00 -1.066 180.00 -10.780 -0.00 0.00
85.00 -9.357 0.00 -1.677 0.00 -0.535 180.00 -4.945 -0.00 0.00
90.00 nan nan nan nan nan nan nan nan 0.00
整合層による反射・透過
整合層による反射・透過係数を求めるための計算条件は,
nt = 1# 誘電体スラブの層数
ep_end = 9.0# 終端の媒質の比誘電率
epl, tdl, tl = [3.0], [0.0], [17.3084/4.0]# 1/4波長整合層
ep = np.array([1.0] + epl + [ep_end])
td = np.array([0.0] + tdl + [0.0])
t = np.array([0.0] + tl + [0.0])
output_dielectric(nt,t,ep,td)
No. Thickness[mm] Dielectric constant Loss tangent
0 0.000 1.000 0.000
1 4.327 3.000 0.000
2 0.000 9.000 0.000
整合層による反射・透過係数の入射角特性を求め,計算値を出力および図示すると,
zrn,zrp,ztn,ztp,zzzg = func_slab_tr(nt, ep, td, t, ssk[nu_freq], tth, ic, ip)
print(f'Frequency={ffreq[nu_freq]:.1f}[GHz], wavelength={wwl[nu_freq]:.1f}[mm]')
dtn1,ptn1,dtp1,ptp1,drn1,prn1,drp1,prp1,dtg1,ptg1 = output_tr(tthdeg,'th[deg]',10,ztn,ztp,zrn,zrp,zzzg)
figure4a(tthdeg,drn1,drp1,prn1,prp1,dtn1,dtp1,ptn1,ptp1,'tr_nt1_matching_angle')
Frequency=10.0[GHz], wavelength=30.0[mm]
Transmission coefficients Reflection coefficients
Perpendicular Parallel Perpendicular Parallel
th[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg]
0.00 -0.000 -38.04 -0.000 -38.04 -121.381 -90.00 -121.381 -90.00 -38.04
5.00 -0.000 -38.10 -0.000 -38.10 -56.885 126.55 -56.923 53.53 -38.12
10.00 -0.000 -38.30 -0.000 -38.31 -44.777 127.15 -44.928 53.15 -38.37
15.00 -0.001 -38.63 -0.001 -38.65 -37.627 128.17 -37.962 52.44 -38.80
20.00 -0.002 -39.10 -0.002 -39.15 -32.481 129.60 -33.064 51.37 -39.40
25.00 -0.006 -39.70 -0.005 -39.83 -28.415 131.41 -29.298 49.87 -40.19
30.00 -0.014 -40.43 -0.010 -40.71 -25.018 133.59 -26.236 47.85 -41.17
35.00 -0.027 -41.30 -0.019 -41.82 -22.069 136.12 -23.635 45.23 -42.36
40.00 -0.050 -42.30 -0.032 -43.19 -19.439 138.99 -21.333 41.99 -43.77
45.00 -0.087 -43.45 -0.052 -44.86 -17.042 142.17 -19.212 38.12 -45.42
50.00 -0.146 -44.72 -0.084 -46.85 -14.821 145.63 -17.179 33.73 -47.32
55.00 -0.238 -46.14 -0.134 -49.21 -12.736 149.35 -15.164 28.98 -49.49
60.00 -0.381 -47.68 -0.217 -51.96 -10.755 153.29 -13.120 24.12 -51.96
65.00 -0.606 -49.35 -0.357 -55.15 -8.854 157.44 -11.028 19.35 -54.74
70.00 -0.963 -51.15 -0.601 -58.80 -7.016 161.75 -8.884 14.86 -57.83
75.00 -1.551 -53.05 -1.046 -62.96 -5.224 166.19 -6.696 10.71 -61.26
80.00 -2.599 -55.06 -1.915 -67.65 -3.465 170.74 -4.479 6.92 -65.01
85.00 -4.839 -57.16 -3.942 -72.93 -1.727 175.35 -2.243 3.39 -69.10
90.00 nan nan nan nan nan nan nan nan -73.48
また,垂直入射における整合層による反射・透過係数の周波数特性は,
zrn,zrp,ztn,ztp,zzzg = func_slab_tr(nt, ep, td, t, ssk, tth[nu_th], ic, ip)
print(f'Incident angle={tthdeg[nu_th]:.1f}[deg]')
dtn2,ptn2,dtp2,ptp2,drn2,prn2,drp2,prp2,dtg2,ptg2 = output_tr(ffreq,'f[GHz]',20,ztn,ztp,zrn,zrp,zzzg)
figure4b(tthdeg,ffreq,drn1,drp1,prn1,prp1,dtn1,dtp1,ptn1,ptp1,drn2,drp2,prn2,prp2,dtn2,dtp2,ptn2,ptp2,'tr_nt1_matching_angle_freq')
Incident angle=0.0[deg]
Transmission coefficients Reflection coefficients
Perpendicular Parallel Perpendicular Parallel
f[GHz] Amp[dB] Ph[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg] Amp[dB] Ph[deg]
5.00 -0.669 -14.91 -0.669 -14.91 -8.451 139.11 -8.451 139.11 -19.02
6.00 -0.473 -18.83 -0.473 -18.83 -9.860 129.99 -9.860 129.99 -22.82
7.00 -0.289 -23.16 -0.289 -23.16 -11.919 120.47 -11.919 120.47 -26.63
8.00 -0.136 -27.87 -0.136 -27.87 -15.108 110.57 -15.108 110.57 -30.43
9.00 -0.035 -32.87 -0.035 -32.87 -20.920 100.36 -20.920 100.36 -34.23
10.00 -0.000 -38.04 -0.000 -38.04 -121.381 -90.00 -121.381 -90.00 -38.04
11.00 -0.035 -43.21 -0.035 -43.21 -20.920 -100.36 -20.920 -100.36 -41.84
12.00 -0.136 -48.21 -0.136 -48.21 -15.108 -110.57 -15.108 -110.57 -45.65
13.00 -0.289 -52.92 -0.289 -52.92 -11.919 -120.47 -11.919 -120.47 -49.45
14.00 -0.473 -57.25 -0.473 -57.25 -9.860 -129.99 -9.860 -129.99 -53.25
15.00 -0.669 -61.16 -0.669 -61.16 -8.451 -139.11 -8.451 -139.11 -57.06
16.00 -0.857 -64.68 -0.857 -64.68 -7.469 -147.82 -7.469 -147.82 -60.86
17.00 -1.020 -67.86 -1.020 -67.86 -6.793 -156.19 -6.793 -156.19 -64.67
18.00 -1.144 -70.75 -1.144 -70.75 -6.352 -164.28 -6.352 -164.28 -68.47
19.00 -1.223 -73.46 -1.223 -73.46 -6.102 -172.19 -6.102 -172.19 -72.27
20.00 -1.249 -76.08 -1.249 -76.08 -6.021 180.00 -6.021 180.00 -76.08
21.00 -1.223 -78.69 -1.223 -78.69 -6.102 172.19 -6.102 172.19 -79.88
22.00 -1.144 -81.40 -1.144 -81.40 -6.352 164.28 -6.352 164.28 -83.68
23.00 -1.020 -84.30 -1.020 -84.30 -6.793 156.19 -6.793 156.19 -87.49
24.00 -0.857 -87.47 -0.857 -87.47 -7.469 147.82 -7.469 147.82 -91.29
25.00 -0.669 -90.99 -0.669 -90.99 -8.451 139.11 -8.451 139.11 -95.10
26.00 -0.473 -94.91 -0.473 -94.91 -9.860 129.99 -9.860 129.99 -98.90
27.00 -0.289 -99.23 -0.289 -99.23 -11.919 120.47 -11.919 120.47 -102.70
28.00 -0.136 -103.94 -0.136 -103.94 -15.108 110.57 -15.108 110.57 -106.51
29.00 -0.035 -108.95 -0.035 -108.95 -20.920 100.36 -20.920 100.36 -110.31
30.00 -0.000 -114.12 -0.000 -114.12 -111.838 -90.00 -111.838 -90.00 -114.12
前のページに戻る
「目次」のページに戻る