Pythonのscikit-rfライブラリを使用して、.s2pファイルからMasonの単方向電力利得(U)を計算し、fmaxを推定するためのスクリプト例を紹介します。
この手法は、SIGLENT以外のアンリツやキーサイトなど、メーカーを問わずVNAから出力された標準的なTouchstone形式のファイルに適用可能です。
1. 準備:ライブラリのインストール
事前に以下のライブラリが必要です。
pip install scikit-rf matplotlib numpy
2. Pythonスクリプト例
このスクリプトでは、.s2pファイルを読み込み、各周波数ポイントでの$U$をデシベル単位で計算してプロットします。
import skrf as rf
import matplotlib.pyplot as plt
import numpy as np
# 1. .s2pファイルの読み込み
# 'device_data.s2p' をお手持ちのファイル名に変更してください
network = rf.Network('device_data.s2p')
# 2. Masonの単方向電力利得 (U) の計算
# scikit-rf の内部関数 unilateral_gain を使用します
U_linear = network.unilateral_gain
U_db = 10 * np.log10(U_linear)
# 周波数データの取得 (HzからGHzへ変換)
freq_ghz = network.f / 1e9
# 3. プロット
plt.figure(figsize=(8, 6))
plt.semilogx(freq_ghz, U_db, label="Mason's Unilateral Gain (U)", color='blue', linewidth=2)
# 0dBのライン(fmaxの基準)
plt.axhline(0, color='red', linestyle='--', label='0 dB (fmax point)')
# グラフの整形
plt.title('CNT-TFT RF Performance: Mason\'s Unilateral Gain')
plt.xlabel('Frequency [GHz]')
plt.ylabel('Gain [dB]')
plt.grid(True, which="both", ls="-", alpha=0.5)
plt.legend()
# 4. 簡易的なfmaxの自動計算 (0dB付近のデータを線形補完)
try:
# U=1 (0dB) となる周波数を探す
# 実際には高周波側の -20dB/dec 領域で外挿する必要があります
f_max_idx = np.argmin(np.abs(U_db))
f_max_guess = freq_ghz[f_max_idx]
print(f"Estimated f_max (from data): {f_max_guess:.2f} GHz")
except:
print("f_max is outside the measured frequency range.")
plt.show()
3. 実務的な解説:スクリプトのポイント
network.unilateral_gain
scikit-rfに標準実装されているこの関数は、前述のSパラメータを用いた複雑な等価式を内部で自動計算します。これにより、自分で$K$係数などを計算して合成する手間が省けます。
外挿(Extrapolation)の追加
CNT-TFTの測定帯域が不足している場合、高周波側のデータに対して傾き $-20\text{ dB/dec}$ でフィッティングを行う必要があります。
その場合は、numpyのpolyfitを用いて以下のように追加処理を行います。
# 高周波側の特定の範囲(例:5GHz〜10GHz)でフィッティング
mask = (freq_ghz > 5) & (freq_ghz < 10)
log_f = np.log10(network.f[mask])
U_val = U_db[mask]
# 1次式 (傾き -20dB/dec) でフィッティング
slope, intercept = np.polyfit(log_f, U_val, 1)
# U=0 となる周波数を算出
f_max_extrapolated = 10**(-intercept / slope)
print(f"Extrapolated f_max: {f_max_extrapolated / 1e9:.2f} GHz")
4. 注意点
-
データのクレンジング: CNT-TFTは高インピーダンスであるため、低周波側でノイズが乗りやすく、$U$が負の値(dB計算でエラー)になることがあります。その場合は、
np.where(U_linear > 0, 10*np.log10(U_linear), np.nan)のように処理して無効な値を無視してください。 -
デエンベディング: このスクリプトに入力する
.s2pファイルは、VNA本体またはポスト処理によってパッド成分が除去(De-embedded)されたものを使用してください。パッド成分が含まれていると、得られる fmax はデバイス本来の性能よりも著しく低くなります。
SIGLENTのVNAから生データを吸い出してこのスクリプトに渡す自動化環境について、さらに詳細な制御(PyVISA連携など)が必要であれば、続けて解説可能です。
出典:Google Gemini (Gemini は AI であり、間違えることがあります。)
SMM3000Xシリーズ 高精度ソースメジャーユニット・表示桁数:6½桁(2,100,000カウント) ・SMM3311X(1ch) / SMM3312X(2ch) ・価格:90万円~ |
|
|
・USB VNA |
・Coming soon |
![]() |
SDS8000Aシリーズ オシロスコープ 特長と利点 ・Coming soon |
![]() |
SSG6M80Aシリーズ ・Coming soon
|
![]() |
![]() |
![]() |
SSA6000A Series Signal Analyzer Main Features ・Coming soon
|
![]() |
SNA6000A Series Vector Network Analyzer Key Features
|
お礼、
T&Mコーポレーションは設立5年ですが、おかげさまで業績を着実に伸ばしており、
オフィスを港区芝(最寄り駅浜松町)に移転し、スペースも拡大いたしました。
電子計測器業界の「ゲームチェンジャー」として、高性能/高信頼/低価格/短納期を武器に
T&Mコーポレーションはお客様のご予算を最大限生かす製品群をご提案させていただいております。



















T&M
即納ストア