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

2026年4月17日 (金)

Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。

Qwen3.6が公開されていた。

Qwen3.6-35B-A3B: Agentic Coding Power, Now Open to All

Ollamaでも早速使えるようになっている。

https://ollama.com/library/qwen3.6

そこでいつもの質問をしてみた。どちらも正しいし、答え方が一番今までのローカルLLMで賢い気がする。Gemma4が今まで一番と思っていたけど入れ替わった。

問:

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

答え

電子レンジの動作原理と2.45GHz採用の理由について、よくある誤解を踏まえつつ、物理的・工学的な観点から整理して解説します。



1. 電子レンジの動作原理:「誘電加熱」と「双極子緩和」

電子レンジは食品内部から加熱しますが、その仕組みは「共鳴」ではなく**誘電加熱(dielectric heating)**です。



  • 水・脂肪・糖などの極性分子は正負の電荷中心がずれた双極子モーメントを持っています。
  • 電子レンジ内部のマグネトロンから照射された高周波電磁波(2.45GHz)は、1秒間に2.45億回も電場の向きが逆転します。
  • この急速な電場変化に対して、水分子は「電場の向きに合わせて回転しよう」としますが、液体中で分子同士は強く結合しており、完全に追従できません。その結果、分子が引っ張られる・戻るを繰り返す位相遅れが生じ、分子間摩擦として熱が発生します。
  • この現象は物理化学で**双極子緩和(dipole relaxation)**と呼ばれ、LC回路のような「共鳴」ではなく、損失特性による誘電加熱です。


2. 「水分子の共振周波数が2.45GHz」という説は誤り

よく「電子レンジは水分子の共鳴周波数に合わせたから」と説明されますが、これは科学的に正確ではありません


状態 主な回転吸収帯 備考
気体・単量体水分子 約22.2 GHz 真空中の純回転遷移(ミクロな量子共鳴)
液体水(室温) 10〜20 GHz付近に広がり 水素結合ネットワークにより共鳴幅が大幅に拡張
電子レンジ周波数 2.45 GHz 吸収曲線の裾野側、ピークの約1/10程度の吸収率

液体の水分子は分子間相互作用で自由に回転できないため、「特定の周波数で激しく共鳴して熱くなる」という現象は起きません。むしろ2.45GHzは、水の吸収が「まだ十分でないが、許容範囲内」の領域に位置しています。



3. なぜ2.45GHzが選ばれたのか?(技術的・物理的・規格上の理由)

2.45GHzの採用は、水分子の共鳴を利用したのではなく、以下の実用的トレードオフから最適化された結果です。

① 浸透深度と加熱効率のバランス



  • 周波数が高いほど水の吸収率は上がりますが、電波が表面で急激に吸収され、内部まで届きません。
  • 2.45GHzの場合、水の浸透深度(電力が1/e≈37%に減衰する深さ)は約1〜2cm、食品全体でも数cm程度まで到達します。これにより「表面は焼けず、内部まで均一に加熱する」ことが可能になります。
  • 実際、商業用大型加熱機器では浸透を深めるため915MHz(北米・中国でISM帯割り当て)が使われることもあります。

② 磁気管(マグネトロン)の開発歴と技術的定着



  • 1940年代後半、初期の真空管型マグネトロンが安定して2.45GHz帯で高出力を発生できることが実証されました。
  • その後の産業用・家庭用として量産・部品供給が最適化され、周波数を変更すると共振器設計・インピーダンス整合・安全規格の見直しが必要になるため、実質的に「事実上の標準」となりました。

③ 国際的なISM帯(産業・科学・医療用帯)の割り当て



  • ITU(国際電気通信連合)とIECの規格により、**2.4GHz帯(2400〜2483.5MHz)**は通信機器への干渉を避ける「ISM帯」として国際的に予約されています。
  • この帯域は世界中でWi-Fi・Bluetoothと共用されていますが、電子レンジは高出力・非通信用途として法的に運用が許可されており、世界的な部品・設計の標準化が促進されました。

