☰
负反馈如何消除放大器失真:原理、THD实验与电路实践
2026/10/15 16:49:02 网站建设 项目流程

负反馈是放大器设计里最容易被误解的概念之一。很多初学者知道“负反馈是把输出的一部分送回输入端,和输入相减”,但一旦被问到它到底如何消除失真,就只剩下一句“反馈会让增益降低,所以更稳定”的模糊记忆。这个说法没有错,但它没有解释最关键的问题:增益降低和失真降低之间的数量关系是什么,反馈环路内部到底发生了什么。

这篇文章用一个尽量简洁的非线性模型,把开环放大器和带负反馈的闭环放大器放在一起做对比实验。你会看到一个具体的正弦波输入、一个会饱和的非线性放大环节,以及 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.02s,FFT 频率分辨率为 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(f"open-loop peak = {np.max(np.abs(y_ol)):.3f}") print(f"closed-loop peak = {np.max(np.abs(y_cl)):.3f}") print(f"open-loop THD = {thd(y_ol) * 100:.2f}%") print(f"closed-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 正弦波,先从小幅值开始

测量步骤如下:

  1. 先把输入幅度设到很小的值,例如 5mV,记录输出波形和增益。
  2. 逐步增大输入信号,直到输出波形出现肉眼可见的失真。
  3. 记录此时的开环输出波形和 THD。
  4. 如果需要对比,可以通过调整电路开关切换是否接入发射极电阻。
  5. 接入反馈电阻后,保持输出幅度接近原先水平,再次测量 THD。

在真实电路里,验证结果不会像 Python 模型那么干净,因为示波器探头、信号源自身失真、电源纹波都会进入测量结果。所以测量前先确认信号源的失真比被测放大器低,不要一上来就用一个本身已经明显失真的信号源去测 THD。

这里有一个很典型的反面案例:有人在反馈电阻Re上并联了一个大电容,想提高交流增益,结果发现失真不但没有改善,反而和没有反馈时几乎一样。原因是电容对交流信号相当于短路,把反馈电阻的作用绕过了,交流负反馈被消除。所以音频放大电路里,如果设计目标就是低失真,通常不会把发射极电阻完全旁路。

4. 关键参数:反馈深度、环路增益和稳定性

4.1

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询