パソコン・インターネット

2026年7月14日 (火)

高周波エンジニアのためのAI・機械学習入門(GPU編37) 大きなノイズが乗ったフィルタのSパラメータの値からノイズ除去するオートエンコーダ(deep autoencoder, PythonとKeras利用)を試してみる。

以前、オートエンコーダは不良品検知のために試してみた。今回はノイズが乗ったフィルタのSパラメータからノイズ除去してみよう。

フィルタのデータはL,Cの値を予測するのにつかったもの。そこに大きいノイズを加える。現実的でないほど大きなものを付け加えた。

Noisefilteringautoencoderdnn1

これで除去できるか、まずはディープ・オートエンコーダでやってみる。

コードはこんな感じで。


import os
os.environ["KERAS_BACKEND"] = "jax"
import keras
import jax
from jax import config
config.update("jax_enable_x64", False)
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("data_label.npz")
data = data_label["data"]
label = data_label["label"]

rng = np.random.default_rng(42)
sigma = 1.0e-1
noise = rng.normal(0.0, sigma, (10000, 200, 4))

noisy_data = data.copy()
noisy_data[:, :, 1:] += noise

x_train, x_test, y_train, y_test = train_test_split(noisy_data, data, test_size=0.3, random_state=0)

inputs = keras.Input(shape=(200, 5))
x = keras.layers.Flatten()(inputs)
encoded = keras.layers.Dense(256, activation='relu')(x)
encoded = keras.layers.Dense(128, activation='relu')(encoded)
encoded = keras.layers.Dense(64, activation='relu')(encoded)
encoded = keras.layers.Dense(32, activation='relu')(encoded)

decoded = keras.layers.Dense(64, activation='relu')(encoded)
decoded = keras.layers.Dense(128, activation='relu')(decoded)
decoded = keras.layers.Dense(256, activation='relu')(decoded)
decoded = keras.layers.Dense(200 * 5, activation='linear')(decoded)
outputs = keras.layers.Reshape((200, 5))(decoded)

model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss = 'mean_squared_error' ,optimizer=keras.optimizers.Adam())

# 学習
epochs = 1000
keras.utils.set_random_seed(1)
history = model.fit(
    x_train, y_train,
    batch_size=128,
    epochs=epochs,
    validation_split=0.15,
)

y_pred = model.predict(x_test)

S11test = 10*np.log10(y_test[:, : ,1]**2 + y_test[:, :, 2]**2)
S21test = 10*np.log10(y_test[:, : ,3]**2 + y_test[:, :, 4]**2)
S11pred = 10*np.log10(y_pred[:, : ,1]**2 + y_pred[:, :, 2]**2)
S21pred = 10*np.log10(y_pred[:, : ,3]**2 + y_pred[:, :, 4]**2)
S11input = 10*np.log10(x_test[:, : ,1]**2 + x_test[:, :, 2]**2)
S21input = 10*np.log10(x_test[:, : ,3]**2 + x_test[:, :, 4]**2)

threshold = 3

# 1. 最大値とインデックス
max_vals = np.max(S21test, axis=1)       # shape: (サンプル数,)
max_indices = np.argmax(S21test, axis=1)

# 2. 下限値
lower_bounds = max_vals - threshold

# 3. 条件マスク
mask = S21test >= lower_bounds[:, None]

# 4. インデックス範囲
indices = np.arange(S21test.shape[1])

masked_indices = np.where(mask, indices, np.nan)

min_indices = np.nanmin(masked_indices, axis=1).astype(int)
max_indices = np.nanmax(masked_indices, axis=1).astype(int)

# 5. 切り出し(可変長)
pred_error = [np.mean(np.abs(S21test[i, min_indices[i]:max_indices[i]+1] - S21pred[i, min_indices[i]:max_indices[i]+1]) )
        for i in range(S21test.shape[0])]
original_error = [np.mean(np.abs(S21test[i, min_indices[i]:max_indices[i]+1] - S21input[i, min_indices[i]:max_indices[i]+1]) )
        for i in range(S21test.shape[0])]

plt.hist(pred_error, bins = 100, color="red", alpha=0.5, range=(0,5), label="予測値の誤差")
plt.hist(original_error, bins = 100, color="blue", alpha=0.5, range=(0,5), label = "ノイズが乗ったもともとの誤差")
plt.xlabel("通過域(最大値から3dB落ち)のS21平均誤差[dB]")
plt.ylabel("頻度")
plt.grid()
plt.legend()
plt.show()
print(f"average original error {np.mean(original_error)}dB, average predicted value error {np.mean(pred_error)}dB")

