この記事ではインピーダンスアナライザでタッチストーンファイルを保存し、回路シミュレーションで活用する方法について解説しています。
タッチストーンファイルとは
インピーダンスアナライザは部品のインピーダンス特性を正確に把握するのに最適な計測器です。ただし、測定結果を回路シミュレーションで活用するためには、データを適切な形式、具体的にはタッチストーン形式に変換する必要があります。
タッチストーンファイルの概要
Sパラメータ(Scattering parameters:散乱パラメータ)は高周波回路や部品の電気的な特性を表現するための指標の一つです。高周波領域では、電圧や電流を直接測定することが困難であるため、代わりに電力の反射と透過に着目して回路の振る舞いを評価します。
タッチストーンファイルはこのSパラメータをテキスト形式で記述するための標準的なフォーマットであり、多くの回路シミュレータで読み込むことができます 。タッチストーンファイルは、一般的に以下の構成になっています。
![]() |
コメント行
行頭が感嘆符(!)で始まる行はコメントとして扱われます。測定条件、部品情報、作成日などの付加情報を記述するのに使用されます。
オプション行
行頭がシャープ記号(#)で始まる行はオプション行で、Sパラメータデータの解釈に必要な情報を定義します。この例では、各項目が以下を意味します。
- Hz: 周波数の単位(kHz, MHz, GHz も使用可能)
- S : パラメータの種類がSパラメータであることを示す(他に Y, Z, H, G パラメータも定義可能)
- RI: Sパラメータのデータ形式が実部(Real)と虚部(Imaginary)のペアであることを示す。他に MA(Magnitude-Angle:振幅と角度[度])、DB(dB-Angle:振幅[dB]と角度[度])がある
- R 50: 基準インピーダンスが 50Ωであることを示す
データ行
オプション行以降に、各周波数ポイントにおけるSパラメータのデータが記述されます。RIフォーマットで2ポートデバイス(.s2pファイル)の場合、以下の順でデータが記述されます。
- 周波数 | S11(実) | S11(虚) | S21(実) | S21(虚) | S12(実) | S12(虚) | S22(実) | S22(虚)
タッチストーンファイルの必要性
高周波回路では、部品のわずかな寄生成分やプリント基板の配線パターンが回路全体の特性に大きな影響を与えます。理論的な計算だけではこれらの影響を正確に予測することが難しいため、実際の部品や試作基板の特性を測定し、その結果をシミュレーションにフィードバックすることが不可欠です。そのような中でタッチストーンファイルは、実測特性を統一的かつ定量的に表現する手段となり得ます。さらに異なるメーカーの計測器やシミュレータ間でSパラメータデータを相互に活用することができます。以下に具体的なタッチストーンファイルの活用例を示します。
提供データ活用
多くの電子部品メーカーは、高周波用コンデンサ、インダクタ、トランジスタ、ICといった自社製品のSパラメータをタッチストーンファイル形式で提供しています。設計者はこれらのファイルを利用することで、部品の実際の周波数特性をシミュレーションに正確に反映させることができます。
設計へのフィードバック
試作したプリント基板やモジュールのSパラメータを測定し、タッチストーンファイルとして保存します。この実測データをシミュレーションモデルと比較・分析することで、設計段階との差異を明らかにし、より効果的な設計改善へと繋げることができます。
モジュール単位での評価
大規模なシステムを設計する際、複数の機能ブロック(モジュール)に分割して個別に設計・評価することが一般的です。各モジュールのSパラメータを測定して保存しておけば、それらをシミュレータ上で組み合わせることで、システム全体の特性を効率的に予測・評価できます。
タッチストーンファイルへの変換・保存方法
TechMize製インピーダンスアナライザTH2851-130は直接的にタッチストーンファイルを保存することができません。そのため測定結果(.txt形式)をタッチストーン化するためには、1ポートのSパラメータデータ(.s1p形式)へ変換する必要があります。
変換手順
インピーダンスアナライザによる測定結果をタッチストーン化するには以下の手順で進めます。
- 複素インピーダンスの測定(.txt形式)
- 複素インピーダンスを反射係数S11に変換
- タッチストーン化(.s1p形式)
① 複素インピーダンスの測定
複素インピーダンスはインピーダンスアナライザによるスイープ測定で取得します。周波数範囲はDUTに応じて設定します。フォーマットは相互に変換可能であるため特に指定はありませんが|Z|-θz(deg)、R-Xあたりが一般的です。
② 複素インピーダンスを反射係数S11に変換
インピーダンスアナライザでは1つの信号源から出力された電圧・電流を測定することでインピーダンスを算出しています。そのためタッチストーン化するにあたっては1ポートのSパラメータとなります。
1ポートデバイスの場合、タッチストーンファイルに記述するSパラメータは反射係数 S11のみです。この 反射係数S11 はインピーダンスアナライザで測定されたインピーダンス ZL と測定系の基準インピーダンス Z0 から計算されます。
![]() |
高周波回路の一般的な基準インピーダンス Z0は50Ωであるため、Z0のR-X形式における複素インピーダンスは50+j0Ωです。この反射係数の算出式は複素数として計算する必要があることに注意してください。そして測定結果に含まれる全ての周波数ポイントに対して算出式を適用します。
③ タッチストーン化(.s1p形式)
反射係数S11が計算できれば、あとはタッチストーンフォーマットに基づいてコメント行やオプション行を追記します。またデータ行については1ポートデバイスとなるため、R-X形式では周波数、S11(実数部)、S11(虚数部)の順で記述します。
![]() |
各値はスペース、またはタブで区切ります。数値の精度はインピーダンスアナライザの測定精度に見合う有効桁数を選択します。
タッチストーンファイル保存方法
ここまでタッチストーンファイルへの変換手順を見てきましたが、測定データごとに手作業で計算するのは現実的ではありません。そのためここではSCPIコマンドを利用した変換プログラムを作成して、タッチストーンファイルの保存を実現します。
変換プログラム
*************************************************************************************
"""
TH2851 インピーダンスアナライザ → Touchstone (.s1p) エクスポータ
---------------------------------------------------------------
・計測器の IP アドレス、保存先フォルダ、基準インピーダンス Z0、
ファイル名を実行時に指定可能。
・pyvisa-py だけでも、NI-VISA を入れても動作する。
・取得データ:周波数軸(Hz)とインピーダンス (R+jX)
└ Z → S11 (= (Z−Z0)/(Z+Z0)) に変換して .s1p に保存。
---------------------------------------------------------------
実行例:
python th2851_exporter.py -i 192.168.1.26 -o sweep.s1p
"""
from pathlib import Path
import argparse
import numpy as np
import pyvisa
# ────────────────────────────────────────────────────
# 1. コマンドライン引数
# ────────────────────────────────────────────────────
parser = argparse.ArgumentParser(
description="TH2851 のスイープデータを Touchstone (.s1p) で保存する")
parser.add_argument("-i", "--ip",
default="192.168.1.26",
help="計測器の IP アドレス (デフォルト: 192.168.1.1)")
parser.add_argument("-p", "--port",
default=5025, type=int,
help="ソケットポート番号 (通常 5025)")
parser.add_argument("-d", "--dir",
default=".",
help="保存先ディレクトリ (既定はカレント)")
parser.add_argument("-o", "--outfile",
default="th2851_trace.s1p",
help="出力ファイル名 (.s1p)")
parser.add_argument("-z", "--z0",
default=50.0, type=float,
help="基準インピーダンス Z0 [Ω] (デフォルト 50)")
parser.add_argument("--backend",
default="@py", choices=["@py", ""],
help="@py なら pyvisa-py を使用、空文字なら NI-VISA を使用")
args = parser.parse_args()
# 保存先パス
out_dir = Path(args.dir).expanduser().resolve()
out_dir.mkdir(parents=True, exist_ok=True)
out_path = out_dir / args.outfile
print(f"[INFO] 保存先: {out_path}")
print(f"[INFO] 計測器: {args.ip}:{args.port} (Z0 = {args.z0} Ω)")
# ────────────────────────────────────────────────────
# 2. VISA 接続
# ────────────────────────────────────────────────────
visa_rm = pyvisa.ResourceManager(args.backend)
visa_addr = f"TCPIP0::{args.ip}::{args.port}::SOCKET"
inst = visa_rm.open_resource(
visa_addr,
write_termination="\n",
read_termination="\n",
timeout=10_000)
# 前面パネルをロックして安全運転
inst.write(":SYST:REM")
inst.write(":SYST:KLOC:KBD ON;:SYST:KLOC:MOUS ON")
# ────────────────────────────────────────────────────
# 3. データ取得
# ────────────────────────────────────────────────────
freq = np.fromstring(inst.query(":CALC1:DATA:XAX?"), sep=',')
rj = np.fromstring(inst.query(":CALC1:DATA:FDAT?"), sep=',')
Z = rj[::2] + 1j * rj[1::2] # 複素インピーダンス R+jX
S11 = (Z - args.z0) / (Z + args.z0) # 反射係数に変換
# ────────────────────────────────────────────────────
# 4. Touchstone (.s1p) ファイル書き込み
# ────────────────────────────────────────────────────
with open(out_path, "w", encoding="utf-8") as f:
f.write("! Exported from TH2851 by th2851_exporter.py\n")
f.write(f"# Hz S RI R {args.z0}\n")
for f_hz, s in zip(freq, S11):
f.write(f"{f_hz:.9e} {s.real:.9e} {s.imag:.9e}\n")
print("[DONE] Touchstone ファイルを出力しました。")
# ────────────────────────────────────────────────────
# 5. パネルロック解除 & 終了処理
# ────────────────────────────────────────────────────
inst.write(":SYST:KLOC:KBD OFF;:SYST:KLOC:MOUS OFF")
inst.close()
visa_rm.close()
*************************************************************************************
プログラムの概要
TH2851 インピーダンスアナライザ から LAN 経由でスイープ データ (周波数 ― インピーダンス) を取得し、1 ポート Touchstone (.s1p) ファイルに 変換・保存するシンプルな CLI ツールです。
特長
- IP アドレス / ポート / Z₀ / 保存先 / ファイル名 をコマンドラインで柔軟に指定
- pyvisa‑py だけでも NI‑VISA でも動作
- 前面パネルを自動的にロック → 測定後解除
- 複素インピーダンス → S11 へリアルタイム変換して保存
動作環境
パッケージ | 最低バージョン | 役割 |
Python | 3.8 | 実行環境 |
numpy | 1.x | 数値計算 |
pyvisa | 1.x | VISA ラッパ |
pyvisa‑py または NI‑VISA | 最新 | VISA バックエンド |
# pyvisa‑py バックエンドで動かす場合のセットアップ例
pip install numpy pyvisa pyvisa-py
使い方
python th2851_exporter.py \
-a 192.168.1.1 \
-P 5025 \
-z 50 \
-d ./measurement \
-o sweep_1M_10M.s1p
オプション | 説明 | 既定値 |
-a, --address | TH2851 の IP アドレス | 192.168.1.1 |
-P, --port | TCP ポート (SOCKET) | 5025 |
-z, --z0 | 基準インピーダンス [Ω] | 50 |
-d, --dir | 保存先ディレクトリ | カレントディレクトリ |
-o, --outfile | 出力ファイル名 (.s1p) | th2851_trace.s1p |
--backend | ResourceManager バックエンド (@py または空文字) | @py |
トラブルシューティング
- Wrapper not found: pyvisa_py
pyvisa-py がインストールされていません。次のいずれかで対処してください。
- pip install pyvisa-py で追加する。
- NI‑VISA をインストールし、--backend '' を指定して実行する。
- 前面パネルがロックされたままになる
スクリプトが途中で停止するとロック解除コマンドが送信されません。TH2851 の Help キーを短押しすれば手動で解除できます。
タッチストーンファイル活用方法
タッチストーンファイルは多くの高周波回路シミュレータで利用可能です。例えば無料の回路シミュレータであるuSimmics(旧:QucsStudio)では、「S parameter file」コンポーネントを使用して.s1pファイルを回路図に配置し、シミュレーションに組み込むことができます。これにより、実測に基づいた部品や回路の特性をシミュレーションモデルとして活用でき、より現実に近い高精度な回路設計・解析が期待できます
等価回路モデルの最適化
多くの受動部品は高周波で理想的な特性から外れ、寄生成分の影響が顕著になります。そこで、これらの寄生成分を加味した等価回路モデルを作成することで、部品の周波数特性をより正確に再現し、広帯域で回路の挙動を解析することが可能になります。
ここでは10uHのコイルのインピーダンス特性をTH2851で測定し、.s1pファイルとして取り込んでいます。右側の回路はインピーダンスアナライザの等価回路機能をもとに作成したものです。
等価回路機能をそのまま使用しただけでは10kHz以下の周波数帯で差が生じており、モデルの精度としては不十分であることが確認できます。そこで回路シミュレータの最適化機能(Optimization)を使用して、実測データにフィッティングするように等価回路の定数をチューニングしてみます。チューニング方法の詳細は割愛しますが、適切な条件を設定することで実測と等価回路のインピーダンス特性がほぼ一致していることが確認できます。
部品のばらつき評価
実際の電子部品には製造プロセスに起因する特性のばらつきが必ず存在します。例えば、抵抗値や容量値には許容差(例:±5%、±10%)が規定されています。回路設計においては、これらの部品のばらつきが回路全体の性能にどのような影響を与えるかを評価することが重要です。回路シミュレータには部品のばらつきを統計的に評価するモンテカルロシミュレーション機能が実装されおり、タッチストーンファイルによる実測データと組み合わせることで、より現実的なばらつき評価が可能です。
ここでは先の等価回路の各定数に対して許容値を設定し、100回シミュレーションを実行して特性のばらつきと実測の関係性を検証してみます。許容差については寄生成分にあたるR1、R2、C1が±5%、コイルの主成分にあたるL1が±20%としています。この条件でモンテカルロシミュレーションを実行すると、各定数のばらつきによってインピーダンス特性が変動している様子が確認できます。このように机上の計算であっても製造プロセスの影響を考慮できるのも実測データをタッチストーン化することのメリットです。
なおモンテカルロシミュレーションは本来、設計値のばらつきに対して実測値の妥当性を評価するためのものですが、今回のケースのように実測値から等価回路のばらつき範囲を推定するために活用するのもアイデアの1つとして有効です。