④ コスト・効率・安全性の総合判断



  • 2.45GHzは半導体・真空管技術で効率的に発生・制御できる周波数帯です。
  • 過大周波数化すると遮断扉のメッシュ加工(電波を反射する孔径設計)が困難になり、漏洩対策のコストが跳ね上がります。2.45GHzは安全性と製造コストのバランスが最も取れています。


4. まとめ:重要なポイント



  • 🔹 電子レンジは「水分子の共鳴」ではなく、**高周波電場による双極子緩和(誘電加熱)**で加熱しています。
  • 🔹 液体の水の最大吸収帯は10〜20GHz付近であり、2.45GHzは共鳴ピークでも吸収最大点でもありません。
  • 🔹 2.45GHz採用の理由:


    1. 食品への適度な浸透深度(表面だけ熱くならず内部まで加熱)
    2. 初期マグネトロン技術の成功と産業的標準化
    3. 国際ISM帯の規格適合と部品供給の利便性
    4. 安全性・コスト・効率の総合的最適解
  • 🔹 家庭用電子レンジが2.45GHzを使い続けるのは、食品サイズ・材質・加熱特性・国際規格・製造コストが長年均衡しているためです。周波数を変更しても「水分子が共鳴して効率的に熱くなる」わけではありません。

学術的に正確な記述を求む場合は、J. D. Jackson『電磁論』やP. Debye『極性分子』、あるいはIEC 60335-2-25(家庭用電子レンジ安全規格)の関連解説が参考になります。必要に応じて物理モデルや周波数特性のグラフも提示可能です。

 

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

答え

隕石が大気圏突入時に「燃える」ように光る現象は、化学的な燃焼(酸化反応)ではなく、空気の急激な圧縮による物理的な加熱が主原因です。以下に原理を順に解説します。



🔹 主な原理:空気の断熱圧縮(ラミング・コンプレッション)

隕石は大気圏に突入する際、毎秒11〜70kmという極超高速で移動します。この速度で空中を進むと、前方の空気が隕石に押されて圧縮され、強い衝撃波(ボウショック)が形成されます。圧縮された空気は体積が急激に減るため、温度が瞬間的に上昇します(断熱圧縮)。これにより衝撃波直後の空気温度は2,000〜4,000℃以上に達し、これが隕石を加熱・気化させる主因です。



🔸 誤解されがちな点:「摩擦」は主原因ではない

「空気との摩擦で燃える」と説明されることが多いですが、航空力学のシミュレーションや実際の観測から、加熱の約80〜90%は空気の圧縮によるもの、摩擦は10〜20%程度であることがわかっています。摩擦だけでは説明できない点として:



  • 大気密度が極端に薄い高高度(80〜100km)でも発光が始まる
  • 真空に近い環境でも隕石は減速・加熱する
    という事実が挙げられます。


🔸 光っているのは隕石自体ではなく「周囲の空気」

高温となった空気中の分子(窒素・酸素など)がイオン化し、プラズマ状になります。このプラズマが発光し、私たちが目にする「流れ星」の正体です。隕石本体はむしろ表面が融解・気化して剥がれ落ちる(アブレーション)ため、内部は比較的低温に保たれることもあります。



🔸 なぜ全てが燃え尽きないのか?

地表まで到達する「隕石」が残るかどうかは、以下の条件で決まります:


要因 説明
サイズ 直径1m以上だと中心部まで熱が届かず、剥離熱も時間がかかるため生存確率が高い
材質 鉄隕石は熱伝導率が高く耐熱性に優れる。石質隕石も硅酸塩の融解熱が大きい
突入角 急角度(真下に近い)ほど大気との相互作用時間が短く、熱を逃がしやすい
速度 速度が低下するほど圧縮加熱の強度が下がる(地球の重力で加速されるが、大気抵抗で減速 begins early)

