« 高周波・RFニュース 2026年3月25日 Kymetaが衛星通信端末Kestrel u5発表、VIAVIとRCRwirelessがテストにおけるAIのレポート発行、TIがデータセンター向けに絶縁型電源モジュール発表、APEC2026に各社が出展 | トップページ | 高周波・RFニュース 2026年3月26日 iFixitがSamsung Galaxy S26 Ultra分解・5Gミリ波AiPは1個のみ、Ericssonとユーリッヒ研究センターが6G向けAI開発、QualcommがRF被ばく管理について解説、Mini-Circuitsがリミッター回路について解説など »

2026年3月25日 (水)

高周波エンジニアのためのAI・機械学習入門(GPU編17)PythonとKeras3.0とscikit-rfを使ってディープラーニング(DNN)で同軸コネクタがついたマイクロストリップライン(誘電率、L、C、線幅、厚みを振った)のSパラメータからTDRでは出せない複素特性インピーダンスを推定する。

以前、DNNを使って伝送線路の特性インピーダンスをSパラメータの値からTDRを使わずに出してみて精度が非常によかった。

今度は複素特性インピーダンスを予測してみよう。TDRでは実部しかわからないが、scikit-rfでは伝送線路の複素特性インピーダンスを出す機能があるのでそれを学習させる。

一個のデータ作る関数はこれ。


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

    #中心周波数の基板の特性インピーダンスを求める。
    z0r = msl.z0[n // 2].real
    z0i = msl.z0[n // 2].imag  
    return Stl, z0r, z0i

これで誘電率、L、C、線幅、厚みを振ったデータを10000個作り、DNNで学習して予測する。


import os
os.environ["KERAS_BACKEND"] = "jax"
import keras
import jax
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
plt.rcParams['font.family'] = 'Noto Sans CJK JP'
from jax import config
config.update("jax_enable_x64", False)

data_label = np.load("complex_tl_data.npz")
data = data_label["data"]
label = data_label["label"]
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.3, random_state=0)

#正規化
scaler_y = StandardScaler()
y_train_f = scaler_y.fit_transform(y_train)
y_test_f  = scaler_y.transform(y_test)

# Functional APIでDense層を3層にしたDNNを設定
hidden_dim = 200
inputs = keras.Input(shape=(200, 5))
x = keras.layers.Flatten()(inputs)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization(epsilon=1.0e-6)(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization(epsilon=1.0e-6)(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization(epsilon=1.0e-6)(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization(epsilon=1.0e-6)(x)
outputs = keras.layers.Dense(2)(x)

# モデルの設定
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss = 'mean_squared_error' ,optimizer=keras.optimizers.Adam())

batch_size = 128
epochs = 500

keras.utils.set_random_seed(1)
history = model.fit(
    x_train,
    y_train_f,
    batch_size=batch_size,
    epochs=epochs,
    validation_split=0.15,
)

y_pred_f = model.predict(x_test)
y_pred = scaler_y.inverse_transform(y_pred_f)

metric = keras.metrics.R2Score()
metric.update_state(y_test, y_pred)
result = metric.result()
print(result)
error = np.abs((y_test - y_pred)/y_test*100)
print(error.mean(axis=0))

legend = ["Z0"]
fig, ax = plt.subplots(2, 2, figsize=(12,12))

maxrvalue = y_pred[:,0].max()
minrvalue = y_pred[:,0].min()
maxivalue = y_pred[:,1].max()
minivalue = y_pred[:,1].min()
ax[0, 0].scatter(y_pred[:,0], y_test[:,0], c="r", s=5)
ax[0, 0].plot([0,maxrvalue], [0,maxrvalue], "--", c="black")
ax[0, 0].set_xlabel("推定した値(実部)")
ax[0, 0].set_ylabel("実際の値(実部)")
ax[0, 0].set_xlim(minrvalue, maxrvalue)
ax[0, 0].set_ylim(minrvalue, maxrvalue)
ax[0, 0].grid()
ax[0, 0].legend([legend[0] + f" 平均誤差(実部){error.mean(axis=0)[0]:.2f}%"])
ax[1, 0].hist(error[:, 0], bins = 100)
ax[1, 0].set_xlabel("誤差[%](実部)")
ax[1, 0].set_ylabel("頻度")
ax[1, 0].grid()
ax[0, 1].scatter(y_pred[:,1], y_test[:,1], c="r", s=5)
ax[0, 1].plot([0,maxivalue], [0,maxivalue], "--", c="black")
ax[0, 1].set_xlabel("推定した値(虚部)")
ax[0, 1].set_ylabel("実際の値(虚部)")
ax[0, 1].set_xlim(minivalue, maxivalue)
ax[0, 1].set_ylim(minivalue, maxivalue)
ax[0, 1].grid()
ax[0, 1].legend([legend[0] + f" 平均誤差(虚部){error.mean(axis=0)[1]:.2f}%"])
ax[1, 1].hist(error[:, 1], bins = 100)
ax[1, 1].set_xlabel("誤差[%](虚部)")
ax[1, 1].set_ylabel("頻度")
ax[1, 1].grid()
fig.tight_layout()
plt.show()

結果はこちら。

Gpucomplexz0dnn01

まずまずの結果だが、もうちょっと良くならないかということでCNNを試す(続く)。

 

 

« 高周波・RFニュース 2026年3月25日 Kymetaが衛星通信端末Kestrel u5発表、VIAVIとRCRwirelessがテストにおけるAIのレポート発行、TIがデータセンター向けに絶縁型電源モジュール発表、APEC2026に各社が出展 | トップページ | 高周波・RFニュース 2026年3月26日 iFixitがSamsung Galaxy S26 Ultra分解・5Gミリ波AiPは1個のみ、Ericssonとユーリッヒ研究センターが6G向けAI開発、QualcommがRF被ばく管理について解説、Mini-Circuitsがリミッター回路について解説など »

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

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

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

コメント

コメントを書く

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

« 高周波・RFニュース 2026年3月25日 Kymetaが衛星通信端末Kestrel u5発表、VIAVIとRCRwirelessがテストにおけるAIのレポート発行、TIがデータセンター向けに絶縁型電源モジュール発表、APEC2026に各社が出展 | トップページ | 高周波・RFニュース 2026年3月26日 iFixitがSamsung Galaxy S26 Ultra分解・5Gミリ波AiPは1個のみ、Ericssonとユーリッヒ研究センターが6G向けAI開発、QualcommがRF被ばく管理について解説、Mini-Circuitsがリミッター回路について解説など »

最近の記事

2026年4月
      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    

最近のコメント

無料ブログはココログ
フォト