・Pythonの高周波用ライブラリ scikit-rfを使う
・Visual C#で数値計算ライブラリ Math.NET numericsを使う(Visual Basic版もあり)
・高周波エンジニアのためのAI・機械学習入門
・JavaScriptの数値計算ライブラリmath.jsを使う
・カシオの高精度計算サイトに投稿した自作式一覧
・Pythonの高周波用ライブラリ scikit-rfを使う
・Visual C#で数値計算ライブラリ Math.NET numericsを使う(Visual Basic版もあり)
・高周波エンジニアのためのAI・機械学習入門
・JavaScriptの数値計算ライブラリmath.jsを使う
・カシオの高精度計算サイトに投稿した自作式一覧
・Microwave Journalの特集は軍事・ドローンを使ったESM等
https://www.microwavejournal.com/publications/1
・SEMCOがCLLCコンバータ向けMLCC発表
こちらも発表
・SpaceXとSTM(フェイズドアレイアンテナのチップ開発)の協業10年
・広帯域バランを使ったバランス測定解説
その他
さて、DNNでLCフィルタの素子値を推定する試みはノーマライズの効果とGPUで計算が速いのでいろいろ試せて格段に精度が上がったことをみた。今回はこのCNNの事例をGPUで計算してみる。
ノーマライズは前提として、ChatGPTにCNNの改善案を聞いてみた。どんどん複雑なものを提案してきたが、どんどん精度が落ちた…
シンプルなCNNが一番よかった。これだけ試せるのもGPUが速いおかげ。
コードはこちら。
|
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("data_label.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)
# ==========================
# ラベルスケーリング(y)
# ==========================
# L, C の桁差や物理パラの偏り対策
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(6)(x)
# モデルの設定
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss = 'mean_squared_error' ,optimizer=keras.optimizers.Adam())
batch_size = 32
epochs = 300
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)
# ==========================
# R2評価
# ==========================
metric = keras.metrics.R2Score()
metric.update_state(y_test, y_pred)
print("\nR2 Score:", metric.result())
# ==========================
# パーセント誤差(0除算対策)
# ==========================
# 小さい値の分母マスク
eps = 1e-12
valid_mask = np.abs(y_test) > eps
pct_error = np.zeros_like(y_test)
pct_error[valid_mask] = np.abs(
(y_test[valid_mask] - y_pred[valid_mask]) / y_test[valid_mask] * 100
)
print("\n% Error per element (mean):", pct_error.mean(axis=0))
# ==========================
# 相関プロット
# ==========================
row, column = 2, 3
legend = ["L1", "C1", "L2", "C2", "L3", "C3"]
fig, ax = plt.subplots(2, 3, figsize=(15,9))
for i in range(row):
for j in range(column):
count = column * i + j
maxvalue = y_pred[:, count].max()
ax[i,j].scatter(y_pred[:, count], y_test[:,count], c="r", s=5)
ax[i,j].plot([0,maxvalue], [0,maxvalue], "--", c="black")
ax[i,j].set_xlabel("推定した値")
ax[i,j].set_ylabel("実際の値")
ax[i,j].set_xlim(0, maxvalue)
ax[i,j].set_ylim(0, maxvalue)
ax[i,j].grid()
ax[i,j].legend([legend[count] + f" 平均誤差{pct_error.mean(axis=0)[count]:.2f}%"])
fig.tight_layout()
plt.show()
|
実行結果はこちら。
R2 Score: 0.999959
% Error per element (mean): [0.36901893 0.27566749 0.28031276 0.36773189 0.36956985 0.27216478]
DNNよりさらに精度が向上して0.数%になった。計算時間もDNNとそれほど変わらない。これがGPUの効果か。
次はRNN(LSTM)をやってみよう。
これは、過去7日間(2025年12月7日から2025年12月14日まで)の無線周波数(RF)技術における最新の進展に関するハイレベルなエグゼクティブサマリーです。
吉野家で牛肉玉ラーメン鍋膳(とんこつ)をいただいた。つけ麺風と煮込みラーメン風と両方できるとあったので麺を半分ずつ試す。
煮込みの方が好みかな。思ったよりあっさりしていていいが、そこににんにくマシマシだれを投入するといきなりジャンキーになる。
こっちの方が美味しかった。メンマも入っていていい。
また別の日、すき家で赤だれ白髪ねぎ牛丼をいただいた。
結構これは好きで、ネギがシャキシャキしていて赤だれも結構辛めで美味しい。もっと辛くてもいいくらい。
また別の日、丸亀製麵で鴨ねぎうどんをいただく。
いつ鴨ねぎがかけられる?と思ったらレジの前で鍋でその場で鴨肉を煮込む。それがとても柔らかい。柚子がとても効いている。
すごく評判がいいので観に行ってみた。口コミで広がっているようで客席はほぼ埋まっていた。
あるクラスの18人の子供達のうち、17人が行方不明になることから始まる。そのクラスの担任が責められるが彼女にも全く理由がわからない。
その先生の視点、子供の父親の視点、など同じ場面を別の人物の視点で次々見せていくが、本当に最初の1時間何が起こっているのか全く分からない。その上びっくりするというか心臓に悪いシーンが続く。
そしてある人物の視点になったとき、ようやく真相がわかっていく。ネタバレ厳禁ということで、とにかくWeaponsの意味がこんなことだとは…恐ろしいのだがちょっと笑えるシーンもあったり、ミステリであったりホラーであったり。
これは評判いいのも分かる。ただ上映館が少ないので探していかないと…
・5G Americasが米国の5G普及率99%と発表
・ZTEが800G Metro Transport Network (MTN) 標準化主導
・NordicのnRF9151モジュールがSkylo認証取得
・不完全なViaの電気特性解説
・QualcommがRISC-VのVentana Micro Systems買収
その他
今回はこの例題。
Javaの数値計算ライブラリApache Commons Mathを使う(4) 多項式フィッティング(今回は3次)をしてJFreeChartでプロットする。
コードはこんな感じで。
(ns mini.polynomialFit
(:import [javax.swing JFrame]
[java.awt BorderLayout]
[org.jfree.chart ChartFactory ChartPanel]
[org.jfree.chart.plot PlotOrientation]
[org.jfree.chart.renderer.xy XYLineAndShapeRenderer]
[org.jfree.chart.axis NumberAxis]
[org.jfree.data.xy XYSeries XYSeriesCollection]
[org.apache.commons.math3.analysis.polynomials PolynomialFunction]
[org.apache.commons.math3.fitting PolynomialCurveFitter WeightedObservedPoints]))
(defn create-data []
(let [x (double-array [0.0 1.0 2.0 3.0 4.0 5.0])
y (double-array [0.0 0.8 0.9 0.1 -0.8 -1.0])
obs (WeightedObservedPoints.)]
;; add original points
(dotimes [i (alength x)]
(.add obs (aget x i) (aget y i)))
;; fit cubic polynomial
(let [fitter (PolynomialCurveFitter/create 3)
coeff (.fit fitter (.toList obs))
poly (PolynomialFunction. coeff)
n 600
xval (double-array n)
yval (double-array n)]
(dotimes [i n]
(let [xi (+ -2.0 (* (/ (- 6.0 -2.0) (dec n)) i))]
(aset xval i xi)
(aset yval i (.value poly xi))))
;; build dataset
(let [data (XYSeriesCollection.)
s1 (XYSeries. "Original Points")
s2 (XYSeries. "Cubic Fitting")]
(dotimes [i (alength x)]
(.add s1 (aget x i) (aget y i)))
(dotimes [i n]
(.add s2 (aget xval i) (aget yval i)))
(.addSeries data s1)
(.addSeries data s2)
data))))
(defn create-chart []
(let [chart (ChartFactory/createXYLineChart
"Polynomial Fitting"
"x"
"y"
(create-data)
PlotOrientation/VERTICAL
true
false
false)
plot (.getXYPlot chart)
renderer (XYLineAndShapeRenderer.)]
;; set styles
(let [y-axis ^NumberAxis (.getRangeAxis plot)]
(.setRange y-axis -2.0 2.0))
(.setSeriesLinesVisible renderer 0 false)
(.setSeriesShapesVisible renderer 1 false)
(.setRenderer plot renderer)
chart))
(defn -main [& _]
(let [frame (JFrame. "Cubic Polynomial Fitting")
chart (create-chart)
panel (ChartPanel. chart)]
(.setDefaultCloseOperation frame JFrame/EXIT_ON_CLOSE)
(.setBounds frame 10 10 640 480)
(.add (.getContentPane frame) panel BorderLayout/CENTER)
(.setVisible frame true)))
(-main)
|
結果はこちら。
・iFixitが水冷スマホRedMagic 11 Proを分解
RedMagic 11 Pro: A Heat-Dumping Franken-Phone Teardown
・Qorvoがロボット向けの技術を紹介
・SamsungとKTが6Gに向けAI-RANを実証
・NordicがnRF9151向けソフトと開発キット発表
・aoglasが6G向けアンテナ設計解説
その他
Ericsson and Nokia get set for the end of the Gs
成瀬シリーズ完結ということでとても残念。でもこの「成瀬は都を駆け抜ける」もめちゃ面白かった。一気に2時間くらいで読んでしまった。
アマゾンリンク:https://amzn.to/4axM6jv
内容は以下の6編。
完全に成瀬は私の後輩(大学・学部とも)になった。
新キャラがぞくぞく登場するがみんなキャラが立っていて面白い。しかも全部自分がよく知っている場所が出てくるのでうれしかったり。
まさかここが出るとは。
https://souda-kyoto.jp/blog/00962.html
いやこっちの方が驚くか。
https://www.super-fresco.co.jp/store/coremo/kyoto/sakyo/%E5%87%BA%E7%94%BA%E6%9F%B3%E5%BA%97/
さらに森見登美彦さんの「夜は短し歩けよ乙女」の黒髪の乙女の下りはなるほど、とか思ったり。
ぼきののかで、あの第一作第一話のセリフが唐突に出てくるのも笑った。そして最後はやっぱり島崎との関係にぐっと来たり。
最後とは言わず、またいつか続編書いて欲しいと思う。成瀬が研究者になっていても不思議じゃない。
・Qualcommが6Gに向けたOBBB法解説
・GSMAが欧州のスペクトラム価格についての報告
・Menlo Microが防衛向けに高スタンドオフ保護ミリ波スイッチ発表
・京セラとローデ&シュワルツがCES2026でミリ波PAAMデモ
その他
Google Colabを開くとトップにVSCodeで使えるようになった件と、APIキーなしでAIモデルが使える件などが書いてあった。
早速試してみよう。
モデルは何が使える?
あれ?例ではGemma3なども使えたはずだが…無償版はこれだけなのかもしれない。
ではローカルLLMで試してみた
「電子レンジの動作原理となぜ2.45GHzが使われているかを教えてください。特に水分子の共振周波数とも関連付けて説明してください。」
を聞いてみよう。
電子レンジの動作原理と2.45GHzが使われている理由について、水分子の共振周波数との関連を含めて解説します。
---
### 1. 電子レンジの動作原理
電子レンジは、**マイクロ波**と呼ばれる電磁波を利用して食品を加熱する調理器具です。
1. **マイクロ波の発生:**
電子レンジの内部にある「マグネトロン」という真空管が、約2.45GHz(ギガヘルツ)のマイクロ波を発生させます。
2. **マイクロ波の食品への照射:**
発生したマイクロ波は、導波管を通じて電子レンジ庫内へと送られ、金属製の庫内で反射を繰り返しながら食品に照射されます。
3. **水分子の極性:**
食品の主成分である水は、酸素原子と2つの水素原子からなるH2Oという分子構造をしています。この分子は、酸素原子が負に、水素原子が正に帯電しており、全体として電気的な偏り(**極性**)を持っています。これは、水分子が小さな磁石のような性質を持っていると考えると分かりやすいでしょう。
4. **マイクロ波による水分子の振動・回転:**
マイクロ波は、電磁波の一種であり、電場と磁場が周期的に変動します。食品中の水分子は、この変動する電場によって、その極性の向きを変えようとします。2.45GHzのマイクロ波は、1秒間に24億5千万回も電場の向きが反転するため、水分子もその電場の向きに合わせて、高速で振動したり回転しようとします。
5. **分子間の摩擦熱発生:**
水分子が高速で振動・回転しようとしても、液体中では周囲の他の水分子や食品中の他の分子と常に衝突し、動きが妨げられます。この分子同士の摩擦によって**熱(誘電損失)**が発生し、食品全体が内側から温められる、というのが電子レンジの加熱原理です。
### 2. なぜ2.45GHzが使われるのか?
電子レンジに2.45GHzという特定の周波数が使われるのには、複数の理由があります。
1. **ISMバンドとしての利用:**
2.45GHzは、国際的に「**ISMバンド(Industrial, Scientific and Medical band)**」と呼ばれる周波数帯の一部です。これは、産業、科学、医療目的で利用が許可されている周波数帯であり、電波法によって比較的自由に、また免許不要で高出力の電波を放射できることが認められています。他の無線通信(携帯電話、Wi-Fiなど)との干渉を避けるため、特定の周波数帯が割り当てられているのです。
2. **加熱効率と浸透深度のバランス:**
* **周波数が高すぎる場合:** 電磁波のエネルギーは強くなりますが、食品の表面で吸収されてしまい、内部まで届きにくくなります(浸透深度が浅い)。これでは表面だけが焦げ付いたり、温まり方にムラが出たりします。
* **周波数が低すぎる場合:** 食品の奥まで浸透しやすくなりますが、水分子を効率よく振動・回転させるだけのエネルギー伝達が弱くなり、加熱効率が低下します。また、低周波の電磁波を発生させる装置は大型になりがちです。
* **2.45GHzの最適性:** 2.45GHzは、この「水分子への加熱効率」と「食品内部への浸透深度」のバランスが最も実用的に優れているとされています。この周波数であれば、多くの食品が内部まで適切に加熱され、かつ装置も家庭用として十分なサイズに収まります。
### 3. 水分子の「共振周波数」との関連について(重要な訂正と解説)
「2.45GHzは水分子の共振周波数である」という説明を耳にすることがありますが、これは**厳密には誤解**です。
1. **「共振」とは異なる現象:**
* **共振(Resonance)**とは、物体や系が固有の振動数と同じ外部からの刺激を受けると、その振動が著しく増幅される現象を指します。例えば、ブランコを押すタイミングとブランコの揺れが合うと、大きく揺れるのと同じです。
* 気体状態の単一の水分子の回転運動や振動運動には、確かに固有の共振周波数(例えば、回転遷移では22GHzや183GHzなど、はるかに高い周波数)が存在します。
* しかし、電子レンジで加熱される**液体状態の水分子**は、周囲の他の水分子と水素結合などで強く結合しており、自由に共振できるような状態ではありません。
2. **マイクロ波による加熱のメカニズム(誘電損失):**
電子レンジの加熱は、水分子の「**誘電損失(Dielectric Loss)**」を利用したものです。
* 前述の通り、マイクロ波の電場が水分子の極性を回転させようとします。
* しかし、電場の向きが非常に高速(2.45GHz)で反転するため、水分子は周囲の分子との**粘性抵抗(摩擦)**により、電場の変化に完全には追従できません。常に電場と分子の向きにずれが生じ、分子が電場によって無理やり揺さぶられる状態になります。
* この追従しきれない分子が周囲の分子と摩擦し、その**摩擦エネルギーが熱として変換される**のです。これが誘電損失による加熱です。
3. **2.45GHzと誘電損失の最適性:**
液体中の水の誘電損失(熱に変換される効率を示す指標)は、周波数によって変化します。おおよそ数GHzから数十GHzの範囲で比較的高い値を示しますが、特定の鋭い「共振ピーク」があるわけではありません。
2.45GHzは、この**水の誘電損失が十分に高く**、かつ**食品の奥まで浸透できる周波数**として、上記のISMバンドや技術的な実現可能性と合わせて、最も実用的な選択肢として採用されています。
### まとめ
電子レンジは、2.45GHzのマイクロ波を発生させ、食品中の極性を持つ水分子を高速で振動・回転させることで、分子間の摩擦熱(誘電損失)を発生させて加熱します。2.45GHzという周波数は、ISMバンドとしての利用のしやすさ、加熱効率と食品への浸透深度の最適なバランス、そして水分子の誘電損失が高い範囲にあることから選ばれています。水分子の「共振周波数」というよりは、「**電場の高速な反転に対して水分子が追随しきれずに生じる摩擦熱(誘電損失)を最大限に活用できる周波数**」と理解するのがより正確です。
ーーー
おお、ちゃんと正しく答えられた。
ゲーミングノートPC、ASUS TUF Gaming A16(CPUはAMD Ryzen 9 8940HX、メモリ32GB、GPUはNVIDIA GeForce RTX 5060 Laptop GPU、SSD 1TB)を買ってからいろいろローカルLLMで遊んでいる。
今回はgemma3:4b,gemma3:27b, gpt-oss:20b,qwen3:8b,deepseek-r1:8b,llama3.1:8bに対してとてもよく誤解される例、
"電子レンジの動作原理となぜ2.45GHzが使われているかを教えてください。特に水分子の共振周波数とも関連づけて説明してください。"
について聞いてみた。ついでにChatGPTとGoogle Geminiにも聞いてみた。
こんな回答を期待して…
電子レンジは、水分子の固有振動数(共振周波数)を利用しているのではないです。
ChatGPTとGoogle Geminiは完璧な答えだったので、模範解答としてGoogle Geminiのを。
絵もついて完璧。
では各ローカルLLMの結果を表に。eval rateも付けた。遅いやつはVRAM 8GBで乗り切らないやつなので…
ほぼ全滅だ…同じような学習をしているはずなのになんでだろう。
・Sivers semiconductorとDigiKeyがパートナーシップ締結
DigikeyでSivers製品が買える。
・u-bloxが車載Bluetothモジュール発表
・TDKが車載パワーインダクタ発表
・世界の6GHz Wi-Fi普及状況解説
Global 6 GHz Wi-Fi adoption snapshot
その他
ディズニー映画はできるだけ字幕版で観るようにしている。なぜかというと、吹替版は小道具類の英語が日本語に置き換わるが、そのフォントが無粋なゴシック体とかもう興ざめになってしまうので。たぶん今回の一番の重要書類も吹替ではそうなっているんだろうな、とか。
ネタバレなしでツボを。
・ディズニーのロゴからいきなりハモンドオルガン。
・どう考えてもジュディのほうがニックよりたちが悪い鉄砲玉。カーチェイスもあり。
・アメリカの本屋には○○ for Dummiesという黄色と黒の表紙の本が平積みになっている。日本だと「猿でもわかる○○シリーズ」みたいな。
・バーニングマンというイベントがある。
・羊が羊たちの沈黙。
・人参メモの中身は結構リアルだと思った。
・今回も意外な敵がいる
・アザラシとナマケモノがいいキャラ
・蛇なのにかわいく見えるゲイリー
・とても重要な文書がある…がこれは記録があるから原本が無くてもいいのではとか無粋なことを思った。
・これは世界の分断に対するメッセージなんだろうな、とか。
・エンドクレジットで、やはりストーリーに関わる人数が多かった。皆で練りに練ったんだろうとか。
・ディズニーはエンドクレジットで間接的にかかわった人も全部出すのがいいな。
とにかく面白いのでお勧め。
最近のコメント