・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つを与えて残りを計算(改善版)
「キングダム 魂の決戦」をIMAXで観るために109シネマズ大阪エキスポシティまでやってきた。
原作は最初の方だけ読んでいるくらいだが、映画はけっこう観ているので今回も観た。
前作の終わりの復習から入るのは親切。また当時の中国の国をちゃんと解説してくれたり、兵の配置が人形で表されていたりするのもわかりやすい。
でとにかく俳優が豪華で出てくる人出てくる人、え?この人も?とか思えるくらい。日本の著名俳優ほとんどでてるのでは。
https://kingdom-the-movie.jp/chara/
アクションはもちろんすごい。馬のシーンでおおっ!と思い、万極との戦いでの山﨑賢人さんのアクロバティックな動作にさらにおおっと思う。
ただこのくだりは長平の恨みが兵にも全部あって、別ジャンルの映画になっていた。しかし山﨑賢人さん、キングダムもゴールデンカムイも両方主演ですごいな…
要潤さんの戦いは無茶苦茶かっこよかったし、志尊淳さんが今回とてもよかった。
当然のことながら、2時間では描ききれないので不穏な雰囲気でどうなるんだ!というところで終わる。特に蒔田彩珠さんがどうなる?
次回も観なければ…
・Microwave JournalでCadenceのRF設計向けAI紹介
・Samtecが30°傾いた1.85mmコネクタ発表
・Mini-CircuitsのMMICアッテネータ紹介
・SEMCOがAI向けMLCC発表
その他
・IEEE Microwave Magazineで自分のコードを高周波シミュレータに組み込む等
https://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=6668
・DeepSigがAIベースのRF検出OminiSIG 4.0発表
・BroadcomのWi-Fi 8 SoC解説
・GSMAがモバイルネットゼロレポート発行
その他
以前、オートエンコーダは不良品検知のために試してみた。今回はノイズが乗ったフィルタのSパラメータからノイズ除去してみよう。
フィルタのデータはL,Cの値を予測するのにつかったもの。そこに大きいノイズを加える。現実的でないほど大きなものを付け加えた。
これで除去できるか、まずはディープ・オートエンコーダでやってみる。
コードはこんな感じで。
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")
|
帯域内の平均誤差をヒストグラムにしたもの。なるほど改善している。
実際の波形。ぎざぎざがだいぶ改善されている。
とはいうもののもうちょっと改善欲しいので畳み込みオートエンコーダも試してみる。
・KeysightとRCRTechが6Gウェビナー開催
https://pages.rcrtech.com/building-6g-webinar
・Copper Mountain Technologiesの新低価格4ポートVNA
・フジクラの5G Sub6GHz向け漏洩同軸ケーブル
https://www.fujikura.co.jp/news/pressrelease/20260710fujikura_news5no_511.html
・TDKのパワー半導体向けMLCCアプリケーションガイド
その他
Qualcomm retreats from small cells with eye on bigger 6G prize
CursorでGrok4.5が使えるという話を見てインストールしたがまだ使えなかった。
じゃあということでGrok Buildから使う。
いつもと同じプロンプトを入れてプランを立ててもらう。
いい感じだ。実行してもらう。
見てる間にできた。
dB
スミスチャート
位相
TDR
なるほどちゃんとできている。
ただ先日同じことをやったときは、以下のプランを立ててすぐにリミットが来た。結構リミット短いっぽい。
直近7日間と直接または間接に判断できるRF/無線関連ニュース、標準化、部品、分解動画だけを収集し、Ollamaで要約します。
本レポートでは、次世代通信(5G/6G)、ミリ波技術、および防衛・宇宙分野におけるRFコンポーネントの最新動向をまとめています。
--- 【注目のリンク】
キング原作でランニングマンはちょっと前に観たのでこのロングウォークも観に来た。
ポストカードもらった。
とにかく50人がただ歩くだけなのにものすごい緊張感。歩けなくなると銃で頭部を打ち抜かれる。さすがR15+。
トイレとかどうすんだ、と思ったらもちろんトイレ休憩もなし(なので…あの人かわいそう。大人のおむつとかない設定なんだろう)。
どんどん皆ボロボロになっていって、バタバタ死んでいく。おかしくなって自分から死にに行くものも。
歩くのがメインと思いきや会話劇にもなっていてだんだん追い込まれる中でも友情がはぐくまれたり。
しかしランニングマンは結局勝っても殺されていたがロングウォークは一応賞金払っているみたいだし良心的?ただこんなものをテレビで観てよろこんでいるという世界観が恐ろしい。
マークハミルが少佐なのは事前に知っていたのでわかったが、知らなかったら気付かなかっただろう(ずっとサングラスしているし)。ベスト・キッドレジェンズに出てた子がいたのには驚いた。
ラストは、まあこうなるしかないよな、というものだった。
吉野家でドラクエウォークセットをいただいた。
ミニフィギュアはつゆだくスライム。丼の模様が結構細かい。
別のフィギュアも欲しいなとおもったらもう販売終了だそうだ。
・KeysightとIEMNが6Gに向けてSubTHzのRIS評価
・ローデ・シュワルツとチャイナモバイルが生成AIユーザーエクスペリエンステスト
・6G MRSS解説記事
Can the telecom industry pave a smoother path to 6G?
・Sパラメータと分布インピーダンス解説記事
その他
最近のコメント