2. 噪声模型:运放噪声模型建立,输入参考噪声与输出噪声的关系推导
做仪表放大器设计,噪声模型是绕不开的坎。我刚开始接触这玩意儿时,总觉得噪声分析就是套公式,直到有一次项目调试,仿真结果和实测差了 6dB,查了三天才发现是模型建错了。嗯,从那以后,我养成了先搭噪声模型再仿真的习惯。
说白了,运放噪声模型就是把你芯片里那些看不见的“捣乱分子”用电路元件表示出来。你想想看,一个理想运放是没有噪声的,但实际运放内部有电阻、有晶体管,它们都会产生噪声。我们要做的,就是把它们等效到输入端,这样分析起来就方便多了。
2.1 运放噪声源拆解
一个实际运放的噪声,主要来自三个地方:
- 电压噪声源(\( e_n \)):串联在输入端,单位 nV/√Hz
- 电流噪声源(\( i_n \)):并联在输入端,单位 pA/√Hz
- 电阻热噪声:反馈网络和源电阻产生的约翰逊噪声
我记得第一次做低噪声放大器时,只考虑了电压噪声,结果仿真出来的噪声谱密度总是偏低。后来才发现,电流噪声在高阻源阻抗下会变得非常显著。所以,千万别忽略它。
核心结论:运放的总输入参考噪声,是电压噪声、电流噪声在源阻抗上的压降、以及外部电阻热噪声的平方和开根号。
2.2 输入参考噪声模型
我们通常把运放建模成一个“无噪声运放”加上两个噪声源。这样,所有内部噪声都被搬到了输入端。我个人习惯用下面这个等效电路:
2.3 输入参考噪声密度计算
有了模型,接下来就是算数了。总输入参考噪声密度 \( e_{n,in} \) 由三部分组成:
e_n,in = sqrt( e_n^2 + (i_n * R_s)^2 + 4kTR_s + 4kTR_f/A^2 )
其中:
- \( e_n \):运放数据手册给出的电压噪声密度
- \( i_n \):运放数据手册给出的电流噪声密度
- \( R_s \):源电阻(信号源内阻)
- \( R_f \):反馈电阻
- \( A \):闭环增益
- \( k \):玻尔兹曼常数,\( T \):绝对温度
实战技巧:我曾经在做一个 1000 倍增益的仪表放大器时,发现噪声主要来自第一级。后来把第一级的反馈电阻从 10kΩ 降到 1kΩ,噪声降低了将近 40%。记住,电阻热噪声是 4kTR,电阻值每降低 10 倍,噪声功率就降 10 倍。
2.4 从输入到输出:噪声增益
输入参考噪声经过放大器后,会被放大。但这里有个坑——噪声增益和信号增益不一定相等。对于仪表放大器,噪声增益通常等于同相增益:
G_noise = 1 + R_f / R_g
其中 \( R_g \) 是增益设置电阻。输出噪声密度就是:
e_n,out = e_n,in * G_noise
为什么会这样?因为噪声源是加在运放的同相输入端,它看到的增益就是同相增益。而信号可能从同相端或反相端输入,增益不同。你想想看,如果信号从反相端输入,增益是 \( -R_f/R_g \),但噪声增益还是 \( 1+R_f/R_g \)。这就导致信噪比在反相放大时会变差。
避坑指南:我曾经设计一个反相放大器,信号增益只有 10,但噪声增益是 11。我一开始没注意,结果输出噪声比预期大了 10%。后来我把反馈网络重新设计,让噪声增益尽量接近信号增益,才把问题解决。记住,噪声增益永远 ≥ 1,而且 ≥ 信号增益。
2.5 总输出噪声:积分与带宽
噪声密度是频域概念,但我们要的是总输出噪声(RMS 值)。这需要对噪声密度在带宽内积分:
V_noise,rms = sqrt( ∫ e_n,out^2(f) df )
实际计算时,我们通常用“砖墙近似”:
V_noise,rms ≈ e_n,out * sqrt(BW * K_n)
其中:
- \( BW \):-3dB 带宽
- \( K_n \):噪声带宽系数(一阶系统为 1.57,二阶为 1.22)
我习惯用下面这个表格快速估算:
| 滤波器阶数 | 噪声带宽系数 Kₙ | 适用场景 |
|---|---|---|
| 1 阶 | 1.57 | 单极点运放、RC 低通 |
| 2 阶 | 1.22 | 巴特沃斯、贝塞尔 |
| 3 阶 | 1.16 | 高阶滤波器 |
| 4 阶 | 1.13 | 高阶滤波器 |
关键点:总输出噪声是 RMS 值,不是峰峰值。如果要估算峰峰值,通常乘以 6.6(对于 99.9% 的置信度)。我一般用 6.6 这个系数,因为实际噪声分布接近高斯分布,6.6σ 基本覆盖了所有情况。
2.6 一个完整的计算示例
假设我们有一个仪表放大器,参数如下:
- 运放:\( e_n = 10 nV/√Hz \),\( i_n = 1 pA/√Hz \)
- 源电阻:\( R_s = 1 kΩ \)
- 反馈电阻:\( R_f = 10 kΩ \),\( R_g = 100 Ω \)
- 增益:\( A = 1 + 10k/100 = 101 \)
- 带宽:\( BW = 100 kHz \)(一阶)
计算步骤:
- 电压噪声贡献: \( e_n = 10 nV/√Hz \)
- 电流噪声贡献: \( i_n * R_s = 1 pA * 1kΩ = 1 nV/√Hz \)
- 源电阻热噪声: \( sqrt(4 * 1.38e-23 * 300 * 1k) ≈ 4.07 nV/√Hz \)
- 反馈电阻热噪声(折算到输入): \( sqrt(4 * 1.38e-23 * 300 * 10k) / 101 ≈ 0.4 nV/√Hz \)
- 总输入噪声密度: \( sqrt(10^2 + 1^2 + 4.07^2 + 0.4^2) ≈ 10.9 nV/√Hz \)
- 输出噪声密度: \( 10.9 * 101 ≈ 1.1 μV/√Hz \)
- 总输出 RMS 噪声: \( 1.1 * sqrt(100k * 1.57) ≈ 436 μV_{rms} \)
我的习惯:做这种计算时,我一般先用 Excel 搭个模板,把公式写进去。然后改变 Rₛ 和 R_f 的值,看看哪个噪声源占主导。如果电压噪声占主导,就换低噪声运放;如果电流噪声占主导,就降低源阻抗;如果热噪声占主导,就减小电阻值。这样优化起来效率很高。
2.7 噪声模型在仿真中的实现
在 EDA 工具里,我们通常用受控源加噪声源来建模。下面是一个 SPICE 子电路示例:
.SUBCKT NOISY_OPAMP INP INN OUT
* 理想运放
EAMP 0 OUT INP INN 1E6
* 电压噪声源(10 nV/√Hz)
VNOISE N1 0 DC 0
RNOISE N1 INP 1
ENOISE N1 0 VALUE={V(NOISE)*1e-9}
* 电流噪声源(1 pA/√Hz)
INOISE_P INP 0 VALUE={I(NOISE)*1e-12}
INOISE_N INN 0 VALUE={I(NOISE)*1e-12}
.ENDS NOISY_OPAMP
这个模型虽然简单,但足够用于前仿真。实际项目中,我会用更精确的模型,包括 1/f 噪声和频率相关的噪声谱。不过对于仪表放大器,1/f 噪声通常不是主要问题,因为信号频率一般高于 1/f 拐点。
注意:SPICE 的噪声分析默认是稳态的,不能直接仿真 1/f 噪声的时域特性。如果你需要仿真低频闪烁噪声对电路的影响,建议用瞬态噪声分析(.NOISETRAN),或者用 Verilog-A 写一个包含 1/f 噪声的模型。我曾经在这上面吃过亏,仿真结果和实测差了 3dB,后来才发现是 1/f 噪声模型没加对。