これらの条件が揃えば、内部が融解や熱分解に耐え抜き、地表に落下します。



✅ まとめ

隕石の発光・気化は「化学反応による燃焼」ではなく、
超高速度 → 前方空気の断熱圧縮 → 衝撃波・高温化 → 熱伝達・アブレーション → プラズマ発光 という一連の物理プロセスです。そのため、地球の大気こそが「自然のシールド」として、小型の天体を保護していると考えられています。

詳しくは航空力学の「ハイスピード流入加熱(Aerodynamic Heating)」や「メテオロイド・アブレーション理論」で研究が進められており、NASAやJAXAの公開資料でもこのメカニズムが標準的に解説されています。

ExcelのOfficeスクリプト(TypeScript)で数値計算ライブラリmath.jsを使う(1) Officeスクリプトは外部API呼び出せるし、math.jsは RESTful APIで呼び出せることがわかった。まずは選択したセルのデータを読み、行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。

以前JavaScriptの数値計算ライブラリmath.jsを使っていろいろやってみるシリーズをやっていた。

でExcelのVBAから乗換が進むと思っていたが、そうでもないOfficeスクリプト(文法はTypeScript)。外部ライブラリ読めないから使えないなとおもっていたが、実はOfficeスクリプトは外部APIが呼び出せる。

Office スクリプトでの外部 API 呼び出しのサポート

またmath.jsはwebサービスとして RESTful APIで呼び出せる。

math.js web service

じゃあ普通に使えそう、ということでやってみる。まずは行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。

コードはこんな感じで。

async function main(workbook: ExcelScript.Workbook) {
    let range: number[][] = workbook.getSelectedRange().getValues() as number[][];
    let row: number = workbook.getSelectedRange().getRowIndex();
    let column: number = workbook.getSelectedRange().getColumnIndex();
    const n: number = range.length;
    let a: number[][] = Array(n);
    let b: number[] = Array(n);
    let x: number[][];
    let aInv: number[][] = Array(n);
    let det: number[][];

    for (let i = 0; i < n; i++) {
        a[i] = range[i].slice(0, n);
        b[i] = range[i][n];
    }

    // 送信するJSONデータ
    const data = {
        "expr": [
            "a = " + JSON.stringify(a),
            "b = " + JSON.stringify(b),
            "lusolve(lup(a), b)",
            "inv(a)",
            "det(a)"
        ],
        "precision": 14
    };

    // APIへの送信
    const response = await fetch('http://api.mathjs.org/v4/', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    });

    // レスポンスの処理
    const result: JSONData = await response.json();

    x = JSON.parse(result.result[2]);

    workbook.getActiveWorksheet().getRangeByIndexes(row, column + n + 1, n, 1)
        .setValues(x);

    aInv = JSON.parse(result.result[3]);

    workbook.getActiveWorksheet().getRangeByIndexes(row + n + 1, column, n, n)
        .setValues(aInv);

    det = JSON.parse(result.result[4]);

    workbook.getActiveWorksheet().getRangeByIndexes(row + 2 * n + 2, column, 1, 1)
        .setValues(det);

}

interface JSONData {
    "result": string | string[] | null
    "error": string | null
}

こんな感じで簡単に動いた。

Officescriptmathmatrix01

2026年4月15日 (水)

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

DNN、CNNと来て今回はTransformer。

コードはこんな感じ。


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'

# JAXの高速化
jax.config.update("jax_enable_x64", False)
jax.config.update("jax_disable_jit", False)

# mixed precision (JAX + Keras3対応)
keras.mixed_precision.set_global_policy("mixed_float16")

# ==========================
# データ読み込み
# ==========================
data_label = np.load("complex_tl_data.npz")
data = data_label["data"]     # (N,200,5)
label = data_label["label"]   # (N,2)

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)

