第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为例)
- 建立测试bench:LNA输入接两个port,频率分别设为f1和f2,功率相等。
- 添加PSS分析:
- Fundamental Frequency = |f1−f2|
- Number of Harmonics = 7
- Accuracy Default(中等精度即可)
- 添加PAC分析:
- Sweep Type = Absolute
- Sweep Range = 从f1−10 MHz 到 f2+10 MHz
- Sidebands = 选择 ±1, ±2, ±3(覆盖交调分量)
- 运行仿真,在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仿真流程串起来了,从原理到操作一目了然:
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仿真要记住的三件事
- 双音频率差是PSS的基频,不是f1或f2
- 3:1斜率是验证仿真正确性的黄金标准
- IIP3 = Pin + Δ/2,这个公式在−30~−10 dBm输入范围内最准