负反馈如何消除放大器失真:原理、THD实验与电路实践 📅 发布时间:2026/9/1 12:40:53 👁 浏览次数: 负反馈是放大器设计里最容易被误解的概念之一。很多初学者知道“负反馈是把输出的一部分送回输入端和输入相减”但一旦被问到它到底如何消除失真就只剩下一句“反馈会让增益降低所以更稳定”的模糊记忆。这个说法没有错但它没有解释最关键的问题增益降低和失真降低之间的数量关系是什么反馈环路内部到底发生了什么。这篇文章用一个尽量简洁的非线性模型把开环放大器和带负反馈的闭环放大器放在一起做对比实验。你会看到一个具体的正弦波输入、一个会饱和的非线性放大环节以及 THD 指标的差异。做完这个实验后再回头去看教科书里的增益公式会更容易理解“反馈深度”“环路增益”这些参数的意义。1. 先把负反馈消除失真的原理说清楚1.1 负反馈不是在“压低输出”而是在“纠正误差”先把一个典型的反馈系统拆开看。输入信号记为x输出信号记为y。反馈网络从输出取出一部分信号记为β * y其中β是反馈系数。把反馈信号和输入信号相减得到误差信号e x - β * y这个误差信号再经过放大倍数A的前级放大器放大得到输出y A * e这里最值得注意的变化在于开环时放大器输入端看到的信号就是x闭环时放大器输入端看到的信号是x - β*y。也就是说负反馈不是简单地把输出限制住而是让放大器去放大“实际需要的差值”。如果输出太大反馈量β*y就会变大误差e会变小输出就被拉回来。如果输出太小反馈量变小误差变大输出又会升上去。这个动态过程一直在实时进行不是靠一次性的衰减完成的。1.2 从增益公式看失真项为什么被压低把y A * e和e x - β * y联立可以得到闭环增益Af y / x A / (1 A * β)令环路增益T A * β则Af A / (1 T)现在假设放大器的内部存在一个等效失真源d它混在输出里。这个失真源如果出现在输出端输出方程会变成y A * e d代入e x - β*y后y A*(x - β*y) d整理得到y A*x / (1 A*β) d / (1 A*β)这个结果非常关键。信号分量和失真分量同时被除以1 T所以从相对比例来看失真占输出的比重被压缩了。环路增益T越大失真改善越明显。如果T 9失真降到原来的 1/10如果T 99失真降到原来的 1/100。这里必须说明真实电路里的非线性失真并不是一个固定的“输出端叠加电压源”这个模型只是从控制论角度解释负反馈的态度任何不该出现在输出里的成分都会被反馈回路送回到输入端参与抵消。理解了这个方向再去做实验才不容易被表面的波形现象带偏。2. 用一个可运行的 Python 实验观察失真2.1 用非线性传输函数模拟放大器饱和真实放大器在小信号下接近线性在大信号下会出现增益压缩、饱和甚至削顶。为了不引入太多电路细节这里用一个常见的非线性函数y A * tanh(v)当v很小时tanh(v)近似等于v所以放大器接近线性当v变大时输出逐渐饱和波形顶部被压平于是产生谐波失真。实验参数设计如下开环放大倍数A 5反馈系数β 0.1输入信号是 1kHz 正弦波峰值幅度为 1.0采样率 48kHz采样时长 0.02 秒这个参数组合不是某个真实元件的型号而是为了让“软饱和”失真在开环状态下足够明显。你可以把nonlinear_block替换成晶体管模型、运放饱和模型或者实测得到的输入输出曲线。2.2 Python 脚本开环、闭环和 THD 测量下面代码依赖 NumPy运行前先安装pip install numpy完整脚本如下import numpy as np A 5.0 BETA 0.1 FS 48000 F 1000.0 DURATION 0.02 N int(FS * DURATION) t np.arange(N) / FS x np.sin(2 * np.pi * F * t) def nonlinear_block(v): return A * np.tanh(v) def open_loop(x): return nonlinear_block(x) def closed_loop(x): y np.zeros_like(x) for i, xi in enumerate(x): y_prev 0.0 for _ in range(200): y_next nonlinear_block(xi - BETA * y_prev) if abs(y_next - y_prev) 1e-10: break y_prev y_next y[i] y_prev return y def thd(y): spec np.fft.rfft(y) mag np.abs(spec) # 采样时长为 0.02sFFT 频率分辨率为 50Hz # 1kHz 正弦对应的 FFT 索引是 20 fund_idx int(round(F / (FS / N))) fundamental mag[fund_idx] harmonics np.sqrt(np.sum(mag[2 * fund_idx:] ** 2)) return harmonics / fundamental y_ol open_loop(x) y_cl closed_loop(x) print(fopen-loop peak {np.max(np.abs(y_ol)):.3f}) print(fclosed-loop peak {np.max(np.abs(y_cl)):.3f}) print(fopen-loop THD {thd(y_ol) * 100:.2f}%) print(fclosed-loop THD {thd(y_cl) * 100:.2f}%)运行后输出类似open-loop peak 3.762 closed-loop peak 3.024 open-loop THD 8.xx% closed-loop THD 2.xx%具体小数点和量化方式有关重点看量级。开环输出幅度更大但 THD 明显偏高闭环输出幅度变小同时 THD 大幅下降。2.3 运行结果和波形特征怎么理解在alpha tanh这种模型里失真的典型表现是正弦波的峰值被“压平”波形看起来像圆角削顶。开环时输入峰值 1.0 直接驱动非线性块。tanh(1.0)已经明显偏离线性所以输出波形的顶部和底部被压缩。由于tanh是奇函数正半周和负半周仍然对称但谐波已经出现。闭环时每个时刻真正进入非线性块的信号是e x - β*y输入峰值 1.0 减去输出的一部分反馈后e的峰值明显小于 1.0。换句话说非线性块的工作范围被压缩到了更接近线性的区域于是输出波形更接近正弦。这里要特别注意一个容易踩的坑不要只看“输出变小”就认为负反馈是通过缩小信号换来了低失真。如果你想让闭环输出和开环输出幅度一致则需要提高闭环输入幅度。在不超过前级驱动能力和放大器饱和极限的前提下同等输出幅度下负反馈版本依然有更小的失真。实验里用同一个输入幅度只是为了更直观地观察失真改善方向。3. 把实验搬到真实电路共射放大器里的发射极电阻3.1 为什么共射放大器的非线性会产生失真在 NPN 双极型晶体管共射放大器中集电极电流和基极-发射极电压之间的关系接近指数关系Ic ≈ Is * exp(Vbe / VT)其中VT是温度电压当量常温下约为 26mV。这意味着Vbe稍微变化Ic的变化并不是线性的。当输入信号幅度比较小时整个工作点附近的小区间还可以近似看成直线一旦输入信号幅度变大输出波形就会偏离正弦产生谐波。如果没有发射极电阻大信号下的输出失真会比较明显。常见的现象是输入增大后输出波形的正半周和负半周变化不对称或者顶部变胖、底部变瘦。3.2 发射极电阻是负反馈在晶体管发射极串入一个电阻Re后情况会发生变化。设基极输入电压为Vb发射极电压为Ve Ie * Re则Vbe Vb - Ie * Re当Ie增大时Re上的压降增大Vbe会自动减小。而Vbe减小又会限制Ie继续增大。这个机制就是负反馈电路用“电流变大”这件事去反过来削弱驱动电压使电流变化更平稳。从反馈分类上看这是串联电流负反馈。发射极电阻采样的是发射极电流反馈电压和输入电压串联叠加最终作用于Vbe。电压增益也会随之改变。小信号下无反馈时电压增益大约为-Rc / re有发射极电阻时电压增益大约为-Rc / (Re re)其中re ≈ 26mV / Ie当Re远大于re时增益主要由Rc和Re的比值决定而不是由晶体管参数决定这是负反馈带来的最大工程价值增益更稳定失真也更低。3.3 用示波器或仿真软件做真实实验如果你要在真实电路板或者仿真软件里做这个实验可以按下面的思路搭一个共射放大电路电源电压 12V集电极电阻Rc 3.3kΩ发射极电阻Re 330Ω基极偏置电阻使用分压网络保证静态工作点落在线性区输入使用 1kHz 正弦波先从小幅值开始测量步骤如下先把输入幅度设到很小的值例如 5mV记录输出波形和增益。逐步增大输入信号直到输出波形出现肉眼可见的失真。记录此时的开环输出波形和 THD。如果需要对比可以通过调整电路开关切换是否接入发射极电阻。接入反馈电阻后保持输出幅度接近原先水平再次测量 THD。在真实电路里验证结果不会像 Python 模型那么干净因为示波器探头、信号源自身失真、电源纹波都会进入测量结果。所以测量前先确认信号源的失真比被测放大器低不要一上来就用一个本身已经明显失真的信号源去测 THD。这里有一个很典型的反面案例有人在反馈电阻Re上并联了一个大电容想提高交流增益结果发现失真不但没有改善反而和没有反馈时几乎一样。原因是电容对交流信号相当于短路把反馈电阻的作用绕过了交流负反馈被消除。所以音频放大电路里如果设计目标就是低失真通常不会把发射极电阻完全旁路。4. 关键参数反馈深度、环路增益和稳定性4.1