第3章 IP3仿真方法:双音测试原理与PSS+PAC提取

线性度这东西,说白了就是看放大器在大信号下还能不能「好好干活」。1dB压缩点看的是增益开始掉,而IP3看的是三阶交调产物什么时候追上基波。我个人觉得,IP3才是衡量LNA线性度更真实的指标——毕竟实际通信环境里,干扰信号从来不止一个。

3.1 双音测试:为什么是两个 tone?

你想想看,真实世界里天线收到的信号,哪有什么单音?都是密密麻麻的频谱。双音测试就是用两个频率很近的等幅正弦波,模拟两个相邻信道干扰。

假设我们注入:

  • f1 = 2.400 GHz
  • f2 = 2.401 GHz

放大器非线性会产生一堆交调产物:

  • 二阶:f1±f2 → 4.801 GHz / 1 MHz(远离带内,通常不关心)
  • 三阶:2f1−f2 = 2.399 GHz,2f2−f1 = 2.402 GHz

注意看,这两个三阶产物正好落在带内,离主信号只有1 MHz。滤波器根本滤不掉。这就是为什么IP3如此重要——它直接决定了接收机在强干扰下的阻塞性能。

核心概念:基波输出功率以1 dB/dB斜率增长,IM3以3 dB/dB斜率增长。两条线延长相交的点,就是IP3。

3.2 PSS + PAC:仿真器到底在算什么?

很多初学者上来就跑PSS+PAC,但不知道背后原理。我简单解释一下:

  • PSS(Periodic Steady State):先让电路在周期大信号下稳定,得到工作点。这一步会考虑大信号对偏置点的调制效应。
  • PAC(Periodic AC):在PSS工作点上做小信号线性化,扫频得到传输函数。

双音IP3仿真,实际上是用PSS建立大信号周期稳态,再用PAC提取两个频率点的增益和交调转换系数。仿真器内部会做谐波平衡,把非线性项展开成傅里叶级数,然后直接读出IM3分量。

我的习惯:PSS的Beat Frequency设成两个tone的频率差(比如1 MHz),Number of Harmonics至少设到5~7阶。太低的话,高阶交调分量算不准。

3.3 仿真设置步骤(以Cadence Spectre为例)

  1. 建立测试bench:LNA输入接两个port,频率分别设为f1和f2,功率相等。
  2. 添加PSS分析:
    • Fundamental Frequency = |f1−f2|
    • Number of Harmonics = 7
    • Accuracy Default(中等精度即可)
  3. 添加PAC分析:
    • Sweep Type = Absolute
    • Sweep Range = 从f1−10 MHz 到 f2+10 MHz
    • Sidebands = 选择 ±1, ±2, ±3(覆盖交调分量)
  4. 运行仿真,在Results Browser中查看:
    • 基波输出功率:portOut 在 f1 和 f2 处的值
    • IM3输出功率:portOut 在 2f1−f2 和 2f2−f1 处的值
// Ocean Script 示例(自动提取IP3)
simulator( 'spectre )
design( "./lna_netlist.scs" )
resultsDir( "./psp_results" )
openResults( "./psp_results/psp.raw" )

// 读取基波和IM3功率
fund_dBm = dBm( getData("PORT1_OUT:V") ?result "pac" ?freq 2.400e9 )
im3_dBm  = dBm( getData("PORT1_OUT:V") ?result "pac" ?freq 2.399e9 )

// 计算IIP3
delta = (fund_dBm - im3_dBm) / 2
iip3_dBm = fund_dBm + delta - 3
printf("IIP3 = %.2f dBm\n", iip3_dBm)

我曾经踩过的坑:PSS的Beat Frequency设成了f1或f2,结果仿真器把两个tone当成谐波处理,交调产物全算错了。记住,双音PSS的基频必须是频率差!

3.4 输入功率与IM3的关系:斜率决定一切

我们来看一组典型仿真数据(LNA工作在2.4 GHz,偏置电流5 mA):

输入功率 (dBm) 基波输出 (dBm) IM3输出 (dBm) Δ (dB)
-30 -10.2 -70.5 60.3
-25 -5.1 -55.3 50.2
-20 -0.1 -40.2 40.1
-15 4.9 -25.1 30.0
-10 9.8 -10.3 20.1

看到规律了吗?输入功率每增加5 dB,基波增加5 dB,IM3增加15 dB。Δ每5 dB输入变化15 dB,正好是3倍关系。这就是「3:1斜率法则」。

为什么会这样?因为基波来自线性项(一阶),IM3来自三次项(三阶)。数学上,三阶项的幅度与输入幅度的三次方成正比,所以功率上就是3倍斜率。

实用公式:IIP3 (dBm) = Pin + (Δ / 2),其中Δ = P_fund(dBm) − P_IM3(dBm)

用上表第一行:IIP3 = -30 + (60.3/2) = 0.15 dBm

3.5 知识结构图:双音IP3仿真全流程

下面这张图把整个IP3仿真流程串起来了,从原理到操作一目了然:

双音IP3仿真全流程 双音输入:f1, f2 等幅 PSS:建立大信号周期稳态 Beat Freq = |f1−f2|,Harmonics ≥ 7 PAC:小信号线性化扫频 扫频范围覆盖 f1, f2, 2f1−f2, 2f2−f1 提取基波功率 + IM3功率 P_fund @ f1, P_IM3 @ 2f1−f2 计算IIP3 = Pin + (P_fund − P_IM3)/2 验证3:1斜率,确认线性区 注意:PSS+PAC提取的IP3只在小信号线性区有效,大信号下需用HB或QPSS

3.6 实操中的几个关键点

1. 双音频率间隔怎么选?

我一般选1~5 MHz。太近(<100 kHz)仿真器收敛困难,谐波数量不够;太远(>10 MHz)又偏离实际场景。对于宽带LNA,可以选信道带宽的1/10作为间隔。

2. 输入功率扫多宽?

从−30 dBm扫到−5 dBm,步长5 dB。这样能清楚看到基波和IM3的斜率关系。低于−40 dBm噪声会淹没IM3,高于−5 dBm增益压缩开始,3:1斜率就不准了。

3. 怎么看仿真结果对不对?

画一张图:横轴是Pin,纵轴是Pout(dBm)。基波应该是斜率为1的直线,IM3应该是斜率为3的直线。如果两条线在低功率区就弯曲,说明仿真设置有问题——要么PSS没收敛,要么PAC的Sidebands没选够。

我的小技巧:在仿真结果里加一条参考线,斜率3,跟IM3曲线对比。如果重合度好,说明仿真可信。如果偏离,先检查PSS的Beat Frequency和Harmonics数量。

3.7 常见误区与避坑

  • 误区一:直接用HB(谐波平衡)跑双音,不用PSS+PAC。HB更慢,且对初值敏感。PSS+PAC在中等精度下效率高得多。
  • 误区二:只看一个输入功率点的IP3。IP3是外推值,不同功率点算出来应该一致。如果差异超过1 dB,说明电路已经进入强非线性区。
  • 误区三:忽略负载效应。LNA的输出匹配会影响IM3,仿真时一定要带上完整的输出匹配网络和负载。

我曾经翻过车:有一次仿真IIP3高达+15 dBm,实测只有+8 dBm。查了半天,发现PSS的Accuracy Default设成了liberal,谐波平衡没收敛。改成moderate后,仿真和实测就吻合了。所以,仿真精度设置别偷懒。

3.8 小结:IP3仿真要记住的三件事

  1. 双音频率差是PSS的基频,不是f1或f2
  2. 3:1斜率是验证仿真正确性的黄金标准
  3. IIP3 = Pin + Δ/2,这个公式在−30~−10 dBm输入范围内最准