高周波エンジニアのためのAI・機械学習入門(GPU編16)教師あり学習でバンドパスフィルタ特性5種類(Butterworth, Chebyshev, Ellipticなど)がKerasのCNNで分類できるか見てみた。99.8%の精度が出た。
前にフィルタ合成ツールfiltersynthをいろいろな特性が計算できるように改良したので、それでモンテカルロシミュレーションを行い、フィルタの種類が分類できるか見てみよう。
中心周波数、帯域幅、フィルタの種類(Butterworth, Chebyshev, Bessel, 逆Chebyshev, Elliptic、最後の2つはLCラダーで表せないので近似)を振って10000個データを作る。
import numpy as np
import matplotlib.pyplot as plt
import skrf as rf
import filtersynth2 as fs
#周波数の設定
fstart = 0.1
fstop = 20
points = 200
#モンテカルロシミュレーションでは中心周波数と比帯域幅を乱数で振るが、それの最大最小
f0min = 2
f0max = 18
dfrmax = 0.2
dfrmin = 0.1
#フィルタデータ1つ分作る関数
def filter_data(n, f0, df, fstart, fstop, points, type):
"""
Kerasで読めるような形でBPFの2ポートSパラメータとその合成に使うL,Cの値をそれぞれ
1つ分のdata, labelとして出力する。具体的にはdataは(1, points, 5), labelは(1, 6)。
dataが5なのは奇数次のLCフィルタはS11=S22、S21=S12かつ複素数データなので
freq, S11real, S11imag, S21real, S21imagだから。Sパラメータは絶対値1なので規格化はせず
周波数のみ最大周波数で割っている。
"""
label = np.zeros((1, 5))
if type == 0:
bpf_cir, bpf_network = fs.BPF_synthesis(n, f0, df, fstart, fstop, points, type = "Butterworth")
label[0, 0] = 1
elif type == 1:
bpf_cir, bpf_network = fs.BPF_synthesis(n, f0, df, fstart, fstop, points, type = "Chebyshev")
label[0, 1] = 1
elif type == 2:
bpf_cir, bpf_network = fs.BPF_synthesis(n, f0, df, fstart, fstop, points, type = "Chebyshev2")
label[0, 2] = 1
elif type == 3:
bpf_cir, bpf_network = fs.BPF_synthesis(n, f0, df, fstart, fstop, points, type = "Elliptic")
label[0, 3] = 1
elif type == 4:
bpf_cir, bpf_network = fs.BPF_synthesis(n, f0, df, fstart, fstop, points, type = "Bessel")
label[0, 4] = 1
freq = bpf_network.f
Spara = bpf_network.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
rng = np.random.default_rng(1)
data = np.empty((0, points, 5))
label = np.empty((0, 5))
for i in range(N):
f0 = f0min + (f0max - f0min) * rng.random()
df = (dfrmin + (dfrmax - dfrmin) * rng.random()) * f0
type = rng.integers(0, 5)
x, y = filter_data(5, f0, df, fstart, fstop, points, type)
data = np.vstack((data, x))
label = np.vstack((label, y))
#保存
np.savez_compressed("filter_characteristics.npz", data=data, label=label)
|
最初の100個はこんな感じ。
これをKerasのCNNを使って分類する。
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'
data_label = np.load("filter_characteristics.npz")
data = data_label["data"].reshape(-1,200,5,1)
label = data_label["label"]
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.3, random_state=0)
# Functional APIでCNNを設定
inputs = keras.Input(shape=(200, 5, 1))
x = keras.layers.Conv2D(64, kernel_size=(10, 2), activation="relu")(inputs)
x = keras.layers.Conv2D(64, kernel_size=(10, 4), activation="relu")(x)
x = keras.layers.Flatten()(x)
outputs = keras.layers.Dense(5, activation="softmax")(x)
# モデルの設定
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=keras.optimizers.Adam(), loss=keras.losses.CategoricalCrossentropy(),
metrics=[keras.metrics.CategoricalAccuracy(name="acc"),])
batch_size = 64
epochs = 100
keras.utils.set_random_seed(1)
model.fit(
x_train,
y_train,
batch_size=batch_size,
epochs=epochs,
validation_split=0.15,
)
score = model.evaluate(x_test, y_test, verbose=0)
print(f"Test Score{score}")
|
結果:
Test Score[0.007937788031995296, 0.9983333349227905]
と99.8%の精度が得られた。結構いいな。
« MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。 | トップページ | 高周波・RFニュース 2026年3月13日 Microwave Magazineの特集はテスト&測定・スペシャルフォーカスはケーブル&コネクタ、Broadcomが400G/レーンの光DSP発表、Infinionが60GHzレーダのウェビナー開催、Rohmが超小型ワイヤレス給電チップ発表など »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/12-4/19(2026.04.19)
- Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。(2026.04.17)
- ExcelのOfficeスクリプト(TypeScript)で数値計算ライブラリmath.jsを使う(1) Officeスクリプトは外部API呼び出せるし、math.jsは RESTful APIで呼び出せることがわかった。まずは選択したセルのデータを読み、行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。(2026.04.17)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/5-4/12(2026.04.12)
- GLM-5.1(Ollamaから利用)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。5分など長く考えた後、Gemma 4:31bよりさらに出来が良く、思った通りのものができた。(2026.04.09)
「学問・資格」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/12-4/19(2026.04.19)
- Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。(2026.04.17)
- 高周波・RFニュース 2026年4月17日 atisの3GPP Rel.20ウェビナー動画公開、MWCバルセロナ2026でのGSMA Device Enablement Summit資料公開、ハリファ大学が無線周波数AI言語モデルRF-GPT発表、レドームの解説など(2026.04.17)
- ExcelのOfficeスクリプト(TypeScript)で数値計算ライブラリmath.jsを使う(1) Officeスクリプトは外部API呼び出せるし、math.jsは RESTful APIで呼び出せることがわかった。まずは選択したセルのデータを読み、行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。(2026.04.17)
- 高周波・RFニュース 2026年4月16日 AmazonがGlobalstarを買収、GSMAが日本のデジタル化をレポート、Mini-Circuitsがケーブルアセンブリを動画で解説、Kymetaが米国海軍研究局と衛星通信で契約、PerasoがドローンIFF向け60GHzモジュール出荷、SEMCOが1500V耐圧MLCC発表(2026.04.16)
「日記・コラム・つぶやき」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/12-4/19(2026.04.19)
- Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。(2026.04.17)
- 高周波・RFニュース 2026年4月17日 atisの3GPP Rel.20ウェビナー動画公開、MWCバルセロナ2026でのGSMA Device Enablement Summit資料公開、ハリファ大学が無線周波数AI言語モデルRF-GPT発表、レドームの解説など(2026.04.17)
- ExcelのOfficeスクリプト(TypeScript)で数値計算ライブラリmath.jsを使う(1) Officeスクリプトは外部API呼び出せるし、math.jsは RESTful APIで呼び出せることがわかった。まずは選択したセルのデータを読み、行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。(2026.04.17)
- 高周波・RFニュース 2026年4月16日 AmazonがGlobalstarを買収、GSMAが日本のデジタル化をレポート、Mini-Circuitsがケーブルアセンブリを動画で解説、Kymetaが米国海軍研究局と衛星通信で契約、PerasoがドローンIFF向け60GHzモジュール出荷、SEMCOが1500V耐圧MLCC発表(2026.04.16)
« MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。 | トップページ | 高周波・RFニュース 2026年3月13日 Microwave Magazineの特集はテスト&測定・スペシャルフォーカスはケーブル&コネクタ、Broadcomが400G/レーンの光DSP発表、Infinionが60GHzレーダのウェビナー開催、Rohmが超小型ワイヤレス給電チップ発表など »



コメント