在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 参数

  1. 检查原理图无误后,点击工具栏上的 Run(绿图标)。

  2. 在弹出的黑色波形窗口中右键,选择 Add Traces(或快捷键 Ctrl + A)。

  3. 你会在变量列表中看到 S11(v1)、S21(v1) 等。双击它们即可直接看到幅频和相频特性。

  4. 查看史密斯圆图:若想看 $S_{11}$ 的史密斯圆图,右键点击波形图的横坐标(频率轴),在 Representation 下拉菜单中由 Cartesian 改为 Smith Chart 即可。

以下是仿真后点击Add Traces后的操作,不仅可以查看S参数还有其他参数。

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

第六步:导出 S 参数

注意:确保处于add Traces界面即上图S参数界面

  1. 鼠标点击选中波形窗口。

  2. 点击顶部菜单栏的 File -> Export data as text。

  3. 在弹出的窗口中:

    • Select traces to export:勾选 S11、S12、S21、S22(按住 Ctrl 可多选)。

    • Browse:选择你要保存的路径,命名为 inductor.txt。

    • Fomat:选择你要保存的S参数形式(dB和相位,实部和虚部)

  4. 点击 OK,此时你会得到一个包含频点和 S 参数数据的文本文件。

⚠️ 核心痛点说明:此时导出的 .txt 文件还不能直接导入 ADS 或 CST,原因有两个:

  1. 缺少 Touchstone 格式的文件头(如 # Hz S RI R 50)。

  2. 列顺序错位: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文件。

更多推荐