PythonでFDTD法で電磁界シミュレーションできるopenEMSを使う(2)例題にあるマイクロストリップパッチアンテナ(MSA)を計算する。Sパラメータや入力インピーダンスだけでなく近傍界から遠方界の変換で指向性も計算できる。電流分布も動画で見る。給電はLumpedポートが使える。
今回はマイクロストリップパッチアンテナ。
チュートリアルはPythonとMatlab/Octaveを両方見ないと分からない。
https://docs.openems.de/python/openEMS/Tutorials/Simple_Patch_Antenna.html
https://wiki.openems.de/index.php/Tutorial:_Simple_Patch_Antenna.html
まずはモジュールをインポート。
import os
import numpy as np
import matplotlib.pyplot as plt
from CSXCAD import ContinuousStructure
from openEMS import openEMS
from openEMS.physical_constants import C0, EPS0
|
物理量を設定。Sim_Pathは各自の環境に合わせて変更。後で出ますが今回は寸法は㎜単位。
Sim_Path = os.path.join("C:\\Users\\tomoh\\Documents\\Python Projects\\OpenEMS", 'Simp_Patch')
post_proc_only = False
# patch width (resonant length) in x-direction
patch_width = 32 #
# patch length in y-direction
patch_length = 40
#substrate setup
substrate_epsR = 3.38
substrate_kappa = 1e-3 * 2*np.pi*2.45e9 * EPS0*substrate_epsR
substrate_width = 60
substrate_length = 60
substrate_thickness = 1.524
substrate_cells = 4
#setup feeding
feed_pos = -6 #feeding position in x-direction
feed_R = 50 #feed resistance
# size of the simulation box
SimBox = np.array([200, 200, 150])
# setup FDTD parameter & excitation function
f0 = 2e9 # center frequency
fc = 1e9 # 20 dB corner frequency
|
FDTDの設定。ここでパラメータの意味は
-
NrTS – シミュレーションするタイムステップの最大数(例:デフォルト=1e9)
-
EndCriteria – 終了基準(例:1e-5)。エネルギーがこの値まで減少するとシミュレーションが停止します(<1e-4 が推奨、デフォルト = 1e-5)。
で、境界条件は全方向でMurの吸収境界条件。SetDefaultUnitは1e-3なのでmm単位。メッシュサイズは波長の20分の1。
FDTD = openEMS(NrTS=30000, EndCriteria=1e-4)
FDTD.SetGaussExcite( f0, fc )
FDTD.SetBoundaryCond( ['MUR', 'MUR', 'MUR', 'MUR', 'MUR', 'MUR'] )
CSX = ContinuousStructure()
FDTD.SetCSX(CSX)
mesh = CSX.GetGrid()
mesh.SetDeltaUnit(1e-3)
mesh_res = C0/(f0+fc)/1e-3/20
Jt = CSX.AddDump('Jt', dump_type=3, file_type = 0)
Jt.AddBox([-substrate_width/2, -substrate_length/2, substrate_thickness], [substrate_width/2, substrate_length/2, substrate_thickness])
|
パッチアンテナのモデルを作る。金属のパッチとGNDは端をグリッドにするとあるが一切説明ないがどうやらメッシュを見ると1/3ルールを自動でやってくれているようだ。基板の厚み部分は細かくメッシュ。給電はLumpedポート。遠方界のためのBoxも作る。
#initialize the mesh with the "air-box" dimensions
mesh.AddLine('x', [-SimBox[0]/2, SimBox[0]/2])
mesh.AddLine('y', [-SimBox[1]/2, SimBox[1]/2])
mesh.AddLine('z', [-SimBox[2]/3, SimBox[2]*2/3])
# create patch
patch = CSX.AddMetal( 'patch' ) # create a perfect electric conductor (PEC)
start = [-patch_width/2, -patch_length/2, substrate_thickness]
stop = [ patch_width/2 , patch_length/2, substrate_thickness]
patch.AddBox(priority=10, start=start, stop=stop) # add a box-primitive to the metal property 'patch'
FDTD.AddEdges2Grid(dirs='xy', properties=patch, metal_edge_res=mesh_res/2)
# create substrate
substrate = CSX.AddMaterial( 'substrate', epsilon=substrate_epsR, kappa=substrate_kappa)
start = [-substrate_width/2, -substrate_length/2, 0]
stop = [ substrate_width/2, substrate_length/2, substrate_thickness]
substrate.AddBox( priority=0, start=start, stop=stop )
# add extra cells to discretize the substrate thickness
mesh.AddLine('z', np.linspace(0,substrate_thickness,substrate_cells+1))
# create ground (same size as substrate)
gnd = CSX.AddMetal( 'gnd' ) # create a perfect electric conductor (PEC)
start[2]=0
stop[2] =0
gnd.AddBox(start, stop, priority=10)
FDTD.AddEdges2Grid(dirs='xy', properties=gnd)
# apply the excitation & resist as a current source
start = [feed_pos, 0, 0]
stop = [feed_pos, 0, substrate_thickness]
port = FDTD.AddLumpedPort(1, feed_R, start, stop, 'z', 1.0, priority=5, edges2grid='xy')
mesh.SmoothMeshLines('all', mesh_res, 1.4)
# Add the nf2ff recording box
nf2ff = FDTD.CreateNF2FFBox()
|
モデルを確認するとこんな感じ。
ここから実際の計算。
if 1: # debugging only
CSX_file = os.path.join(Sim_Path, 'simp_patch.xml')
if not os.path.exists(Sim_Path):
os.mkdir(Sim_Path)
CSX.Write2XML(CSX_file)
from CSXCAD import AppCSXCAD_BIN
os.system(AppCSXCAD_BIN + ' "{}"'.format(CSX_file))
if not post_proc_only:
FDTD.Run(Sim_Path, verbose=3, cleanup=False)
|
電流分布を見てみた。
そしてSパラメータ、入力インピーダンス、指向性の図示。
f = np.linspace(max(1e9,f0-fc),f0+fc,401)
port.CalcPort(Sim_Path, f)
s11 = port.uf_ref/port.uf_inc
s11_dB = 20.0*np.log10(np.abs(s11))
plt.figure()
plt.plot(f/1e9, s11_dB, 'k-', linewidth=2, label='$S_{11}$')
plt.grid()
plt.legend()
plt.ylabel('S-Parameter (dB)')
plt.xlabel('Frequency (GHz)')
idx = np.where((s11_dB<-10) & (s11_dB==np.min(s11_dB)))[0]
if not len(idx)==1:
print('No resonance frequency found for far-field calulation')
else:
f_res = f[idx[0]]
theta = np.arange(-180.0, 180.0, 2.0)
phi = [0., 90.]
nf2ff_res = nf2ff.CalcNF2FF(Sim_Path, f_res, theta, phi, center=[0,0,1e-3])
plt.figure()
E_norm = 20.0*np.log10(nf2ff_res.E_norm[0]/np.max(nf2ff_res.E_norm[0])) + nf2ff_res.Dmax[0]
plt.plot(theta, np.squeeze(E_norm[:,0]), 'k-', linewidth=2, label='xz-plane')
plt.plot(theta, np.squeeze(E_norm[:,1]), 'r--', linewidth=2, label='yz-plane')
plt.grid()
plt.ylabel('Directivity (dBi)')
plt.xlabel('Theta (deg)')
plt.title('Frequency: {} GHz'.format(f_res/1e9))
plt.legend()
Zin = port.uf_tot/port.if_tot
plt.figure()
plt.plot(f/1e9, np.real(Zin), 'k-', linewidth=2, label='$\Re\{Z_{in}\}$')
plt.plot(f/1e9, np.imag(Zin), 'r--', linewidth=2, label='$\Im\{Z_{in}\}$')
plt.grid()
plt.legend()
plt.ylabel('Zin (Ohm)')
plt.xlabel('Frequency (GHz)')
plt.show()
|
だいぶ雰囲気は分かってきた。次は導波管系をやってみよう。
追記:
« 松屋で本格四川風麻婆豆腐定食をいただく。水煮牛肉がめちゃくちゃ辛かったのでこれも期待していたがそれほど辛くはなく、どちらかというと塩辛い感じ?でもご飯にはよく合う。 | トップページ | 「ファラオの密室」を読んだ。めちゃくちゃ面白かった!エジプト神話と本格推理が混ざったトリックがすごい。死んでミイラにさらた神官は心臓に欠けがあり冥界の審判を受けられず、3日間地上に戻るが、そのころ先王のミイラが玄室から消える事件が発生。そのトリックとは…? »
「パソコン・インターネット」カテゴリの記事
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年6月19日 QorvoがSバンドレーダ用のBAW switched filter bank発表、Ericssonがミッションクリティカル用途のアンテナ発表、SEMCOが125℃保証の0201インチX7T 1.0㎌ 6.3V MLCC発表、iFixitがトルクスプラスねじについて解説(2025.06.19)
- 高周波・RFニュース 2025年6月18日 Qorvoが5Gインフラ向けBAWフィルタとプリドライバアンプ発表、KeysightとNTTらが300GHz帯で280Gbpsを達成する信号発生システム発表、TDKが自動車用パワー・オーバー・コアクス・インダクター発表、NordicがNeuton AI買収(2025.06.18)
- 高周波・RFニュース2025年6月17日 everythingRF magazineはIMS2025特別号、MITの6Gに向け光でディープラーニングを行うチップ論文、NGMNが6Gに向けたキーメッセージを出版、Litepoint、Spirent、ViaviのTest and Measurementのトレンドレポート(2025.06.17)
- 高周波・RFニュース 2025年6月16日 iFixitのSamsung Galaxy S25 Edge分解でCTスキャンで2階建て基板の内部や5Gミリ波アンテナモジュールが鮮明に見える、Microwave JournalでRFのヘテロジニアスインテグレーションとローデ・シュワルツの複数ポートをもつスペアナFSWX紹介(2025.06.16)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年6月19日 QorvoがSバンドレーダ用のBAW switched filter bank発表、Ericssonがミッションクリティカル用途のアンテナ発表、SEMCOが125℃保証の0201インチX7T 1.0㎌ 6.3V MLCC発表、iFixitがトルクスプラスねじについて解説(2025.06.19)
- 高周波・RFニュース 2025年6月18日 Qorvoが5Gインフラ向けBAWフィルタとプリドライバアンプ発表、KeysightとNTTらが300GHz帯で280Gbpsを達成する信号発生システム発表、TDKが自動車用パワー・オーバー・コアクス・インダクター発表、NordicがNeuton AI買収(2025.06.18)
- 高周波・RFニュース2025年6月17日 everythingRF magazineはIMS2025特別号、MITの6Gに向け光でディープラーニングを行うチップ論文、NGMNが6Gに向けたキーメッセージを出版、Litepoint、Spirent、ViaviのTest and Measurementのトレンドレポート(2025.06.17)
- 高周波・RFニュース 2025年6月16日 iFixitのSamsung Galaxy S25 Edge分解でCTスキャンで2階建て基板の内部や5Gミリ波アンテナモジュールが鮮明に見える、Microwave JournalでRFのヘテロジニアスインテグレーションとローデ・シュワルツの複数ポートをもつスペアナFSWX紹介(2025.06.16)
« 松屋で本格四川風麻婆豆腐定食をいただく。水煮牛肉がめちゃくちゃ辛かったのでこれも期待していたがそれほど辛くはなく、どちらかというと塩辛い感じ?でもご飯にはよく合う。 | トップページ | 「ファラオの密室」を読んだ。めちゃくちゃ面白かった!エジプト神話と本格推理が混ざったトリックがすごい。死んでミイラにさらた神官は心臓に欠けがあり冥界の審判を受けられず、3日間地上に戻るが、そのころ先王のミイラが玄室から消える事件が発生。そのトリックとは…? »
コメント