« 捜査線上の夕映え(有栖川有栖さんの火村シリーズ)を読んだ。コロナ禍で最中で起きた殺人事件。容疑者も少なくすぐに解決すると思われたが、意外なジョーカーが…ジョーカーの正体には驚いた。また表紙にもなっている場所が本当に良さそうなところで旅行したくなった。 | トップページ | 高周波・RFニュース 2024年12月13日 TDKの新パワーインダクタと解説、SEMCOの1608 X7T 10㎌ 10V 車載MLCC、Qualcommの6G Foundry記事、STMのIoTモジュール、アナログデバイセズのソフトウェア無線学習モジュール、TechInsightsのHuawei Mate 70解析など »

2024年12月12日 (木)

高周波エンジニアのための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をプロットしたもの。まあまあ波形がばらついている。

Measurementjigdnn01

さて準備ができたので次はDNNをやってみる(続く)。

« 捜査線上の夕映え(有栖川有栖さんの火村シリーズ)を読んだ。コロナ禍で最中で起きた殺人事件。容疑者も少なくすぐに解決すると思われたが、意外なジョーカーが…ジョーカーの正体には驚いた。また表紙にもなっている場所が本当に良さそうなところで旅行したくなった。 | トップページ | 高周波・RFニュース 2024年12月13日 TDKの新パワーインダクタと解説、SEMCOの1608 X7T 10㎌ 10V 車載MLCC、Qualcommの6G Foundry記事、STMのIoTモジュール、アナログデバイセズのソフトウェア無線学習モジュール、TechInsightsのHuawei Mate 70解析など »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 捜査線上の夕映え(有栖川有栖さんの火村シリーズ)を読んだ。コロナ禍で最中で起きた殺人事件。容疑者も少なくすぐに解決すると思われたが、意外なジョーカーが…ジョーカーの正体には驚いた。また表紙にもなっている場所が本当に良さそうなところで旅行したくなった。 | トップページ | 高周波・RFニュース 2024年12月13日 TDKの新パワーインダクタと解説、SEMCOの1608 X7T 10㎌ 10V 車載MLCC、Qualcommの6G Foundry記事、STMのIoTモジュール、アナログデバイセズのソフトウェア無線学習モジュール、TechInsightsのHuawei Mate 70解析など »

最近の記事

最近のコメント

2025年1月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト
無料ブログはココログ