# ==========================
# Positional Encoding
# ==========================
def positional_encoding(seq_len, d_model):
    pos = np.arange(seq_len)[:, np.newaxis]
    i = np.arange(d_model)[np.newaxis, :]
    angle_rates = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
    angle_rads = pos * angle_rates

    pe = np.zeros((seq_len, d_model))
    pe[:, 0::2] = np.sin(angle_rads[:, 0::2])
    pe[:, 1::2] = np.cos(angle_rads[:, 1::2])
    return keras.ops.convert_to_tensor(pe, dtype="float32")

# ==========================
# Transformer Encoder Block
# ==========================
def transformer_encoder(x, head_size, num_heads, ff_dim, dropout=0.1):
    # Self Attention
    attn_out = keras.layers.MultiHeadAttention(
        num_heads=num_heads,
        key_dim=head_size
    )(x, x)

    #attn_out = keras.layers.Dropout(dropout)(attn_out)
    x = keras.layers.LayerNormalization(epsilon=1e-6)(x + attn_out)

    # Feed Forwardネットワーク
    ffn = keras.layers.Dense(ff_dim, activation="relu")(x)
    ffn = keras.layers.Dense(x.shape[-1])(ffn)
    #ffn = keras.layers.Dropout(dropout)(ffn)

    x = keras.layers.LayerNormalization(epsilon=1e-6)(x + ffn)
    return x

# ==========================
# モデル定義
# ==========================
seq_len = 200
feat_dim = 5
embed_dim = 64

inputs = keras.Input(shape=(seq_len, feat_dim))

# 入力を高次元に射影
x = keras.layers.Dense(embed_dim)(inputs)

# Positional Encodingを加算
pe = positional_encoding(seq_len, embed_dim)
x = x + pe

# Transformer ブロック
x = transformer_encoder(x, head_size=64, num_heads=4, ff_dim=128)
#x = transformer_encoder(x, head_size=64, num_heads=4, ff_dim=128)


# 時系列次元を集約
x = keras.layers.GlobalAveragePooling1D()(x)

# 全結合
x = keras.layers.Dense(128, activation="relu")(x)
outputs = keras.layers.Dense(2)(x)

model = keras.Model(inputs, outputs)

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss="mean_squared_error"
)

model.summary()

# ==========================
# 学習
# ==========================
batch_size = 64
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()

結果はこちら。CNNと大体同じくらいになっている。時間は1.5倍くらいはかかる。

Gpucomplexz0transformer01

まあ今回もCNNを使うのが一番よさそうだ。

 

2026年4月13日 (月)

Microsoft 365 Copilot ChatでGPT-5.4 Think Deeperを使う(4) Excel VBAで常微分方程式ライブラリとしてSciPyに入っているアダプティブな高次ルンゲクッタ法dopri5とdop853が入っているものを作ってもらう。だいぶGitHubを検索していたが何とかでき、ローレンツ方程式を計算。

今回は常微分方程式を作ってもらおう。ソルバーはSciPyに入っているDormand & Princeのアダプティブ高次ルンゲクッタ法のdopri5とdop853を入れてもらう。だいぶGitHubを検索していたが何とかできた。VBAのクラスにインターフェースがあるのは知らなかった…

Copilotchatode01

例として1変数の減衰関数を出してくれていたが、ここはローレンツ方程式の例を出してもらおう。

Copilotchatode02

で完成。

Copilotchatode03

実行。

Copilotchatode04

コードはまとめて貼っておこう。

ダウンロード - vbaodelib.zip

これで行列計算、FFT、常微分方程式がExcel VBAでできるようになってだいぶ使える感じ。

 

2026年4月12日 (日)

RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/5-4/12

RF WeeklyDigest

Weekly Intelligence Briefing

UPDATED: 18:25:55
NETWORK STD

ハイレベル・エグゼクティブサマリー:RF技術インテリジェンス(2026年4月5日 – 4月12日)

