・Pythonの高周波用ライブラリ scikit-rfを使う
・Visual C#で数値計算ライブラリ Math.NET numericsを使う(Visual Basic版もあり)
・高周波エンジニアのためのAI・機械学習入門
・JavaScriptの数値計算ライブラリmath.jsを使う
・カシオの高精度計算サイトに投稿した自作式一覧
おまけ
円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算(改善版)
・Pythonの高周波用ライブラリ scikit-rfを使う
・Visual C#で数値計算ライブラリ Math.NET numericsを使う(Visual Basic版もあり)
・高周波エンジニアのためのAI・機械学習入門
・JavaScriptの数値計算ライブラリmath.jsを使う
・カシオの高精度計算サイトに投稿した自作式一覧
おまけ
円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算(改善版)
開館90周年記念特別展 全力!名宝物語 ―大阪市美とたどる美のエピソードを観に大阪市立美術館までやってきた。
写真は多くがOKでしたが、じっくり観たいので特に撮らず。バラエティーに富んだ展示の数々がよかったし、大部分に解説がついていて、それがわかりやすくて面白い(タヌキを天王寺公園で見た、というのに笑う)。特に妃出塞図がとてもよかった。豊臣秀吉の絵もあった。
当初は寄贈してもらったものが多かったらしいですが、お金持ちは規模が違うなと思ったり。特に住友家がすごい。
超絶技巧の根付などもすごいが(欲しい…)一番びっくりしたのは硯箱の蓋を開けると水車が水銀で回る仕掛。何をどうやったらこんなことを思いつくんだとか。
DNN, CNNと来て今回はRNNの一種、LSTM。
コードはこんな感じで。
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
from jax import config
config.update("jax_enable_x64", False)
plt.rcParams['font.family'] = 'Noto Sans CJK JP'
data_label = np.load("21stagefilter.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)
ord = 21
hidden_dim = 200
inputs = keras.Input(shape=(200, 5))
x = keras.layers.LSTM(100, return_sequences=True)(inputs)
x = keras.layers.LSTM(100)(x)
outputs = keras.layers.Dense(ord * 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))
|
結果はこちら。
まずまずだがCNNの5倍くらい時間かかる上にCNNのほうが精度がいい。この例ではあまりよくなさそう。
次はTransformerをやってみよう。
今回からGemini 3.1 ProからGemini 3.5 Flashに変更した。
本ハイレベル・ブリーフィングでは、2026年5月31日から2026年6月7日の間に収集された、最も重要なRF技術開発およびインテリジェンスを網羅しています。
3GPP リリース20のスコープ決定およびリリース21(6G)のタイムライン確定 2026年6月4日現在の3GPP総会において、無線エコシステムはリリース20の初期スコープに正式に合意しました。本リリースは、決定的な「5G-Advanced」の進化版として位置付けられており、AIネイティブな無線インターフェースおよび通信・センシング一体型技術(ISAC)に焦点を当てています。極めて重要な点として、初の6G標準仕様が含まれるリリース21のタイムラインが今週最終決定され、2030年の6G商用化を支えるために2028年末の「フリーズ(仕様凍結)」を目標とすることが確認されました。
EUのSNS JUが6G研究予算を調整 2026年6月5日、スマートネットワーク・サービス共同事業(SNS JU)は、同期化された6G研究開発イノベーション・ロードマップを発表しました。2021年から2027年の期間で9億ユーロの予算を投じる同グループは、6G地上無線アクセスのテストベッドとして機能する、高度な5Gネットワークの展開に関する新たな業界調整結果を報告しました。
Apple Watch Series 11 5G:MediaTekへの転換 TechInsightsが2026年6月2日に公開した詳細な分解レポートにより、AppleのRFサプライチェーンにおける劇的な転換が明らかになりました。Apple Watch Series 11 5Gにおいて、Appleのウェアラブルデバイスとしては初めてMediaTek製シリコンが採用されていることが確認されました。
偽造デバイスのフォレンジック:深センの「Ultra 3」および「AirPods Pro 3」 2026年6月6日、iFixitは現在深センの市場に溢れているApple製品の「偽造品」に関する分解レポートを公開しました。非正規品ではあるものの、本レポートは低価格クローンデバイスに関する重要なRFインテリジェンスを提供しています。
MediaTek Filogic 8800:Wi-Fi 8時代の幕開け Computex 2026(6月2日~6日)において、MediaTekはFilogic 8800チップセットを発表し、コネクティビティ分野を席巻しました。これは後方互換性を持つWi-Fi 8ソリューションであり、システムスループットを200%向上させ、前世代のWi-Fi 7よりも50%高速なファイルダウンロードを可能にするよう設計されています。
BroadcomがWi-Fi 8と50G PONを統合したプラットフォームを発表 2026年6月3日、Broadcomはレジデンシャルゲートウェイ向けに、50G PON(受動光ネットワーク)と統合された第2世代Wi-Fi 8チップを発表しました。このハードウェアにより、家庭内ネットワークのファイバー引き込み地点から直接10Gbps以上のワイヤレス速度が可能になります。
Qualcomm X105 5G Modem-RF(リリース19対応) 最新の業界レポート(6月4日)は、Qualcomm X105 5Gモデムが、2027年のフラッグシップデザインに初めて統合されることを強調しています。
Synaptics:IoT向けAIネイティブWi-Fi 7 2026年6月1日、Embedded Worldの発表に合わせて、Synapticsは低電力IoTクライアント向けに特化した初のトライバンドWi-Fi 7チップを発表しました。
MaxLinearとGCTによる5G FWAパートナーシップ Computex(2026年6月2日)で発表された通り、MaxLinearとGCT Semiconductorは次世代5G固定無線アクセス(FWA)ゲートウェイの開発で提携しました。このソリューションはミリ波(mmWave)とSub-6 GHzのコンバージェンス(収束)を利用し、通信環境の不十分な地方において「ファイバー並み」の速度を提供します。
映画「マスターズ・オブ・ユニバース 」をTOHOシネマズで観てきた。
アクション中心かと思いきや、とにかく全編笑わせに来る。お約束を知っているうえでそれを破る笑いをどんどん突っ込む。
しかもマテルの古いフィギュアが元なので全部のキャラデザインがおかしい(誉め言葉)。なんだメカネックって…
とにかく最初から自分の生い立ちを説明して女性のドン引きされるアダム、剣を探すがなんでこの剣が本物なんだ!と思い切り心の中で突っ込む(そこにライディーンやゲッターロボ、グレンダイザーやマジンガーもいたなあ。フィギュアだけど)。
人事部所属のアダムなので、敵とも対話しようとしたり、セミナーひらいたりと全くマッチョじゃない(が体はマッチョ)。
あと生身の人間は殺さないような感じだったので、子供が見るのに配慮したのかな(その分、人間じゃない人は遠慮なく殺す)。
マッチョと言えばジムで会う人どこかで…と思ったらドルフ・ラングレンだった。
アクションもすごいのだが、なんか微妙に背景が浮いた感じにしているのは古い映画の感じを出したかったのかな。
そして当然、2作目を作る気満々でポストクレジットが組まれている。
エンドクレジットでギターがクイーンのブライアン・メイであることを知る。なるほどー、確かに音がそうだった。
前回はディープラーニング(DNN)で予測して42個のパラメータの平均誤差が1%前後と結構よかった。
今回は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
from jax import config
config.update("jax_enable_x64", False)
plt.rcParams['font.family'] = 'Noto Sans CJK JP'
data_label = np.load("21stagefilter.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)
scaler_y = StandardScaler()
y_train_f = scaler_y.fit_transform(y_train)
ord = 21
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(ord * 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))
|
結果はこちら。
全パラメータで平均誤差1%を切っている。これは結構実用的では。次はRNN(LSTM)やってみる。
映画「ミステリー・アリーナ」を観ようと思ったが、そういえば原作読んでなかったな、とまずこっちから読む。
あらすじは「連続殺人に挑むのはミステリー読みのプロたち――。15ある解決案のどれが真相か? 嵐で孤立した館で起きた殺人事件! 国民的娯楽番組「推理闘技場(ミステリー・アリーナ)」に出演したミステリー読みのプロたちが、早い者勝ちで謎解きに挑む。誰もが怪しく思える伏線に満ちた難題の答えはなんと15通り! そして番組の裏でも不穏な動きが……。 」というもの。とにかくよくこんなこと思いつくな、という文章と文字、というか名前だけで成り立たせて15通りの推理を出していてすごい。
で映画。
こちらのあらすじは「人気司会者の樺山桃太郎が盛り上げるド派手な生放送推理クイズ番組「ミステリー・アリーナ」。ある難問に正解者が連続して現れず、賞金は100億円までキャリーオーバーされていた。今回出題される問題は「嵐の中、孤立した洋館で起きた殺人事件」。この問題に、閃きの天才少女・一子、直感の勝負師・ギャンブル、伝説の初代王者・レジェンド、データ分析のシン人類・仏滅、理論の先駆者・エジソン、博識のミステリー女王・あのミスという、激戦の予選会を勝ち上がった6人の解答者が挑むことになる。6人はそれぞれの推理力を生かし、複雑に絡み合ったミステリーの謎を解き明かしていく。しかし、この番組はただ賞金を懸けて争うだけではなく、推理を外した出場者には恐ろしいリスクが待ち受けていた。 」
というもの。劇中殺人事件の設定はあるデバイスを使うことで原作をかなり拾っていて面白い。こっちを映像化で変えると思っていたら変えたのは回答者側でした。大幅に変更で、アクションとサスペンス要素も追加。それを追加したことで原作からもう一段話を盛り上げていた。
唐沢寿明さんの樺山桃太郎はかなりはまり役と思った。あと芦田愛菜さんもさすがの演技だが、登場人物の中で一番背が低いのにちょっと驚いたり。
おそらく原作読んでなくても楽しめる作品で面白かった。
・Qualcommが6Gウェビナー開催
https://pages.rcrtech.com/building-the-6g-standard-key-developments-to-know
・Next G Allianceが5G ISACイニシアティブ立ち上げ
・Keysightが新RFシグナルアナライザ発表
・アンリツが5G LTM評価環境構築
その他
先日は21次のチェビシェフ特性のバンドパスフィルタのデータをモンテカルロシミュレーションで10000個作った。
ではまず普通のディープラーニングで42パラメータを予測してみよう。
コードはこんな感じで。前回、LayerNormalizationを使うとよかったので今回も入れている。
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
from jax import config
config.update("jax_enable_x64", False)
plt.rcParams['font.family'] = 'Noto Sans CJK JP'
data_label = np.load("21stagefilter.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)
ord = 21
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()(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(ord * 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))
|
結果をグラフにするコードはこんな感じで。
row, column = 7, 6
legend = []
for i in range(ord):
legend.append("L" + str(i+1))
legend.append("C" + str(i+1))
fig, ax = plt.subplots(row, column, figsize=(15,16))
plt.rcParams["font.size"] = 8
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" 平均誤差{error.mean(axis=0)[count]:.2f}%"])
fig.tight_layout()
plt.show()
|
図示してみる。
これだけパラメータが増えても1%前後の平均誤差でなかなかよさそう。次はCNNをやってみよう。
・BroadcomがブロードバンドエッジAIポートフォリオ発表
・Marvellが102.4Tbpsスイッチ発表
・Mini-CircuitsがLTCC・MMICフィルタのカスケード接続解説
・ASUSのミニPCにSnapdragon X2 Elite
その他
・QualcommがSnapdragon C発表&6G解説記事
・アンリツが140Gbaudバイアスティ内蔵 広帯域リニアアンプ発売
・SONY Xperia 10 VII分解動画
https://www.youtube.com/watch?v=9Dorb8_owv8
その他
以前もLCバンドパスフィルタのLとCの値を予測する、というのをやっていたがその時は3次のフィルタ(LとCのパラメータ6個)だったのであまりありがたみがなかった。機械学習使わなくても何とでもなりそうなので。
もっと次数を増やして、他の方法では時間がかかりそうなものを機械学習でやったほうがよさそう。ということで今回は21次のチェビシェフ特性のバンドパスフィルタ(パラメータは42個。生命、宇宙、そして万物についての究極の疑問の答え=42なので)をやってみよう。
今回は前準備としてモンテカルロシミュレーションで中心周波数と帯域幅を振ったバンドパスフィルタのSパラメータデータを10000個作る。
コードはこんな感じで。
import numpy as np
import matplotlib.pyplot as plt
import skrf as rf
import filtersynth 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):
"""
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なので規格化はせず
周波数のみ最大周波数で割っている。
"""
LC_elements = fs.LC_BPF(n, f0, df)
label = LC_elements.reshape(n*2+4)[2:2*n+2].reshape(1, n*2)
bpf_cir, bpf_network = fs.BPF_synthesis(n, f0, df, fstart, fstop, points)
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
odr = 21 #オーダー21のフィルタを作る。オーダーが大きいほど合成に使うLCの数が増えるので、予測する量も増える。
np.random.seed(1)
data = np.empty((0, points, 5))
label = np.empty((0, odr*2))
for i in range(N):
f0 = f0min + (f0max - f0min) * np.random.rand()
df = (dfrmin + (dfrmax - dfrmin) * np.random.rand()) * f0
x, y = filter_data(odr, f0, df, fstart, fstop, points)
data = np.vstack((data, x))
label = np.vstack((label, y))
#予測する量(L,C)が小さすぎるのでnH, pF単位にする。
for j in range(odr*2):
label[:, j] *= 1.0E9 if j % 2 == 0 else 1.0E12
#保存
np.savez_compressed("21stagefilter.npz", data=data, label=label)
|
できたデータの最初のほうをプロットしたもの。
次数が高いのでめちゃくちゃ減衰が急だな。ではこれを使って機械学習をしていく(続く)。
本エグゼクティブ・サマリーは、2026年5月24日から2026年5月31日までの期間における無線周波数(RF)技術の重要な進展を概説したものである。
最近のコメント