高周波エンジニアのためのAI・機械学習入門(19)PythonとKeras3.0とscikit-rfを使ってディープラーニング(DNN)で同軸コネクタがついたマイクロストリップラインのSパラメータからTDRを使わずに特性インピーダンスを予測する。今回は学習データをモンテカルロで作る。
フィルタ、アンテナとAI・機械学習の事例をやってきたので今回は伝送線路系。
測定治具は通常、同軸コネクタ(SMAなど)→同軸の芯と基板との接続部(不連続部)→基板に形成された伝送線路(マイクロストリップラインなど)のような構成をとる。特に不連続部の反射が大きかったりばらついたりして、マイクロストリップラインの特性インピーダンスがSパラメータだけからはよくわからない。通常使われるのはTDR(Time Domain Reflectometry)。
今回はTDRを使わず、不連続部と線路幅がばらついたSパラメータと特性インピーダンスを学習させて、Sパラメータのみで特性インピーダンスを予測する。
前回で、測定治具のモデリングの関数を作っておいた。これを使ってモンテカルロシミュレーションを行う。
基本、フィルタのときと同じなので説明は略。
不連続部をLとCでモデリングして、これと線路幅を乱数で振っている。そのSパラメータをdata, 特性インピーダンスをlabelとして10000個のデータを作る。
import numpy as np
import matplotlib.pyplot as plt
import skrf as rf
from skrf.media import Coaxial, MLine
rf.stylely()
def mesurement_jig(fstart, fstop, n, coaxial_length, cap, ind, width, length, height, er):
"""
測定治具を模したSパラメータ及び基板の特性インピーダンスを返す関数
測定治具は
同軸コネクタ→シャントC→シリーズL
→基板に形成されたマイクロストリップライン
→シリーズL→シャントC→同軸コネクタの構成
導体損・tanδは今回は固定されている。
Parameters
----------
fstart : float
最低周波数[GHz]
fstop : float
最高周波数[GHz]
n : int
周波数分割数
coaxial_length : float
同軸コネクタ部分の長さ[mm]
cap : float
同軸コネクタ・基板接続部キャパシタンス[pF]
ind : float
同軸コネクタ・基板接続部インダクタンス[nH]
width : float
線路幅[mm]
length : float
線路長さ[mm]
height : float
基板厚み[mm]
er : float
基板比誘電率
Returns
-------
Stl : scikit-rfのNetwork
測定治具のSパラメータ
z0 : float
中央周波数の特性インピーダンス
"""
#周波数範囲設定
freq = rf.Frequency(fstart, fstop, n, "GHz")
#同軸コネクタのパラメータ(SMA相当)
coax = Coaxial(frequency=freq, Dint=1.3e-3, Dout = 4.59e-3, epsilon_r=2.29, tan_delta=4e-4, sigma=1/0.022e-6, z0_port=50)
#マイクロストリップラインのパラメータ
msl = MLine(frequency=freq, z0_port=50, w=width*1e-3, h=height*1e-3, t=35e-6, ep_r=er, tand=0.01, rho=1e-8, rough=0.127e-6)
#同軸コネクタの長さ決定
coax_line = coax.line(coaxial_length, unit="mm", name="coax_line")
#マイクロストリップラインの長さ決定
msl_line = msl.line(length, unit="mm", name = "msl_line")
#同軸コネクタと基板の接続部のLC
C = msl.shunt_capacitor(cap * 1e-12)
L = msl.inductor(ind * 1e-9)
#Casccade接続する
Stl = coax_line ** C ** L ** msl_line ** L ** C ** coax_line
#中心周波数の基板の特性インピーダンスを求める。
z0 = msl.z0[n // 2].real
return Stl, z0
#周波数の設定
fstart = 0.1
fstop = 20
n = 200
#固定する項目の設定
er = 4.0
length = 100
coaxial_length = 10
height = 0.254
#モンテカルロシミュレーションではL, C, 線路幅を乱数で振るがそれの最大最小
Lmin = 0.05
Lmax = 0.2
Cmin = 0.01
Cmax = 0.1
wmin = 0.2
wmax = 0.8
#測定治具データ1つ分作る関数
def tl_data(fstart, fstop, n, coaxial_length, cap, ind, width, length, height, er):
"""
Kerasで読めるような形で測定治具の2ポートSパラメータと特性インピーダンスを
1つ分のdata, labelとして出力する。具体的にはdataは(1, points, 5), labelは(1, 1)。
dataが5なのは対称的なのでS11=S22、S21=S12かつ複素数データなので
freq, S11real, S11imag, S21real, S21imagだから。Sパラメータは絶対値1なので規格化はせず
周波数のみ最大周波数で割っている。
"""
Stl, label = mesurement_jig(fstart, fstop, n, coaxial_length, cap, ind, width, length, height, er)
freq = Stl.f
Spara = Stl.s
data = np.array([freq[:]/fstop*1E-9,Spara[:,0, 0].real, Spara[:,0, 0].imag,
Spara[:,1, 0].real, Spara[:,1, 0].imag]).T.reshape(1, Spara.shape[0],5)
return data, label
#モンテカルロシミュレーションでデータ作成して保存する。
N = 10000
np.random.seed(1)
data = np.empty((0, n, 5))
label = np.empty((0, 1))
for i in range(N):
L = Lmin + (Lmax - Lmin) * np.random.rand()
C = Cmin + (Cmax - Cmin) * np.random.rand()
w = wmin + (wmax - wmin) * np.random.rand()
x, y = tl_data(fstart, fstop, n, coaxial_length, C, L, w, length, height, er)
data = np.vstack((data, x))
label = np.vstack((label, y))
#保存
np.savez_compressed("tl_data.npz", data=data, label=label)
|
最初の1000個のS11をプロットしたもの。まあまあ波形がばらついている。
さて準備ができたので次はDNNをやってみる(続く)。
« 捜査線上の夕映え(有栖川有栖さんの火村シリーズ)を読んだ。コロナ禍で最中で起きた殺人事件。容疑者も少なくすぐに解決すると思われたが、意外なジョーカーが…ジョーカーの正体には驚いた。また表紙にもなっている場所が本当に良さそうなところで旅行したくなった。 | トップページ | 高周波・RFニュース 2024年12月13日 TDKの新パワーインダクタと解説、SEMCOの1608 X7T 10㎌ 10V 車載MLCC、Qualcommの6G Foundry記事、STMのIoTモジュール、アナログデバイセズのソフトウェア無線学習モジュール、TechInsightsのHuawei Mate 70解析など »
「パソコン・インターネット」カテゴリの記事
- Pascalの開発者ヴィルトさんがお亡くなりになったということで、そういやDelphiってどうなってる?と思って調べると、もはやボーランドではなくEmbacardero社が販売していて、しかも無償のDelphi 12 Community Editionがある。早速インストールして試す。(2025.01.10)
- UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(1) まずはNuGetForUnityを使ってインストール。2Dゲーム画面に連立方程式を解いた結果を表示。(2025.01.14)
- 2025年年賀状に描く巳の絵をいろんな生成AI(OpenAI ChatGPT-4o, Google Gemini 2 Flash Experimental、XのGrok2、Microsoft Designer)に描いてもらう。同じプロンプトだったが一番好きなのはChatGPTかな。でも実は年賀状には全部使った。(2024.12.31)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年1月13日 IEEE Microwave Magazineの特集はニューラルネットワークとマイクロ波、Siversがミリ波ビームフォーマー開発を受注、バイデン・ハリス政権が ワイヤレス革命に1億 1,700 万ドル、HoneywellとNXPが航空機技術で提携(2025.01.13)
- UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(1) まずはNuGetForUnityを使ってインストール。2Dゲーム画面に連立方程式を解いた結果を表示。(2025.01.14)
- 高周波・RFニュース 2025年1月9日 CES2025に合わせて各社プレスリリース、特にQualcomm、NVIDIA、INTELが大量。SEMCOのC0G MLCC (1210 inch, 22nF, 1000V)解説、TIのAI搭載60GHz車内レーダ、MarvellのCPO、Qorvoの車載UWB SoC、TDKのセンサがAI白杖に採用(2025.01.09)
- NHK パンサー尾形さんの笑わない数学 微分・積分 スペシャルがもうすぐ始まる。これから見てリアルタイムでポストしたのでそのスレッドを残す。(2024.12.29)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年1月13日 IEEE Microwave Magazineの特集はニューラルネットワークとマイクロ波、Siversがミリ波ビームフォーマー開発を受注、バイデン・ハリス政権が ワイヤレス革命に1億 1,700 万ドル、HoneywellとNXPが航空機技術で提携(2025.01.13)
- Pascalの開発者ヴィルトさんがお亡くなりになったということで、そういやDelphiってどうなってる?と思って調べると、もはやボーランドではなくEmbacardero社が販売していて、しかも無償のDelphi 12 Community Editionがある。早速インストールして試す。(2025.01.10)
- UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(1) まずはNuGetForUnityを使ってインストール。2Dゲーム画面に連立方程式を解いた結果を表示。(2025.01.14)
- 高周波・RFニュース 2025年1月9日 CES2025に合わせて各社プレスリリース、特にQualcomm、NVIDIA、INTELが大量。SEMCOのC0G MLCC (1210 inch, 22nF, 1000V)解説、TIのAI搭載60GHz車内レーダ、MarvellのCPO、Qorvoの車載UWB SoC、TDKのセンサがAI白杖に採用(2025.01.09)
« 捜査線上の夕映え(有栖川有栖さんの火村シリーズ)を読んだ。コロナ禍で最中で起きた殺人事件。容疑者も少なくすぐに解決すると思われたが、意外なジョーカーが…ジョーカーの正体には驚いた。また表紙にもなっている場所が本当に良さそうなところで旅行したくなった。 | トップページ | 高周波・RFニュース 2024年12月13日 TDKの新パワーインダクタと解説、SEMCOの1608 X7T 10㎌ 10V 車載MLCC、Qualcommの6G Foundry記事、STMのIoTモジュール、アナログデバイセズのソフトウェア無線学習モジュール、TechInsightsのHuawei Mate 70解析など »
コメント