帯域内の平均誤差をヒストグラムにしたもの。なるほど改善している。

Noisefilteringautoencoderdnn2

実際の波形。ぎざぎざがだいぶ改善されている。

Noisefilteringautoencoderdnn3

とはいうもののもうちょっと改善欲しいので畳み込みオートエンコーダも試してみる。

 

2026年7月13日 (月)

Grok 4.5(Grok Build)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作成。エラーもなく一発で動くものができた。ただFreeだと1日のリミットが結構厳しめ。

CursorでGrok4.5が使えるという話を見てインストールしたがまだ使えなかった。

じゃあということでGrok Buildから使う。

https://x.ai/cli

いつもと同じプロンプトを入れてプランを立ててもらう。

Grokrf02

いい感じだ。実行してもらう。

Grokrf03

見てる間にできた。

dB

Grokrf04

スミスチャート

Grokrf05

位相

Grokrf06

TDR

Grokrf07

なるほどちゃんとできている。

ただ先日同じことをやったときは、以下のプランを立ててすぐにリミットが来た。結構リミット短いっぽい。

Grokrf01

2026年7月12日 (日)

RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/7/5-7/12

RF Weekly Digest

直近7日間と直接または間接に判断できるRF/無線関連ニュース、標準化、部品、分解動画だけを収集し、Ollamaで要約します。

Modelgemma4:26b-a4b-it-qat
Period2026-07-05 - 2026-07-12
Items43

Digest

ollama

RF業界週刊ダイジェスト (2026年7月5日~2026年7月12日)

本レポートでは、次世代通信(5G/6G)、ミリ波技術、および防衛・宇宙分野におけるRFコンポーネントの最新動向をまとめています。

1. 市場動向と予測

  • RFパワーアンプモジュール市場の拡大: 5Gおよび防衛分野の近代化を背景に、RFパワーアンプモジュール市場は2035年にかけて成長が続く見通しです。特にGaN(窒化ガリウム)へのシフトが主要なドライバーとなっています。(indexbox, 2026-07-09)
  • ミリ波・マイクロ波技術の需要増: mmWave透明アンテナ市場や、1GHzから100GHz以上をカバーするRFトランシーバー市場において、通信インフラおよびレーダー、電子戦システム向けの需要が拡大しています。(intelmarketresearch / indexbox, 2026-07-10)
  • RFスイッチ市場の成長: PINダイオード、GaAs、SOI/SOS、MEMSなどの技術により、無線通信向けRFスイッチ市場も継続的な成長が見込まれています。(snsinsider, 2026-07-09)

2. コンポーネント・技術革新

  • 高周波対応コンポーネントの進化:
  • スイッチ: Qorvoが最大30GHzに対応するSOI RFスイッチおよびデジタルステップアッテネータを発表。防衛やインフラ用途向けに設計されています。(5gtechnologyworld, 2026-07-09)
  • 抵抗器: Stackpole Electronicsが、5Gや衛星通信向けの最大50GHz対応高周波薄膜チップ抵抗器をリリースしました。(5gtechnologyworld, 2026-07-09)
  • 発振器: Q Tech Corporationが、航空宇宙・防衛向けに高い温度安定性を持つラム波発振器を発表。また、EpsonはAIインフラ向けの低位相雑音OCXOを導入しています。(5gtechnologyworld, 2026-07-09)
  • 次世代基板と材料技術:
  • GaN基板上の新技術: 研究チームが、GaN基板上にmemristive(メモリスタ)RFスイッチを統合した、再構成可能なミリ波マイクロチップの開発に成功。通信の柔軟性を飛躍的に高める可能性があります。(bioengineer.org, 2026-07-09)
  • 熱管理とPCB設計: Massive MIMO(64T64R/128T128R)などの5G基地局向けに、Rogers 4350BメタルコアPCBを用いた高放熱設計の重要性が示されています。PA等の高出力デバイスによる熱対策が課題となっています。(andwinpcb.com, 2026-07-11)
  • アーキテクチャの転換: 通信システムにおいて、電力効率と統合性を向上させるため、FPGAからASICアーキテクチャへの移行が進んでいます。(electronicdesign.com, 2026-07-09)

