Skip to content
CodfishYaoPublic

About

StoZ 是一个面向射频和微波工程的小工具,用于把单端口或二端口 S 参数换算为阻抗。 程序提供中文图形界面,可以选择参考阻抗、查看指定频率下的阻抗,并把结果写成 CST 风格的 MDF 文件。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

StoZ - S参数转阻抗工具

简体中文 | English

StoZ 是一个面向射频和微波工程的小工具,用于把单端口或二端口 S 参数换算为阻抗。 程序提供中文图形界面,可以选择参考阻抗、查看指定频率下的阻抗,并把结果写成 CST 风格的 MDF 文件。

StoZ 界面

功能

  • 单端口 S 参数换算为阻抗:Z = Z0 * (1 + S) / (1 - S)。
  • 二端口 S 参数换算为输入阻抗和输出阻抗。
  • 二端口对端终端支持匹配、开路、短路和自定义阻抗。
  • Touchstone 文件的参考阻抗与界面 Z0 不一致时,自动重新归一化 S 参数。
  • 支持 CSV、Excel(.xlsx / .xlsm)和 Touchstone V1.0(.sp / .s1p / .s2p)。
  • 支持从剪贴板读取文本并自动识别文件路径、Touchstone 文本或 CSV/TSV 表格。
  • 支持把 S 参数文件直接拖入主窗口。
  • 支持指定频率查询;非数据点自动线性插值,超出范围时使用最近端点。
  • 支持 2D/3D 阻抗绘图:2D 分别绘制实部和虚部,3D 使用频率、实部、虚部坐标轴。
  • 2D 支持点标记、横向 Marker、纵向 Marker;3D 支持单击散点添加点标记。
  • 自动给出串联、并联、共轭串联、共轭并联等效电路。
  • 频率、阻抗、电容、电感自动选择工程单位。
  • 输出文件名固定为 Output-yyyy-MM-dd_HH-mm-ss.mdf,保存在同级 Outputs 文件夹。
  • 关于界面包含作者、版本、更新日期、版本历史、免责声明和面向 EXE 用户的帮助手册。
  • 用户手册提供简体中文和英文两版,内容只面向 EXE 用户,不含源码运行说明。
  • EXE 内嵌 Windows 版本资源,右键“属性”可以看到文件说明、文件版本、产品名称和版权信息。
  • 绘图窗口统一使用原生控件,支持显示/隐藏单条曲线、框选放大、拖动平移和保存图片。
  • Smith 圆图页按 50 Ω 归一化绘制输入/输出阻抗轨迹,支持曲线显隐。
  • 2D、Smith、3D 三个绘图视图都支持鼠标悬停,显示最近曲线点的频率和复阻抗; 3D 与 Smith 显示完整复数。
  • 横向/纵向 Marker 会显示与可见曲线交点的复阻抗;点标记和交点标签均可用鼠标 拖动,拖动只移动标签,不改变 Marker 或数据。
  • 每次启动在程序同级 log 目录生成运行日志,记录全部用户操作、换算和异常堆栈。
  • 用户手册和关于界面使用 Markdown 渲染,支持标题、列表、代码块和表格。
  • 转换完成后弹出提示窗口,显示数据点和输出文件路径。
  • 支持简体中文、繁体中文和英文界面,可在“语言”菜单中切换并保存设置。
  • 附带 PyInstaller 打包脚本、GitHub Actions 工作流、示例文件和单元测试。

绘图示例

2D 视图把阻抗实部和虚部分开绘制,支持点标记、横向 Marker 和纵向 Marker, 并可通过勾选框显示或隐藏单条曲线;缩放、平移和保存使用原生按钮。Smith 圆图 按 50 Ω 归一化显示输入/输出阻抗的反射系数轨迹;三个视图悬停均可查看对应 频率的复阻抗。

2D 阻抗曲线

Smith 圆图

快速开始

从源码运行

pip install -r requirements.txt
python StoZ.py

环境要求:Windows 10/11,Python 3.10 及以上,推荐 Python 3.12。Windows 官方 Python 自带 tkinter,不需要额外安装。

运行 EXE

从 Releases 下载 StoZ-v1.5.0-win64.zip,解压到普通用户目录后双击 StoZ.exe。 不要解压到项目源码目录或受限制的工作区目录。 程序不需要安装 Python,也不会联网。

如果 Windows 提示“未知发布者”,点击“更多信息”,再选择“仍要运行”。