本レポートは、過去7日間における無線周波数(RF)エコシステムの重要な進展をまとめたものであり、5G-Advancedの成熟への決定的なシフト、およびWi-Fi 86G FR3帯向けの初の具体的なハードウェアの登場を強調しています。

NETWORK STD

1. 5G/6Gの進展と標準化

  • 3GPP リリース19 (5G-Advanced)2026年4月9日3GPPリリース19の作業項目に関する包括的なサマリーを公開しました。主な注力分野には、通信・センシング統合 (ISAC)、衛星経由のスマートフォン接続を改善する非地上系ネットワーク (NTN)の強化、およびAIネイティブ無線の最適化が含まれます。
  • 6Gのタイムラインと調査 (リリース20):報告によると、リリース20における6Gユースケース調査は現在80%完了しています。規範的な6G仕様(リリース21)は2026年6月まで期待されていませんが、業界は初期のプロトタイピング向けに**7–15 GHz (FR3)およびサブテラヘルツ (100+ GHz)**スペクトルへの集約を進めています。
  • スペクトルのシフト:放送事業者やアナリスト(IDTechEx経由)は、既存の5Gミッドバンドサイトとのカバレッジの互換性がより高い**FR3(センチメートル波)**が優先され、サブテラヘルツ研究は一時的に「二の次」になっていると指摘しています。
NETWORK STD

2. 新型ハードウェア(チップ、アンテナ、モデム)

  • Sivers Semiconductors Daybreak™ IC2026年4月4日SiversはビームフォーミングICファミリー「Daybreak™」を発表しました。これらのチップは**7–15 GHz (FR3)**帯に特化して設計されており、13億ドル規模と予測される5G-Advancedおよび初期の6Gインフラ市場をターゲットにしています。
  • Qualcomm Snapdragon X105 & FastConnect 8800MWC 2026に続き、今週公開されたテクニカルブリーフにより、X105 5Gモデム-RFシステムがOEM向けにサンプル出荷中であることが確認されました。主な特徴は以下の通りです:
    • 14.8 Gbpsのピークスループット(ミリ波)。
    • 6nmプロセスのトランシーバー(消費電力を30%削減)。
    • リリース19ハードウェアへの対応
  • Broadcom Wi-Fi 8 プラットフォームBroadcomBCM4918 APUおよび関連するデュアルバンドWi-Fi 8ラジオ(BCM6714/BCM6719)が、エンタープライズパートナー向けに「早期アクセス」段階に入りました。超高信頼性 (UHR)と1ms未満の低遅延を強調しています。
INDUSTRY UPDATE

3. スマートフォンの分解調査:Samsung Galaxy S26 Ultra

2026年第1四半期後半に発売されたSamsung Galaxy S26 Ultraの最新分析が、今週の技術的な分解調査コミュニティ(iFixitTechInsightsZack Nelson)で注目を集めました:

  • RFフロントエンド (RFFE):分解調査により、Qualcomm X105モデムの搭載が確認されました。アナリストは、新しい6nmトランシーバーアーキテクチャにより、基板(PCB)面積が大幅に削減(約15%)されたことに注目しています。
  • ALOPカメラモジュール:新しいALOP (All Lenses On Prism)望遠設計がJerryRigEverything (Zack Nelson) によって分析されました。レンズをプリズム上に直接積層することで、Samsungはモジュールの高さを22%削減し、Snapdragon 8 Elite Gen 5を冷却するためのベイパーチャンバーを15%大型化するスペースを確保しました。
  • 修理性の危機iFixitはこのデバイスに5/10のスコアを付けました。ハードウェアレベルのプライバシーフィルターである新しいプライバシーディスプレイが、パネルを損傷させずに取り外すことがほぼ不可能な「修理の悪夢」であると指摘しています。
CONNECTIVITY