3. 次世代通信規格と先端アプリケーション

  • 6Gに向けた展望: AIネイティブなアーキテクチャ、サブTHzスペクトラム、統合センシングなどが、次世代のインテリジェントなインフラとして議論されています。(rcrtech, 2026-07-10)
  • AIと防衛技術の融合: NokiaとNestAIは、5G、AI、センシングを統合し、戦場での運用を支援する防御技術を発表しました。(rcrwireless.com, 2026-07-10)
  • IoT接続性の拡大: LoRaWANなどの低電力広域ネットワーク(LPWAN)への関心が高まっており、産業オートメーションやスマートセンシング向けのソリューション開発が加速しています。(5gtechnologyworld / onomondo.com, 2026-07-09)

--- 【注目のリンク】

2026年7月 6日 (月)

高周波エンジニアのためのAI・機械学習入門(GPU編36) MATLAB OnlineのAntenna Toolboxのパッチアンテナのアンテナ利得(ゲイン)計算機能を使って学習データを作り、DNNで予測する(サロゲートモデル)。平均誤差0.08%ととてもいい精度が得られた。

前回、モンテカルロシミュレーションで学習データを作ったので今回はDNNでアンテナ利得(ゲイン)を予測しよう。

具体的には周波数、比誘電率、基板厚み、パッチサイズ(W,L)、フィード位置を与えて、アンテナ利得(ゲイン)を予測するもの。

コードはこんな感じ。


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

df = pd.read_csv('patch_mc_gain3000.csv')
data = df[['f_GHz', 'epsr', 'h_mm','W_mm', 'L_mm', 'feedX_mm']].to_numpy()
label = df[['Gain_dBi']].to_numpy()
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.3, random_state=0)

normalizer = keras.layers.Normalization()
normalizer.adapt(x_train)

scaler_y = StandardScaler()
y_train_f = scaler_y.fit_transform(y_train)
y_test_f  = scaler_y.transform(y_test)