输入文件

CSV 和 Excel

第一列为频率,默认按 Hz 解析。表头可以写明 Frequency(GHz) 之类的单位,也可以 在界面中手动选择表格频率单位。

单端口 3 列:

频率, S11 实部, S11 虚部

二端口 9 列,顺序为 S11、S12、S21、S22:

频率, S11 实部, S11 虚部, S12 实部, S12 虚部, S21 实部, S21 虚部, S22 实部, S22 虚部

示例:

Frequency(Hz),S11_real,S11_imag,S12_real,S12_imag,S21_real,S21_imag,S22_real,S22_imag
1000000000,0.1,0.01,0.3,0.03,0.2,0.02,0.4,0.04

Touchstone V1.0

支持 .sp、.s1p、.s2p,选项行示例:

# Hz S RI R 50

二端口数据遵循标准顺序 S11、S21、S12、S22,与 CSV/Excel 的 S11、S12、S21、S22 顺序不同。程序会按文件类型分别处理。

从剪贴板读取

点击输入文件栏右侧的“读取剪贴板”,或使用快捷键 Ctrl+Shift+V。程序会自动识别:

  • 剪贴板中的文件路径;
  • Touchstone 文本;
  • 从 Excel 复制的 TSV 文本;
  • 逗号、分号或空白分隔的表格文本。

表格默认按 Hz 解析,也可以在界面中切换表格频率单位。识别失败时会在弹窗和运行 日志中给出原因。

拖放

可以直接从资源管理器把 S 参数文件拖入主窗口。一次拖入多个文件时,程序会载入 第一个受支持的文件。

绘图

完成转换后点击“绘制阻抗曲线”打开自动居中的绘图窗口。窗口控件全部是原生 风格:2D 视图把实部和虚部分别绘制成随频率变化的曲线,模式下拉框提供浏览 (滚轮缩放)、框选放大、拖动平移、标点、横向 Marker 和纵向 Marker;勾选框 可以显示或隐藏某条曲线;底部按钮支持放大、缩小、重置视图和保存图片。3D 视图 使用频率、实部和虚部三个坐标轴,拖动旋转、滚轮缩放,单击散点即可添加点标记。 所有绘图操作都会写入运行日志。

语言

通过“语言”菜单切换简体中文、繁体中文和英文。切换后主界面会立即重建,并保留 已加载的数据和换算结果;语言设置会保存到用户配置目录。

更多格式细节见 用户手册 和 示例说明。

计算公式

单端口

Z = Z0 * (1 + S) / (1 - S)

二端口

设对端终端反射系数为 ΓL:

Γin  = S11 + S12 * S21 * ΓL / (1 - S22 * ΓL)
Zin  = Z0 * (1 + Γin) / (1 - Γin)

Γout = S22 + S12 * S21 * ΓS / (1 - S11 * ΓS)
Zout = Z0 * (1 + Γout) / (1 - Γout)

默认 ΓL = ΓS = 0,即对端端口匹配参考阻抗 Z0。开路时 Γ = +1,短路时 Γ = -1。

等效电路

在查询频率 f 下,ω = 2πf:

  • 串联等效:Rs = Re(Z),Xs = Im(Z);Xs > 0 时 Ls = Xs / ω, Xs < 0 时 Cs = -1 / (ω Xs)。
  • 并联等效:Rp = |Z|² / Re(Z),Xp = |Z|² / Im(Z);再按 Xp 的正负换算 为并联电感或并联电容。
  • 共轭等效:Z* = R - jX,电阻不变,电抗符号翻转。
  • 品质因数:Q = |Xs| / Rs = Rp / |Xp|。

输出文件

转换完成后,程序会弹出完成提示,并自动把结果写入程序同级的 Outputs 文件夹:

Output-2026-10-22_22-35-06.mdf

单端口 MDF:

BEGIN Impedance

% Frequency(real) Impedance1(complex)
1000000000.0 80.9867961185 -234.729413334

END

二端口 MDF:

BEGIN Impedance

% Frequency(real) Impedance1(complex) Impedance2(complex)
1000000000.0 61.09739538 1.2344155 115.92920354 11.0619469

END

打包 EXE

pip install -r requirements-dev.txt
python build_exe.py

也可以双击 build_exe.bat。脚本会先运行单元测试,再调用 PyInstaller 生成单文件 无控制台 EXE,并把 README、用户手册、许可证和示例文件复制到发布目录,最后生成 zip 压缩包。