4. IoTとコネクティビティ (Wi-Fi 8, Bluetooth 7)

  • Wi-Fi 8 (802.11bn):業界は公式に「ピーク速度」から「予測可能なパフォーマンス」へと移行しました。QualcommBroadcomは、Wi-Fi 8を「信頼性の世代」としてマーケティングしており、産業用ロボティクスやAR/VR向けにテールレイテンシを25%低減することを目指しています。
  • 統合IoTトライラジオInfineonACW741x(今年初めに発表)の量産出荷が今週開始されました。これは、Wi-Fi 7 (20-MHz IoTモード)、チャネルサウンディング対応のBluetooth 6.0/7.0、および**802.15.4 (Matter/Thread)**を統合したシングルチップソリューションです。
INDUSTRY UPDATE

5. 市場インテリジェンスと戦略的動向

  • Skyworks-Qorvoの合併2026年4月10日の対談で、Skyworks経営陣はQorvoとの220億ドルの合併2027年初頭の完了に向けて順調であることを改めて表明しました。合併後の新会社は、RFとパワーアプリケーションの両分野で**GaN(窒化ガリウム)**のリーダーとなることを目指しています。
  • Appleの内製化TechInsightsのレポートによると、Appleは今年RF関連の採用を40%増強しており、iPhone 18のサイクル(2027年)までに、初の完全内製RFFE (RFフロントエンド)およびモデムをデビューさせることを目標としています。
  • TSMC 2nm RF:今週、TSMCは**2nm (ナノシート/GAA)**ノードが2026年まで予約で満杯であることを確認しました。高額なコスト(ウェハー1枚あたり3万ドル)により、RF設計者は部品コスト(BOM)を管理するために、チップレットベースのRFFE設計を検討せざるを得なくなっています。
INDUSTRY UPDATE

図解・ダイアグラム参照

  • 3GPP リリース19 機能インデックス:合意された60以上の作業項目(AI、NTN、Ambient IoT)の統合リストが、4月9日にThe 3G4G Blogによって共有されました。ソース: 3g4g.co.uk
  • Samsung S26 Ultra ALOP ダイアグラム:ペリスコープカメラと冷却システムの詳細な内部レイアウトが、Android AuthorityおよびZack NelsonのYouTubeチャンネルで公開されています。ソース: YouTube/JerryRigEverything
  • Broadcom Wi-Fi 8 APU ブロック図BCM4918「エッジAI」ネットワーキングプロセッサの技術仕様。ソース: broadcom.com

2026年4月10日 (金)

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

前回はDNNで推定してみた。今回は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'
from jax import config
config.update("jax_enable_x64", False)

data_label = np.load("complex_tl_data.npz")
data = data_label["data"]
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)

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

# 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(2)(x)


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

batch_size = 64
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()

結果はこちら。かなり精度が向上した。時間は4倍以上かかるが…

Gpucomplexz0cnn01

次はTransformer試してみよう(続く)。

 

2026年4月 9日 (木)

GLM-5.1(Ollamaから利用)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。5分など長く考えた後、Gemma 4:31bよりさらに出来が良く、思った通りのものができた。

いつの間にかOllamaでGLM-5.1が使えるようになっていた。

https://ollama.com/library/glm-5.1

そこでいつもやっているPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。
5分以上考えて、

Glm5_1sparaviewr5

できた。が、古いMatlabとかNumpyの仕様を使っていたり動かない。しかしちゃんと検索して対応してくれる。

やり取りを何回もして最終版ができた。

Glm5_1sparaviewr4

dB表示。こういうマーカーが欲しかった。

Glm5_1sparaviewr1

スミスチャート

Glm5_1sparaviewr2

TDR

Glm5_1sparaviewr3

Gemma 4:31bで作ってもらったものが一番と思ったけれどこっちのほうが完成度高いな。

2026年4月 8日 (水)

Microsoft 365 Copilot ChatでGPT-5.4 Think Deeperを使う(3) Excel VBAで先に作った数学ライブラリに、固有値・固有ベクトル、特異値分解(SVD)、主成分分析(PCA)を加えてもらう。最初は実対称行列で実装してきて、一般もできるということでやってもらったら時間はかかるができた。

前々回に線形代数やFFTといった基本的な数学ライブラリを作ってもらった。

Microsoft 365 Copilot ChatでGPT-5.4 Think Deeperを使う(1) Excel VBAで数学ライブラリ(クラスを使った複素数含む行列の演算・一次方程式計算、1次元と2次元のFFT計算など)を作ってもらう。大昔に自分で作ったものよりも圧倒的にいい感じで作ってくれた。 

今回はこれに固有値・固有ベクトル、特異値分解(SVD)、主成分分析(PCA)を加えてもらおう。
以前のファイルを渡してお願いすると、

Copilotchatmathlibnew01

すぐにJacobi法を使ったものを返してくれた。

Copilotchatmathlibnew02

もうこれでいいかな(実対称行列のみだが)と思っていたら、正直な制約を言ってくれたので、じゃあ一般もというと、

Copilotchatmathlibnew03

できたが0で近い数で割るエラーがでるのでそれを伝えると、解決策を出してきてできた。

Copilotchatmathlibnew04

では実行してみる。

PCAの例。

Copilotchatmathlibnew05

 

一般行列の固有値固有ベクトル。

Copilotchatmathlibnew06

マニュアル冒頭。

Copilotchatmathlibnew07

ライブラリを一応貼っておこう。

ダウンロード - vba_math_lib2.zip

ここまでできれば一般企業のちょっとした数値計算はすぐできるのではないか。数十万円とか取っていいレベルと思う。

しかしなんでもできるな。次は何をやってもらおう。

2026年4月 7日 (火)

Claude CodeでGemma 4:26b(Ollama経由, 31bは遅すぎ、e4bはプランモードに入れない)を使ってPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。

昨日はGemma 4:31b単体でSparameter Viewerを作ってもらった。

Gemma 4:31b(Ollamaから利用)を使ってPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。自分のPCで動かせるローカルLLMとしては今までで一番いい出来。

Claude Codeと組み合わせるとどうなるんだろうと同じプロンプトでやってみた。

OllamaでClaude Codeが使える。

https://docs.ollama.com/integrations/claude-code

で昨日と同じGemma 4:31bから始めると遅すぎて途中ですべてがRequest Timeoutになる(VRAM 8GBしかないので大部分がCPUに入ってめちゃくちゃ遅い)。ではGemma 4:e4bを使うと速いのだが、どうもプランモードに入れなくてずっとエラーが出ている。無理やりベタでプランを作ってくれたがちょっといまいち。そこでGemma 4:26bが速さと賢さを兼ね備えているということでやってみた。

立ち上げて、

Gemma4claudecode1

プランモードでプランを作ってもらい、

Gemma4claudecode2

そして完成。

Gemma4claudecode3

Gemma4claudecode4

Gemma4claudecode5

まずまずの出来だが、昨日の単体で作ったほうがちょっといい感じ。Claude CodeはやっぱりOpus4.6などのもっと賢いAIと組み合わせないと真価が発揮できない感じか。

2026年4月 6日 (月)

Gemma 4:31b(Ollamaから利用)を使ってPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。自分のPCで動かせるローカルLLMとしては今までで一番いい出来。

Gemma4が発表されて、早速

 Gemma 4が発表されて、Ollamaで早くも使えるようになっていた。そこでGemma 4:31bにいつものに電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。

というのをやってみた。次はこれもいつもやっているPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作ってもらった。

Gemma4sparaviewer1

すぐにコードを書いてくれた。手直しは必要だったが、dB表示、

Gemma4sparaviewer2

スミスチャート、

Gemma4sparaviewer3

位相、

Gemma4sparaviewer4

TDR

Gemma4sparaviewer5

の表示がズームやマーカー機能含めてできた。

自分のPCで動くローカルLLMとしては今までで一番の出来だと思う。

より以前の記事一覧

最近の記事

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    

最近のコメント

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