
很多人在学习模拟电路时都会被一句经典结论卡住负反馈可以消除失真。第一反应通常是输出端信号已经被放大了失真是放大器“产生的”输入端又不知道输出发生了什么负反馈凭什么把失真消掉更让人疑惑的是负反馈明明降低了放大倍数为什么反而说“改善”了性能这个直觉并不错失真确实是放大器在放大过程中引入的负反馈也不可能像滤网一样把已经出现的毛刺从波形里筛掉。负反馈真正的做法是把输出端带有失真的信号采样回来与输入信号做减法让放大器的输入端“提前”得到一个修正后的误差信号从而压低失真在输出中的比例。换句话说负反馈的本质是用增益换线性。它有足够的开环增益去“浪费”再用反馈环路把一部分增益换成了稳定性和纯度。这种交换到底是怎么发生的本文不打算只讲公式而是用一个可在仿真工具中复现的小实验从波形和 THD 数据两个维度把“负反馈消除失真”这件事彻底讲透。读完本文你会理解负反馈消除失真的数学模型、失真来源、仿真实验的搭建方法也知道负反馈的边界在哪里——它不是万能的有些干扰它不仅消不掉甚至会让系统变得不稳定。1. 为什么“负反馈消除失真”听起来像悖论先看一个常见的认知冲突。假设一个放大器开环增益是 100 倍输入 0.5V 时输出 50V。由于放大器在大信号下出现非线性输出波形出现了明显压缩这就是失真。现在接入负反馈闭环增益降到了 10 倍同样的输出幅度需要更大的输入信号。这个时候很多人会想既然负反馈把放大倍数降低了失真应该也“变小”了这不叫消除这叫退化。问题的关键在这里负反馈让放大倍数下降的同时输出信号的失真比例也下降了而且下降幅度与放大倍数下降并不完全等价。前者下降 10 倍时非线性失真可能下降了 20 倍甚至 100 倍这种相对改善是真实存在的。再从反馈闭环的角度看。负反馈系统在输入端的比较器并不是拿原始输入信号直接激励放大器它用的是“输入信号与反馈信号的差值”。这个误差信号里面已经携带了输出端失真的修正信息。可以这样理解开环系统输入 0.5V输出 50V失真 5V。这个失真只能由放大器自己“扛着”。闭环系统输出失真了反馈网络把它采回来在输入端和原始信号相减等效于让放大器的输入信号里提前包含了一个“反向修正量”。放大后再输出失真的残余量就被压低。这个机制并不神秘它依赖的是“误差检测 深度负反馈”的循环调整。要真正理解为什么它能压低失真需要看一个非常简洁的数学模型。2. 数学本质失真为什么会被“除以 (1 AF)”负反馈消除失真的核心在误差模型中体现得最清晰。假设开环增益为 A反馈系数为 F输入信号为 Vin放大器内部在输出端注入了一个失真量 D。这个 D 可以理解为非线性失真、电源纹波、末级晶体管饱和压降等一切在放大过程中引入的误差。那么闭环输出可以写成Vout A × (Vin - F × Vout) D把包含 Vout 的项合并Vout × (1 A·F) A × Vin D于是Vout [A / (1 A·F)] × Vin [1 / (1 A·F)] × D这个式子非常重要它给出了两个结论信号增益从 A 变成了 A / (1 A·F)也就是闭环增益 Af。失真量 D 同样被压缩压缩倍数是 1 / (1 A·F)。这里有一个容易被忽略的细节信号和失真被压缩的倍数是相同的。看起来信号也衰减了增益也降低了那负反馈到底改善了哪部分关键要看相对比例。如果只看增益两者确实同步下降但如果看输出端“失真占信号的比例”失真被压缩的倍数和信号被压缩的倍数是一样的两者似乎应该抵消。问题出在 D 的注入位置。失真 D 是在放大过程中加入的误差而信号 Vin 是经过输入端比较后进入放大器的。对信号而言负反馈降低了增益但对失真而言放大器内部产生的误差并没有先经过“输入减法”环节它直接被反馈环路检测并压缩。用更直观的话说信号走的是“输入 → 差值 → 放大 → 输出”的完整路径失真更像是“半路加入”的扰动反馈环路对半路加入的扰动压制能力恰好是 1 A·F。当反馈很深也就是 A·F 远大于 1 时这个式子近似为Vout ≈ (1 / F) × Vin (D / (A·F))信号增益由反馈网络 F 决定失真被压到极小。这就是深度负反馈下“增益只由反馈网络决定失真几乎消失”的来源。需要注意这个输出端误差模型是理解负反馈的最经典近似。真实电路中的非线性失真分布在整个信号链路中误差注入点不同压缩效果会略有差别但工程结论方向一致环路增益越大环路内部产生的失真被压制得越狠。所以负反馈消除失真并不是“消除”已经存在的波形错误而是通过反馈比较把内部误差在放大过程中提前反向抵消最终输出端的残余误差被压缩到原来的 1 / (1 A·F)。3. 失真从哪里来非线性失真与频率失真理解了负反馈的数学模型还要知道失真到底是怎么产生的否则实验电路设计无从下手。放大器失真主要分两类。第一类是非线性失真。晶体管、场效应管的转移特性天然是非线性的小信号时可以近似看成线性一旦信号幅度变大工作点进入饱和区、截止区输出波形就会被压缩、削平于是产生谐波。典型表现是单管共射放大器在大信号下输出波形上下不对称推挽输出级在交越点附近产生交越失真运放输出摆幅接近电源轨时发生限幅削波。这种失真在时域上表现为“波形形状不再是标准正弦”在频域上表现为“输出频谱里出现了基频的整数倍谐波”。衡量它的常用指标就是 THD总谐波失真。第二类是线性失真也叫频率失真。放大器的耦合电容、晶体管极间电容、分布电容会让不同频率的信号获得不同增益导致输出信号的高频分量、低频分量比例发生变化。方波经过放大器后变成圆头、斜顶就是频率失真的典型表现。负反馈对两类失真的影响不同对非线性失真反馈把环路内部的误差量压缩了 1 A·F 倍谐波分量显著下降对频率失真负反馈也能把幅频特性压平。以一个单极点系统为例开环带宽为 BW加入负反馈后闭环带宽扩展为 (1 A·F) 倍。这就是“增益带宽积近似恒定”说法的来源。所以负反馈不仅改善波形纯度还改善通频带。对大多数放大器设计来说这两点都是刚需。4. 实验设计思路与仿真环境准备下面进入实验环节。实验目标是做一组对比同一个非线性放大器在开环和闭环两种状态下观察输出波形的失真差异并用 THD 数值量化。为了让实验聚焦“负反馈”这个变量而不是被具体器件模型的参数干扰这里使用行为级压控电压源构建一个非线性放大器模型。模型表达式为Vout 10 × tanh(Vin / 0.1)这个式子的含义当 Vin 很小时tanh(x) ≈ x放大器近似线性小信号增益为 10 / 0.1 100 倍当 Vin 增大时tanh 曲线逐渐饱和输出被压缩到 ±10V 附近这模拟了真实放大器大信号时的增益压缩效应和晶体管输出特性往饱和区走的过程很接近。反馈网络采用最简单的电阻分压R1 9kΩ接在输出和反馈采样点之间R2 1kΩ接在反馈采样点和地之间反馈系数 F 1 / (9 1) 0.1理想闭环增益约为 1 / F 10 倍。实验环境推荐使用 LTspice免费且跨平台直接支持文本形式的网表和 .four 失真分析指令。其他支持行为源的 SPICE 工具也完全可以语法可能略有差异。对比实验要保持输出基波幅度接近否则没有意义。开环输入 0.06V 左右时输出约 6V闭环则要增大输入到 0.6V 左右让输出也达到 6V 附近。这样对比的就是“同样输出幅度下谁更干净”。5. 实验一开环放大器的失真有多明显先看开环电路。元件连接关系如下信号源 V1 正极接节点 in负极接地行为源 B1 正极接节点 out负极接地输出电压按模型表达式计算负载电阻 Rload 接在 out 和地之间取 10kΩ模拟后级负载。LTspice 网表如下* Open-loop nonlinear amplifier, input amplitude 0.06V V1 in 0 SINE(0 0.06 1k) B1 out 0 V{10*tanh(v(in)/0.1)} Rload out 0 10k .tran 0 5m 0 10u .four 1k V(out) .backanno .end这段网表的说明SINE(0 0.06 1k)表示幅度 0.06V、频率 1kHz 的正弦信号.tran 0 5m 0 10u表示仿真 5ms最大步长 10μs.four 1k V(out)表示对输出节点做 1kHz 基波的傅里叶分析直接得到 THD。在 LTspice 中新建文本文件粘贴上述内容保存为open_loop.cir然后运行仿真。仿真结束后在波形窗口添加 V(out) 节点波形可以看到输出峰值约 5V 到 6V但波形顶部和底部出现明显压缩不再是对称正弦而是呈现出“圆顶”特征。打开 View 菜单下的 FFT 窗口选择 V(out)把频率范围缩放到 0 到 10kHz可以看到清晰的频谱1kHz 处是基波2kHz、3kHz、4kHz 处都出现了幅度不小的谐波峰。这些谐波就是非线性失真的证据。查看 SPICE Error Log里面会列出 .four 指令的分析结果包含各次谐波幅度和 THD。根据输入幅度和模型参数这个电路的 THD 通常会在百分之几到十几之间是一个肉眼可见、数据可查的失真状态。这一步是最容易被忽略的地方。很多人在学习负反馈时总喜欢把输入信号调到很小让开环放大器工作在线性区结果看到波形很漂亮就认为失真不存在。真实系统里信号幅度稍大非线性就出来了。所以实验第一步一定要把输入幅度调到让输出波形明显变形留给负反馈一个“可以改善的问题”。6. 实验二加入负反馈后的波形变化现在在原有电路上加入反馈网络并把输入幅度提高到 0.6V 左右。元件连接如下信号源 V1 接输入节点 inB1 仍然是输出节点 out但模型变为10*tanh((v(in)-v(fb))/0.1)即放大器的输入是“原始输入信号与反馈采样电压之差”R1 接在 out 与 fb 之间9kΩR2 接在 fb 与地之间1kΩ负载 Rload 接在 out 与地之间10kΩ。LTspice 网表如下* Closed-loop nonlinear amplifier with negative feedback V1 in 0 SINE(0 0.6 1k) R1 out fb 9k R2 fb 0 1k B1 out 0 V{10*tanh((v(in)-v(fb))/0.1)} Rload out 0 10k .tran 0 5m 0 10u .four 1k V(out) .backanno .end与开环电路相比这个电路多了一个反馈采样节点 fb。B1 的表达式从v(in)/0.1变成了(v(in)-v(fb))/0.1意思是放大器输入端的有效电压不再是原始输入而是“输入减去反馈量”。当输出没有失真时反馈电压只是输出的一部分和输入相减后驱动放大器的净输入会很小。由于净输入被压到了放大器的线性区非线性误差就大幅减小了。运行仿真观察 V(out) 波形。输出幅度依然在 5V 到 6V 左右但波形形状明显比开环时圆润顶部和底部的压缩几乎消失看起来更接近标准正弦波。打开 FFT 窗口和 SPICE Error Log查看 THD 数值会比开环状态下降一个数量级以上从“明显的失真”变成“轻微失真”。这里有一个很容易混淆的点为什么闭环输入从 0.06V 提高到了 0.6V输出看起来还是和开环差不多的 6V因为闭环增益已经降到了约 10 倍而不是开环的 100 倍。这不是负反馈“坏处”恰恰是负反馈的代价——它牺牲了约 10 倍的增益换来了 THD 的大幅下降。输出幅度相同、失真更低这就是“用增益换线性”的直观体现。7. 量化验证用 THD 与频谱对比失真改善波形只能定性看工程上量化失真最常用的是 THD总谐波失真。THD 定义为各次谐波有效值的平方和再开根号除以基波有效值通常用百分比表示THD sqrt(V2² V3² V4² ... Vn²) / V1 × 100%其中 V1 是基波幅度V2、V3、V4 等是二次、三次、四次谐波幅度。LTspice 里加一句.four 1k V(out)就能直接得到 THD 和各次谐波幅度。如果想自己计算或者把结果导出到 Python 中做可视化对比也可以用下面这段脚本。import numpy as np import pandas as pd import matplotlib.pyplot as plt def load_ltspice_csv(path): 读取 LTspice 导出的 CSV默认第一列是时间第二列是信号 df pd.read_csv(path, comment#) time df.iloc[:, 0].to_numpy() signal df.iloc[:, 1].to_numpy() return time, signal def thd_from_signal(time, signal, f01000.0, harmonic_count5): 计算基波 f0 附近的总谐波失真 THD dt np.median(np.diff(time)) fs 1.0 / dt # 重采样到均匀时间网格避免 SPICE 变步长数据造成频谱泄漏 t np.arange(time[0], time[-1], dt) v np.interp(t, time, signal) # 去直流加汉宁窗 v v - np.mean(v) n len(v) win np.hanning(n) spectrum np.fft.rfft(v * win) freqs np.fft.rfftfreq(n, ddt) def peak_amp_around(freq): 在目标频率附近找最大谱线幅度 lo np.searchsorted(freqs, freq - 20.0) hi np.searchsorted(freqs, freq 20.0) idx lo np.argmax(np.abs(spectrum[lo:hi])) return np.abs(spectrum[idx]) * 2.0 / np.sum(win) fundamental peak_amp_around(f0) harmonics_sq 0.0 for k in range(2, harmonic_count 1): harmonics_sq peak_amp_around(k * f0) ** 2 thd np.sqrt(harmonics_sq) / fundamental * 100.0 return thd, fundamental t_open, v_open load_ltspice_csv(open_loop.csv) t_closed, v_closed load_ltspice_csv(closed_loop.csv) thd_open, amp_open thd_from_signal(t_open, v_open) thd_closed, amp_closed thd_from_signal(t_closed, v_closed) print(fOpen-loop output amplitude: {amp_open:.3f}V, THD: {thd_open:.3f}%) print(fClosed-loop output amplitude: {amp_closed:.3f}V, THD: {thd_closed:.3f}%)运行前需要在 LTspice 中分别保存两段波形仿真结束后选中 V(out) 波形File → Export data as text导出为 CSV。开环数据保存为open_loop.csv闭环数据保存为closed_loop.csv。脚本会分别计算两种状态下的输出基波幅度和 THD并打印出来。判断实验是否成功的标准有两个开环和闭环的输出基波幅度应该接近说明对比的是“同一输出幅度下”的失真闭环 THD 应显著低于开环 THD通常在数量级上拉开差距。如果输出幅度差很多说明输入信号没有调整到位需要重新调整输入幅度让两者输出幅度可比。FFT 分析虽然直观但也有坑尤其是频谱泄漏。如果采样时间不是信号周期的整数倍基波能量会泄漏到相邻频点导致 THD 计算偏高。所以代码里用汉宁窗做抑制同时强调这套方法用于两种状态的相对对比足够绝对精度不必和实验室仪器较劲。8. 负反馈的边界、常见误区与排查思路负反馈消除失真的实验做完了但工程中很多关于负反馈的误区比公式更容易让人踩坑。先看负反馈能做到和做不到的事目标负反馈能否实现说明抑制环路内部产生的非线性失真能失真的残余量约为原来的 1 / (1 A·F)抑制输出端注入的电源纹波、末级扰动能这类误差也在反馈环路内改善通频带内幅频特性平坦度能闭环带宽被扩展增益相对平坦降低输入端信号源本身的噪声基本不能输入端噪声与信号走同一条路径改善有限消除已生产生并叠加到输出端的脉冲干扰不能即时消除反馈需要时间反应高频瞬态干扰效果有限解决反馈环路不稳定带来的自激振荡不能反馈不当反而会产生自激这张表格里最容易被误解的是“负反馈能降低噪声”。准确说法应该是负反馈能抑制由放大电路内部产生、且在反馈环路内的噪声和失真对于输入信号源本身带进来的噪声负反馈几乎没有改善作用甚至会因为要放大输入信号而把噪声一起放大。再看三个高频误区误区一反馈越深越好。从失真抑制公式看A·F 越大越好但环路增益过大时放大器的附加相移会让反馈在某些频点变成正反馈导致自激振荡。实际工程中反馈深度要结合相位裕度来设计而不是盲目加深。误区二负反馈能滤除已经削掉的波形。如果输出已经撞到电源轨产生硬削波反馈回路确实能把波形“拉回来”一些但削波导致的频谱扩展和相位变化并不会被完全清除。更稳妥的做法是把输入幅度控制在放大器线性区内再用负反馈保证线性区的失真够低。误区三负反馈万能加了之后系统就稳定。负反馈的作用对象是环路增益和误差系统稳定性取决于环路增益的相位特性不取决于有没有加反馈。下面是实验中可能遇到的问题和排查思路问题现象可能原因排查方式解决方案开环波形没有明显失真输入幅度太小放大器工作在线性区查看输出幅度是否只有几百毫伏增大输入幅度直到输出接近 ±6V观察波形压缩闭环后失真改善不明显反馈系数太小或者输入幅度没有调到位检查 R1/R2 比值确认 F 是否为 0.1增大 F或把闭环输入调到输出 6V 再对比.four指令报错或 THD 数值异常输出波形未进入稳态谐波分析窗口过短延长仿真时间或查看输出波形最后几个周期是否稳定把 .tran 时长增加到 10ms 以上或使用波形的稳定区间分析仿真报tanh函数不支持LTspice 版本较老或语法错误检查 B1 表达式是否完整将 tanh 改写为(exp(2*x)-1)/(exp(2*x)1)FFT 结果频谱泄漏严重仿真时间不是信号周期的整数倍检查仿真时长是否为 1k 信号周期的整数倍使用 5ms、10ms 等整数倍时长或加汉宁窗闭环增益与 1/F 偏差较大反馈网络对输出有负载效应开环增益不足断开反馈网络测等效负载计算实际环路增益增大开环增益或者提高反馈电阻阻值9. 负反馈设计的工程建议与总结最后从工程实践角度给出几点做负反馈设计时值得注意的建议。第一反馈网络要稳定。负反馈把闭环增益的稳定性交给了反馈系数 F如果 F 本身受温度、电压影响而漂移闭环增益也会跟着漂。电阻分压网络尽量用精度高、温漂低的电阻如果对增益精度要求高可以使用精密电阻或带修调的网络。第二留足开环增益余量。既然失真改善量取决于 1 A·F而闭环增益又被限制在 1/F 左右那么 A 必须比最终的闭环增益高出一个数量级以上。设计时要先明确“需要多低的失真”再反推开环增益需求而不是随手接个反馈电阻。第三注意稳定性。深度负反馈是自激振荡的高发区尤其当放大器本身有多个极点、高频相移明显增大的时候。设计完成后建议做环路增益的相位裕度仿真或者直接观察闭环输出的阶跃响应是否出现振铃。必要时增加相位补偿电容。第四区分输入端噪声和环路内噪声。负反馈无法有效抑制输入端的噪声如果应用场景对噪声敏感应该在信号链前端做滤波而不是指望负反馈包治百病。第五验证时用 THD 和频谱说话。肉眼观察正弦波是否“圆润”只能算定性判断工程验收要用 THD、IMD、频谱分量这些量化指标。这也是本文实验最后保留 Python 计算脚本的原因——把每一次调整都量化才能形成可靠的技术积累。负反馈是模拟电路里少有的“用一个简单结构换取多项性能”的设计但它的代价是增益和稳定性风险。学负反馈时与其死记公式不如亲手做一个开环失真、闭环改善的实验在波形和频谱上亲眼看到失真被压下去的过程。这也是本文写这个小实验的初衷。建议你打开仿真工具把开环、闭环两个电路跑通然后试着改一改反馈电阻的比值看看 THD 和输出幅度是怎么随反馈深度变化的。这一步做完你对负反馈的理解会比单纯刷题扎实得多。