脚本不会把 EXE 直接生成在项目工作区,而是在当前用户的本地目录 %LOCALAPPDATA%\StoZ-build 中完成 PyInstaller 构建、发布目录组装和 zip 打包。 这样可以避免项目工作区的低完整性标签、未知 SID 或 Zone.Identifier 被 EXE 继承。 发布文件会被设置为当前用户所有、Medium 完整性级别,并预创建可写的 Outputs 和 log 目录。生成的 EXE 内嵌 Windows 版本资源(文件说明、文件版本、产品名称、 公司、版权等),打包脚本会在字段缺失时立即报错。

生成结果:

%LOCALAPPDATA%\StoZ-build\StoZ-v1.5.0-win64\
%LOCALAPPDATA%\StoZ-build\StoZ-v1.5.0-win64.zip
dist\StoZ-v1.5.0-win64.zip
dist\StoZ-v1.5.0-win64\     (指向本地发布目录的目录联接)

请从本地发布目录或 dist 中的目录联接运行 EXE;dist 不再生成直接可执行的 EXE 文件。GitHub Actions 仍然上传 dist/*.zip。

打包脚本支持跳过测试和跳过压缩:

python build_exe.py --skip-tests
python build_exe.py --no-zip

测试

python -m unittest discover -s tests -v

测试覆盖单位解析、单端口/二端口换算、参考阻抗重新归一化、串并联和共轭等效电路、 频率插值、CSV/Excel/Touchstone 读取、Markdown 解析、剪贴板识别、多语言翻译以及 MDF 写出。

项目结构

StoZ/
├─ StoZ.py                  程序入口
├─ stoz_app/
│  ├─ gui.py                图形界面
│  ├─ readers.py            CSV/Excel/Touchstone 读取
│  ├─ mathcore.py           S 参数到阻抗换算、插值、等效电路
│  ├─ units.py              工程单位解析与格式化
│  ├─ mdf.py                MDF 输出
│  ├─ models.py             数据结构
│  ├─ about.py              关于界面、免责声明、版本历史和使用手册窗口
│  ├─ markdown_view.py      Markdown 渲染组件
│  ├─ manual.py             多语言帮助文本
│  ├─ plot_window.py        2D/3D 阻抗绘图窗口
│  ├─ i18n.py               多语言词典
│  ├─ config.py             用户配置读写
│  ├─ dnd.py                Windows 文件拖放
│  ├─ paths.py              路径处理
│  ├─ info.py               作者、版本、更新日期
│  └─ errors.py             自定义异常
├─ tests/                   单元测试
├─ example/                 示例输入文件和 MDF 示例
├─ docs/                    用户手册和截图
├─ assets/                  程序图标
├─ build_exe.py             打包脚本
├─ build_exe.bat            打包批处理
├─ requirements.txt         运行依赖
├─ requirements-dev.txt     开发和打包依赖
├─ CHANGELOG.md             更新记录
├─ CHANGELOG.en.md          English changelog
├─ README.en.md             English README
├─ LICENSE                  MIT 许可证
└─ README.md

文档

  • 用户手册:完整操作说明、公式、输入格式和故障排除。
  • English User Manual:英文操作说明和故障排除。
  • 示例说明:示例文件列表和列顺序说明。
  • 更新记录:版本变更。
  • 打包脚本:仓库根目录的 build_exe.py 和 build_exe.bat。

说明

  • 程序只支持 S 参数,不直接支持 Y、Z、H、G 参数。
  • Excel 读取活动工作表(通常为第一个工作表);旧版 .xls 请先另存为 .xlsx。
  • 输出目录没有写入权限时,程序会尝试改用用户目录下的 StoZ/Outputs。
  • MDF 中的非有限阻抗值会写作 inf 或 nan。
  • 本项目面向 Windows,界面使用 tkinter,绘图使用 matplotlib。

作者与许可

  • 作者:CodfishYao (yaohaolin.cn)
  • 版本:1.5.0
  • 更新日期:2026-10-23
  • 许可证:MIT License

作者信息集中在 stoz_app/info.py,重新打包前可以按需要修改。

About

StoZ 是一个面向射频和微波工程的小工具,用于把单端口或二端口 S 参数换算为阻抗。 程序提供中文图形界面,可以选择参考阻抗、查看指定频率下的阻抗,并把结果写成 CST 风格的 MDF 文件。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages