LT-spice仿真S参数及其数据导出过程-电路图法
在LT-spice中,仿真S参数核心在于使用".net"指令配合“.ac”进行小信号频率扫描。
以下将用两种方式仿真1nH电感双端口网络的S参数为例进行说明,本文主要讲述电路图仿真的方法,下一篇将讲述网表方法进行仿真并导出两端口S参数过程。
电路图法仿真
第一步:打开 LTspice,点击左上角的 File -> New Schematic(或使用快捷键 Ctrl + N),开启一个空白的画布。
第二步:按照以下说明在画布上放置器件:
1.放置电感(待测器件 DUT):
(1)按下快捷键 L,画布上会出现一个电感符号,点击左键放置在画布中间。
(2)在电感符号上右键,在 Value 中输入 1n(代表 1nH),点击 OK。
2.放置负载电阻(端口 2 终端阻抗):
(1)按下快捷键 R,按 Ctrl + R 可以旋转方向,将其放置在电感的右侧。
(2)在电阻符号上右键,将 Value 设为 50(代表 50 欧姆标准阻抗)。
(3)为了方便后续输入指令,建议按住 Ctrl 键同时右键点击该电阻的标签(默认是 R1),将其 InstName 改为 Rout。
3.放置激励源(端口 1 输入):
(1)按下快捷键 F2 打开器件库,输入 voltage,选中并放置在电感的左侧。
(2)在电压源符号上右键,点击 Advanced 按钮进入高级设置(这一步最关键):
在右侧的 Series Resistance[Ω](源内阻)输入 50。这代表 Port 1 的 50 欧姆特征阻抗。
在右侧的 Small Signal AC Analysis 区域,找到 AC Amplitude 并输入 1。
点击 OK。此时电压源下方会显示 AC 1 Rser=50。
4.放置 GND(地):
按下快捷键 G,在电压源下方和负载电阻 Rout 下方各放置一个地符号。
第三步:连线
(1)按下快捷键 F3 启动连线工具。
(2)将电压源正极连接到电感左端。
(3)将电感右端连接到电阻 Rout 上端。
(4)将电压源负极和电阻下端分别连接到各自对应的 GND 上。
第四步:添加仿真和网络分析指令
我们需要在原理图上放置两行文本指令:
1.添加 AC 扫描指令:
(1)点击菜单栏的 Simulate -> Edit Simulation Cmd。
(2)切换到 AC Analysis 选项卡。
(3)Type of Sweep 选择 Linear;Number of points 输入 1001;Start Frequency 输入 100meg;Stop Frequency 输入 10g。
(4)点击 OK,将生成的文本 .ac lin 1001 100meg 10g 放置在画布的空白处。
2.添加 .net 网络分析指令:
(1)按下快捷键 T(打开 SPICE Directive 文本框)。
(2)在输入框中输入:.net I(Rout) V1(注:如果你的电压源编号不是 V1,请按实际的名字修改,如 V1、V2 等)。
(3)点击 OK,将这行字也放置在画布的空白处。
得到如下可仿真原理图:

第五步:运行并查看 S 参数
-
检查原理图无误后,点击工具栏上的 Run(绿图标)。
-
在弹出的黑色波形窗口中右键,选择 Add Traces(或快捷键
Ctrl + A)。 -
你会在变量列表中看到
S11(v1)、S21(v1)等。双击它们即可直接看到幅频和相频特性。 -
查看史密斯圆图:若想看 $S_{11}$ 的史密斯圆图,右键点击波形图的横坐标(频率轴),在
Representation下拉菜单中由Cartesian改为Smith Chart即可。
以下是仿真后点击Add Traces后的操作,不仅可以查看S参数还有其他参数。

以下选中S11参数可以查看仿真结果

第六步:导出 S 参数
注意:确保处于add Traces界面即上图S参数界面
-
鼠标点击选中波形窗口。
-
点击顶部菜单栏的 File -> Export data as text。
-
在弹出的窗口中:
-
Select traces to export:勾选
S11、S12、S21、S22(按住 Ctrl 可多选)。 -
Browse:选择你要保存的路径,命名为
inductor.txt。 -
Fomat:选择你要保存的S参数形式(dB和相位,实部和虚部)
-
-
点击 OK,此时你会得到一个包含频点和 S 参数数据的文本文件。
⚠️ 核心痛点说明:此时导出的
.txt文件还不能直接导入 ADS 或 CST,原因有两个:
缺少 Touchstone 格式的文件头(如
# Hz S RI R 50)。列顺序错位:LTspice 导出数据的列顺序是按字母排序的(
Freq, S11, S12, S21, S22);而标准.s2p文件要求的列顺序是(Freq, S11, S21, S12, S22),即S21和S12的位置是颠倒的。
此时可以考虑转换为标准的Touchstone文件,或者直接用txt文件在Python、MATLAB中进行处理数据时需要注意下文件格式问题。
第七步:转换为标注的Touchstone文件(.s2p)
编写一个简单的 Python 脚本,不仅可以自动补全标准 Touchstone 文件头,还能完美修复 S21 和 S12的列顺序。
def ltspice_txt_to_s2p(input_txt_path, output_s2p_path):
with open(input_txt_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
data_lines = []
for line in lines:
line_str = line.strip()
# 跳过空行和表头行
if line_str and not line_str.startswith('Freq'):
data_lines.append(line_str.split())
with open(output_s2p_path, 'w', encoding='utf-8') as f_out:
# 1. 写入标准 Touchstone 文件头
# # Hz S RI R 50 代表:频率单位Hz,S参数,实部/虚部(RI)格式,参考阻抗50欧姆
f_out.write("! Created by Converting LTspice Export\n")
f_out.write("# Hz S RI R 50\n\n")
for cols in data_lines:
if len(cols) < 5:
continue
freq = cols[0] # 频率 (Hz)
# LTspice 导出的复数格式通常为 "实部,虚部" (例如: -0.001,0.05)
def parse_ri(s_str):
s_str = s_str.replace('(', '').replace(')', '') # 移除可能存在的括号
parts = s_str.split(',')
return float(parts[0]), float(parts[1])
# LTspice 默认列顺序: 0:Freq, 1:S11, 2:S12, 3:S21, 4:S22
s11_r, s11_i = parse_ri(cols[1])
s12_r, s12_i = parse_ri(cols[2])
s21_r, s21_i = parse_ri(cols[3])
s22_r, s22_i = parse_ri(cols[4])
# 2. 按照标准 s2p 顺序写入: Freq -> S11 -> S21 -> S12 -> S22
f_out.write(f"{float(freq):.6e} "
f"{s11_r:.6e} {s11_i:.6e} "
f"{s21_r:.6e} {s21_i:.6e} "
f"{s12_r:.6e} {s12_i:.6e} "
f"{s22_r:.6e} {s22_i:.6e}\n")
print(f"转换成功!标准 s2p 文件已保存至: {output_s2p_path}")
# 使用示例:将导出的 txt 文件路径传入即可
ltspice_txt_to_s2p('inductor.txt', 'inductor.s2p')
或者直接在文件的最顶部手动粘贴两行 Touchstone 规定文件头并保存为s2p文件。
更多推荐


所有评论(0)