WEBRTC系列文章:
WEBRTC AGC 算法原理初识(二)
1、AGC 初识
自动增益控制电路的作用是:当输入信号电压变化很大时,保持接收机输出电压恒定或基本不变。具体地说,当输入信号很弱时,接收机的增益大,自动增益控制电路不起作用;当输入信号很强时,自动增益控制电路进行控制,使接收机的增益减小。这样,当接收信号强度变化时,接收机的输出端的电压或功率基本不变或保持恒定。因此对AGC电路的要求是:在输入信号较小时,AGC电路不起作用,只有当输入信号增大到一定程度后,AGC电路才起控制作用,使增益随输入信号的增大而减少。
为实现上述要求,必须有一个能随外来信号强弱而变化的控制电压或电流信号,利用这个信号对放大器的增益自动进行控制。由上述分析可知,调幅中频信号经幅度检波后,在它的输出中除音频信号外,还含有直流分量。直流分量大小与中频载波的振幅成正比,也即与外来高频信号成正比。因此,可将检波器输出的直流分量作为AGC控制信号。
AGC电路工作原理:可以分为增益受控放大电路和控制电压形成电路。增益受控放大电路位于正向放大通路,其增益随控制电压U0而改变。控制电压形成电路的基本部件是AGC整流器和低通平滑滤波器,有时也包含门电路和直流放大器等部件。
2、WEBRTC 的 AGC算法
AGC是自动增益补偿功能(Automatic Gain Control),AGC可以自动调麦克风的收音量,使与会者收到一定的音量水平,不会因发言者与麦克风的距离改变时,声音有忽大忽小声的缺点。webbrtc中的结构如下:
说明:gain_control.h是包装的头文件,在apm里头gain_control_impl调用。主要包括了接口定义函数和参数配置。
3、主要配置
- include/gain_control.h 里面定义了agc的三种模式,kAdaptiveAnalog、kAdaptiveDigital和kFixedDigital。其中,kAdaptiveAnalog带有模拟音量调节的功能。kAdaptiveDigital是可变增益agc,但是不调节系统音量。kFixedDigital是固定增益的agc。
enum Mode {
// Adaptive mode intended for use if an analog volume control is available
// on the capture device. It will require the user to provide coupling
// between the OS mixer controls and AGC through the |stream_analog_level()|
//