inputs = keras.Input(shape=(6,))
hidden_dim = 128
x = normalizer(inputs)
x = keras.layers.Flatten()(inputs)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization()(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization()(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization()(x)
outputs = keras.layers.Dense(1)(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))



実行するとR2scoreは0.99965566、平均誤差は0.0796471%となった。図示すると

Matlabmlgain03

確かにいい感じで推定できている。Matlabのライセンス切れてもこれ使えば…

2026年7月 5日 (日)

RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/6/28-7/5


RF Weekly Digest

直近7日間と直接または間接に判断できるRF/無線関連ニュース、標準化、部品、分解動画だけを収集し、Ollamaで要約します。




Modelgemma4:26b-a4b-it-qat
Period2026-06-28 - 2026-07-05
Items32


Digest

ollama

RF業界週報:2026年6月28日 ~ 2026年7月5日

本レポートでは、次世代通信規格(5G-A/6G)、RFコンポーネントの動向、およびAIを活用したネットワーク最適化に関する主要なニュースをまとめています。

次世代通信規格・ネットワーク技術

  • SamsungとKDDIによるAI駆動型RAN最適化試験に成功 (2026年7月1日, Samsung/rcrwireless)

日本国内の商用5Gスタンドアロン(SA)ネットワークにおいて、SamsungのAI搭載RANスピードオプティマイザー(RSO)を用いた実証実験が完了。ネットワーク全体のピークダウンリンクスループットを31%向上させ、一部の指標では最大52%の速度向上を実現した。

  • 6G規格策定に向けた動きとOTFS波形の台頭 (2026年7月2日, rcrwireless)

米国国防総省(DoD)が、EricssonやNokiaの技術に対抗する6G候補として、Cohere Technologies社が推進するOTFS(Orthogonal Time Frequency Space)波形を支援。3GPPによる2026年6月の総会決定を受け、デバイスメーカーへの影響が注目されている。

  • Huawei、中国で5G-Advanced (5G-A) を展開 (2026年7月1日, rcrwireless)

Huaweiと中国電信(China Telecom)は、西安の観光地において3CC(3コンポーネント・キャリアアグリゲーション)技術を用いた5G-Aネットワークを導入し、観光体験の変革を図っている。

RFコンポーネント・IoTモジュール

  • Broadcomがモバイル向けWi-Fi/Bluetoothコンボ製品を発表 (2026年7月5日, Broadcom)

モバイル端末およびアクセサリ向けに、最高水準の接続性を提供する新しいWi-FiとBluetoothの統合ソリューションを公開。

  • Quectel、マルチプロトコル対応のIoTモジュールを投入 (2026年7月2日, EDN)

NXPのRW612を採用した新モジュール「FCM365X」を発表。Wi-Fi 6、Bluetooth LE 5.4、Zigbee、Threadを統合し、IoT設計の簡素化を実現する。

  • Skyworks Solutions、接続需要の拡大に対応 (2026年7月3日, ad-hoc-news)

スマートフォンおよびネットワーク機器向けのRFチップサプライヤーとして、データ通信量とIoT市場の長期的な成長を見据えた製品展開を強調。

  • Amphenol RF、3GHz対応のMMCXケーブルアセンブリを発表 (2026年7月2日, eeworldonline)

産業用無線システム向けに、柔軟なRG-174ケーブルを使用した新しいMMCXケーブルアセンブリを導入。

先端技術・研究開発

  • mmWave MIMOを用いた3Dイメージング技術 (2026年6月30日, dl.acm.org)

ミリ波(mmWave)RF技術を活用し、近接領域での3次元ターゲット撮影を可能にするサブアパーチャベースの波面ドメイン3Dイメージング手法が発表された。

  • 妨害環境下におけるドローン用RFシステム (2026年7月1日, i-hls.com)

軍事・産業用途として、通信混雑時や電波妨害(ジャミング)が発生する環境下でも接続を維持できる新しいRFシステムの開発が進んでいる。

--- 【今週の注目リンク】

2026年7月 3日 (金)

Ornith-1.0-35B(llama.cppで4ビット量子化使用)に、電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。

昨日はコーディング能力を見たが、今日はいつもやっている質問をしてみよう。

どちらも正しく答えられている。最近のローカルLLMはどれも賢いな。

ーーー

問:電子レンジの動作原理となぜ2.45GHzが使われているかを教えてください。特に水分子の共振周波数とも関連づけて説明してください。


電子レンジの動作原理と、なぜ2.45GHzという周波数が選ばれているのかについて、水分子の性質と関連づけながら解説します。



📌 電子レンジの動作原理


電子レンジは、誘電体加熱という仕組みを利用して食品を加熱します。


1. 電磁波による加熱


  • 電子レンジ内部のマグネトロンという部品から、マイクロ波(周波数2.45GHzの電磁波)を発生させます。
  • このマイクロ波は食品内の極性分子(特に水分子、脂質、糖類など)と相互作用します。

2. 水分子の双極子モーメント


  • 水分子(H₂O)は酸素側が負、水素側が正の双極子(プラスとマイナスの電荷を持つ)です。
  • このため、外部から電場がかかると、水分子はその電場の方向に向かって回転しようとします。

3. 分極と摩擦熱


  • マイクロ波は交番電場(電場の方向が高速で入れ替わる電波)です。
  • 2.45GHzは1秒間に24.5億回、電場の方向が入れ替わることを意味します。
  • 水分子はこの速い電場の変化に追従しようと絶えず回転を繰り返しますが、周囲の分子との衝突や粘性抵抗があるため、回転運動が熱エネルギーに変換されます。
  • これが「双極子緩和による誘電加熱」です。


💡 重要な点:これは「共鳴(resonance)」ではなく、「誘電緩和(dielectric relaxation)」による加熱です。



🔬 なぜ2.45GHzなのか?「共振周波数」との関係


よく「水分子の共振周波数が2.45GHz」と言われますが、これは厳密には誤りです。正確には以下のように理解する必要があります。


✅ 水分子の本当の振動・回転周波数


  • 水分子の分子振動(結合の伸び縮み)や分子回転(回転運動)の固有周波数は、可視光や赤外線、ミリ波帯のはるかに高い周波数(THz〜PHz帯)にあります。
  • つまり、水分子の「真の共振周波数」は2.45GHzではなく、はるかに高い帯域です。

✅ 2.45GHzが選ばれた理由:誘電緩和のピーク


  • 液体中の水分子は、気体中の単独分子とは異なり、周囲の水分子と水素結合でつながっています。
  • このため、外部電場に対して水分子が回転応答する速度(緩和時間)は、気体中の単独分子よりも遅くなります。
  • 液体の水の誘電緩和周波数は、約10〜20GHzの帯域にピークがあります。
  • 2.45GHzはこのピークの近くにあり、かつ、以下のような実用的な理由から選ばれました:


📡 2.45GHzが実用的に選ばれた理由


1. 食品への浸透深さ


  • 周波数が高すぎると、マイクロ波が食品表面だけで吸収されてしまい、中まで加熱できなくなります(表面焼け現象)。
  • 2.45GHzは、水などの極性液体に対して適度な浸透深さ(数cm程度)を保ち、食品内部まで効率的に加熱できます。

2. アンテナ・磁気管のサイズ


  • 周波数が低いと、必要な電子部品(マグネトロン、導波管、アンテナ)のサイズが大きくなります。
  • 2.45GHzは、家庭用のコンロサイズに収まるコンパクトな部品で実現できる周波数です。

3. 国際的な周波数割り当て


  • 1940年代に米国で電子レンジの開発が行われた際、工業・科学・医療(ISM: Industrial, Scientific, Medical)用に割り当てられた周波数帯が2.45GHzでした。
  • これは軍用・通信用と干渉しないように国際的に決められた帯域です。


🧠 まとめ:正確な理解


項目 説明
加熱メカニズム 水分子の双極子回転による誘電緩和加熱(摩擦熱)
「共振」との関係 水分子の真の振動・回転共振はTHz〜PHz帯。2.45GHzは誘電緩和のピーク近くであり、厳密な「共振」ではない
2.45GHzの選定理由 ① 浸透深さと吸収率のバランス ② コンパクトな部品で実現可能 ③ ISM帯として国際的に割り当て


📚 補足:よくある誤解



❌ 「水分子の共振周波数が2.45GHzだから」



✅ 「液体の水の誘電緩和応答が2.45GHz付近で効率的に熱に変換されるから」


この区別が重要です。単独の水分子の回転運動はGHz帯のはるかに高い周波数ですが、液体中では周囲の分子との相互作用によって応答が遅くなり、結果として2.45GHz付近で最大の加熱効率が得られるのです。



ご不明な点や、さらに詳しい物理的なメカニズム(誘電関数、損失正接角、複素誘電率など)についてもお手伝いできますので、お気軽にお知らせください。

Ornithoven

問:隕石が大気圏に突入すると燃えてしまいますが、その原理を教えてください。


隕石が大気圏に突入して燃える(正確には「光り輝く」)主な原理は、**「空気の圧縮(断熱圧縮)」**による加熱です。


よく「空気との摩擦で燃える」と言われますが、実は摩擦よりも「圧縮」が主な原因です。以下に詳しく説明します。



🔥 主な原因:空気の圧縮(断熱圧縮)


隕石が大気圏に高速で突入すると、その前にある空気を一気に圧縮します。


  1. 衝撃波の形成
    隕石の速度は通常、毎秒11〜72km(音速の数十倍)という超高速です。この speeds では、隕石の前方の空気が逃げきれず、急激に圧縮されます。
  2. 断熱圧縮による加熱
    ガスを急速に圧縮すると、温度が急上昇します(気体の法則)。隕石前方の空気の温度は**数千℃から上万℃**まで上昇し、プラズマ状態になります。
  3. 熱放射
    高温になった空気が隕石の表面に熱を伝え、隕石自身が融解・気化し、光り輝きます。


📌 この現象は、**「衝撃波加熱」または「断熱圧縮加熱」**と呼ばれます。



🌬️ 摩擦も関係しているのか?


摩擦も一部関わっていますが、二次的な要因です。


  • 隕石表面と空気の間に摩擦熱が発生します。
  • しかし、隕石の速度が超音速の場合、摩擦熱よりも圧縮による加熱の方がはるかに大きいとされています。
  • 摩擦は、隕石の表面が削られる「侵食」には大きく関係しますが、発熱の主原因ではありません。


🔬 なぜ「燃える」と表現されるのか?


  • 隕石自身が酸化(燃焼)しているわけではなく、周囲の空気が高温で発光している現象です。
  • 隕石が高温になり、表面が融解・気化することで、その物質が光を放つこともあります。
  • したがって、厳密には「燃焼」ではなく**「高温ガスによる発光」**です。


🌠 隕石が「星」として見える理由


  • 高温になった空気のプラズマと、気化した隕石物質が可視光を放出するため、夜空に光の軌跡として見えます。
  • この光の軌跡を**「しんせい」(流星)**と呼びます。


まとめ


要因 寄与度 説明
空気の圧縮 ⭐⭐⭐⭐⭐(主原因) 隕石が空気を急速に圧縮し、数千〜数万℃に加熱
摩擦熱 ⭐⭐(副原因) 表面との摩擦で追加の熱が発生するが、圧縮より小さい
化学的燃焼 ⭐(ほぼ無関係) 酸化反応ではなく、物理的な加熱・発光


💡 補足:宇宙空間では真空だから摩擦がない?


宇宙空間(真空)では摩擦はありませんが、大気圏突入時はいかに空気を押しのけるかが問題です。
これが、ロケットの再突入時や隕石の発光現象の本質です。


もしさらに詳しく知りたい点(例:具体的な温度、隕石の種類の違いなど)があれば、お知らせください!

Ornithmeteo

2026年7月 2日 (木)

Ornith-1.0-35B(llama.cppで4ビット量子化使用、DuckDuckGo Searchも)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作成。足りない情報は検索してプランも立ててまずまずの出来。

この記事を見た。

 Claude Opus 4.7と同等性能のコーディングAIモデル「Ornith-1.0」が登場、ローカルで動作する小型モデルもラインナップ

Hugging Faceには4ビット量子化のGGUFもおかれているのでllama.cppで使ってみよう(ちなみにOllamaで使うと速度が1/3以下に…)

https://huggingface.co/deepreinforce-ai/Ornith-1.0-35B-GGUF

MCPサーバーのDuckDuckGoサーチで足りない情報はとってきてもらおう。

こちらを参照。

Qwen3.6 27Bと31B-A3Bにllama.cppでDuckDuckGoのMCPサーバーを使って検索機能を付けてみた(量子化はunslothのQ4_K_M)。とりあえず今日の大阪の天気を聞くと31B-A3Bは今日の日付を知ってから検索始めたが、27Bはいきなり検索を始めた。これはどっちがいいのか。 

ではまず依頼すると、足りない情報は検索し始めた。

Ornithtouchstone7

で計画を立ててもらう。

 

Ornithtouchstone5

Ornithtouchstone6

いくつか質問されて答えて進めてもらう。コードができた。

Ornithtouchstone8

Ornithtouchstone4

何回かやり直してもらってできた。

dB

Ornithtouchstone2

TDR

Ornithtouchstone1

スミスチャート

Ornithtouchstone3

まずまずの出来。ただgemma-4で作ったものがローカルLLMでは今のところ一番かな。

2026年6月29日 (月)

高周波エンジニアのためのAI・機械学習入門(GPU編35) MATLAB OnlineのAntenna Toolboxのパッチアンテナのアンテナ利得(ゲイン)計算機能を使ってモンテカルロシミュレーションをして、サロゲートモデルのためのデータを作る。

前回は周波数と比誘電率を与えて基板厚み、パッチサイズ(W,L)、フィード位置を推定してみた。

今回はMATLABのAntenna Toolboxのゲインを計算する機能を使って、周波数、比誘電率、基板厚み、パッチサイズ(W,L)、フィード位置を与えるとアンテナ利得(ゲイン)が出てくるサロゲートモデルを作ってみよう。
今回は学習データをモンテカルロシミュレーションで作る。

コードはこちら。これもMATLAB Copilotに聞きながら作った。

Matlabmlgain01


monteCarloPatchMicrostrip([6, 12],[2.2 4.4], 3000,'patch_mc_gain3000.csv')

function monteCarloPatchMicrostrip(freqRangeGHz, epsrRange, N, csvFilename)
% monteCarloPatchMicrostrip Generate Monte Carlo dataset of patchMicrostrip designs
%   monteCarloPatchMicrostrip(freqRangeGHz, epsrRange, N, csvFilename)
%
% Inputs:
%   freqRangeGHz  - [f_min f_max] in GHz (e.g. [2.4 2.5])
%   epsrRange     - [epsr_min epsr_max] (relative permittivity)
%   N             - number of Monte Carlo samples (positive integer)
%   csvFilename   - output CSV filename (string)
%
% Output:
%   Writes a CSV file with columns:
%     f_GHz, epsr, h_mm, W_mm, L_mm, feedX_mm, feedY_mm, gain
%
% Notes:
%   - Requires Antenna Toolbox (patchMicrostrip and design).
%   - Frequency is converted to appropriate units internally.
%   - The design uses the 'patchMicrostrip' element and the builtin 'design'
%     function to obtain h, W and L for the given resonant frequency.
%
% Example:
%   monteCarloPatchMicrostrip([2.4 2.5],[2.2 2.3],100,'patch_mc.csv')

arguments
    freqRangeGHz (1,2) double {mustBeFinite, mustBeNonnegative}
    epsrRange (1,2) double {mustBeFinite, mustBePositive}
    N (1,1) double {mustBeInteger, mustBePositive}
    csvFilename (1,:) char
end

% Preallocate results
results = nan(N,8); % f_GHz, epsr, h_mm, W_mm, L_mm, feedX_mm, feedY_mm, Gain
az = 0:5:355;
el = -90:5:90;

rng('shuffle');

for k = 1:N
    % Random sampling (uniform)
    fGHz = rand*(freqRangeGHz(2)-freqRangeGHz(1)) + freqRangeGHz(1);
    epsr = rand*(epsrRange(2)-epsrRange(1)) + epsrRange(1);
   
    % Convert units
    fHz = fGHz*1e9;
   
    % Create dielectric substrate
    substrate = dielectric('Name','mcSubstrate','EpsilonR',epsr);
   
    % Create patchMicrostrip with placeholder W,L; feedOffset set later
    pm = patchMicrostrip('Substrate',substrate);

    % Use design to compute patch geometry for the desired resonant frequency

    % design returns tuned element; use copy to extract h,W,L
    pmDesigned = design(pm, fHz);
    GdBi = pattern(pmDesigned, fHz, az, el);
    [maxdBi, idx] = max(GdBi(:));

    % Extract dimensions (meters)
    W_m = pmDesigned.Width;
    L_m = pmDesigned.Length;
    h_m = pmDesigned.Height;
    feedX_m = pmDesigned.FeedOffset(1);
    feedY_m = pmDesigned.FeedOffset(2);

    % Patch center is at x=0, y=0 in patchMicrostrip.
    % Convert to mm for output.
    W_mm = W_m*1e3;
    L_mm = L_m*1e3;
    h_mm = h_m*1e3;
    feedX_mm = feedX_m*1e3;
    feedY_mm = feedY_m*1e3;

    results(k,:) = [fGHz, epsr, h_mm, W_mm, L_mm, feedX_mm, feedY_mm, maxdBi];

end

% Write CSV with header
header = {'f_GHz','epsr','h_mm','W_mm','L_mm','feedX_mm','feedY_mm','Gain_dBi'};
T = array2table(results,'VariableNames',header);
writetable(T, csvFilename);

end

前回よりは計算時間がかかるのでデータ数は3000個にしてみた。こんな感じでデータができる。

Matlabmlgain02

次回はこれをDNNを使って推定しよう。

2026年6月28日 (日)

RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/6/21-6/28


RF Weekly Digest

直近7日間と直接または間接に判断できるRF/無線関連ニュース、標準化、部品、分解動画だけを収集し、Ollamaで要約します。




Modelgemma4:26b-a4b-it-qat
Period2026-06-21 - 2026-06-28
Items64


Digest

ollama

RF業界週報:次世代通信技術とAIによる設計革新

対象期間: 2026年06月21日 ~ 2026年06月28日

今週のRF業界は、AIを用いた回路設計の自動化、GaN(窒化ガリウム)技術の深化、そして6Gを見据えた次世代フィルタ・アンテナ技術に焦点が当てられました。

1. AIとディープラーニングによるRF設計の変革

RFICおよびパワーアンプ(PA)の設計プロセスにおいて、AIの活用が急速に進展しています。

  • RFIC設計の自動化: 強化学習(RL)や拡散モデルを活用し、5Gやレーダー向けに効率的な回路を迅速に構築する「AIによるRFIC設計」が注目されています (IEEE Spectrum, 06/26)。
  • パワーアンプの逆合成設計: ディープラーニングを用いた手法により、コンパクトかつ広帯域なインバーテッド・ドッヒ(Doherty)型パワーアンプの逆合成設計に関する研究が発表されました (arXiv, 06/26)。

2. 次世代通信(5G/6G)に向けたコンポーネント技術

  • 6G向け新素材とフィルタ: 6G無線通信に向けて、高Q値かつ広帯域な音響フィルタを実現する「自己整列型圧電ナノロッド」の集合技術が発表されました (Nature, 06/25)。また、中国テレコムはAIネイティブな6G実現に向け、ネットワークとコンピューティングのリソースを統合管理するアーキテクチャの必要性を提唱しています (RCR Wireless, 06/25)。
  • mmWaveおよびMIMOアンテナ: 多層PCBやウェアラブルデバイスへの適用を見据えた、共有グランド面を持つ「4ポート mm波 MIMOアンテナ」の研究が進んでいます (Nature, 06/26)。また、非地上系ネットワーク(NTN)向けの衛星接続用アンテナソリューションも展開されています (Kyocera AVX, 06/25)。
  • BAWフィルタ市場: BAWレゾネータおよびフィルタの市場は、RFフロントエンドモジュールへの統合が進み、高データレートアプリケーション向けの超広帯域化がトレンドとなっています (datainsightsmarket.com / globalmarketstatistics.com, 06/28, 06/26)。

3. GaN(窒化ガリウム)技術の進展と市場動向

GaNは、高出力・高効率なRFアプリケーションにおいて引き続き中心的な役割を担っています。

  • 市場成長: RF GaN市場は、RFパワーアンプやトランジスタを中心に拡大しており、2035年に向けた長期的な成長が見込まれています (sphericalinsights.com, 06/28)。
  • デバイス開発: 高性能なGaN HEMT(高電子移動度トランジスタ)の設計と信頼性向上に関する研究が進む一方、RFHICからは400MHz〜2.7GHzをカバーするGaN-on-SiCパワーアンプモジュールなどの実製品も展開されています (sciencedirect.com / everything RF, 06/26, 06/25)。
  • 高周波帯域への適用: Macomからは、Kバンド(18-23 GHz)で動作する高性能GaAsパワーアンプMMICなどが提供されています (macom.com, 06/25)。

4. モバイル・インフラおよびその他の動向

  • スマートフォン: SamsungがAI機能を強化した「Galaxy A27 5G」を発表しました (Samsung News, 06/26)。
  • Wi-Fi技術: Extreme NetworksとMatSingの提携により、スタジアム等の大規模会場向けのマルチビームWi-Fiプラットフォームが発表されました (lightreading.com, 06/26)。
  • 戦略的買収: QualcommがAIネイティブなソフトウェアスタックを強化するため、Modular社の買収に合意しました。これはデータセンターからモバイルデバイスに至るまでのAI展開を加速させる狙いがあります (Yahoo Finance / Facebook, 06/25)。

--- 今週の注目リンク:

2026年6月26日 (金)

高周波エンジニアのためのAI・機械学習入門(GPU編34) MATLAB OnlineのAntenna Toolboxのパッチアンテナ設計機能を使ってモンテカルロシミュレーションをして、DNNで予測してサロゲートモデルを作る。精度がどれも0.数%ととてもよかった。

前回はMATLAB OnlineのAntenna Toolboxで周波数、比誘電率を与えてパッチアンテナの寸法(W, L), 基板厚みh, フィード位置をdesign関数で設計し、周波数と比誘電率を振ってモンテカルロシミュレーションで10000個作った。

今回はそれをDNNで予測してみよう。

コードはこちら。


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

df = pd.read_csv('patch_mc.csv')
data = df[['f_GHz', 'epsr']].to_numpy()
label = df[['h_mm','W_mm', 'L_mm', 'feedX_mm']].to_numpy()
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.3, random_state=0)

normalizer = keras.layers.Normalization()
normalizer.adapt(x_train)

scaler_y = StandardScaler()
y_train_f = scaler_y.fit_transform(y_train)
y_test_f  = scaler_y.transform(y_test)

inputs = keras.Input(shape=(2,))
hidden_dim = 128
x = normalizer(inputs)
x = keras.layers.Flatten()(inputs)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization()(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization()(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.LayerNormalization()(x)
outputs = keras.layers.Dense(4)(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))



結果を図示したもの。平均誤差が0.数%ととても精度がいい。

Matlabdnn

別の事例でもやってみよう。

 

より以前の記事一覧

最近の記事

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

最近のコメント

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