Webrtc AGC 算法原理介绍(一)

Webrtc AGC 算法原理介绍(一)

标签(空格分隔): 音频算法


零、前言

本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量再这几篇文章中描述清楚。

一、AGC模块的结构与简介

较新的webrtc已经把原来的agc模块移动到了一个叫做legacy的文件夹。这个回头再写文章详细介绍。我还是从旧的agc算法开始讲起。Webrtc 的AGC算法的结构如下
   |–\include |–gain_control.h
agc—|–analog_agc.c
   |–analog_agc.h
   |–digital_agc.c
   |–digital_agc.h

gain_control.h是包装的头文件,在apm里头gain_control_impl调用。主要包括了接口定义函数和参数配置。
对于该文件着预先说一下配置的含义。

enum
{
    kAgcModeUnchanged,
    kAgcModeAdaptiveAnalog,
    kAgcModeAdaptiveDigital,
    kAgcModeFixedDigital
};
typedef struct
{
    int16_t targetLevelDbfs;   // default 3 (-3 dBOv)
    int16_t compressionGaindB; // default 9 dB
    uint8_t limiterEnable;     // default kAgcTrue (on)
} WebRtcAgc_config_t;

枚举是agc的使用模式,一个是kAgcModeAdaptiveAnalog、kAgcModeAdaptiveDigital和kAgcModeFixedDigital是常用的三种模式。kAgcModeAdaptiveAnalog带有模拟音量调节的功能。kAgcModeAdaptiveDigital是可变增益agc,但是不调节系统音量。kAgcModeFixedDigital是固定增益的agc。
WebRtcAgc_config_t是配置targetLevelDbfs和compressionGaindB用于调节agc的动态范围。

analog_agc.h包括模拟的agc结构体声明,而gain_control.h中的接口函数在analog_agc.c中实现。

函数 功能
WebRtcAgc_AddFarend 计算远端信号的语音活度VAD
WebRtcAgc_AddMic 计算麦克风输入的语音活度,对于非常小的信号会乘增益系数
WebRtcAgc_VirtualMic 用虚拟的麦克风音量来调节幅度
WebRtcAgc_Process vad核心处理
WebRtcAgc_set_config 设置VAD参数

另外在analog_agc.c还包括以下函数:

函数 功能
WebRtcAgc_UpdateAgcThresholds
WebRtcAgc_SaturationCtrl
WebRtcAgc_ZeroCtrl
WebRtcAgc_SpeakerInactiveCtrl
WebRtcAgc_ExpCurve
WebRtcAgc_ProcessAnalog

digital_agc.h包括数字的agc结构体声明,Vad结构声明,而gain_control.h中的接口函数在analog_agc.c中实现。

函数 功能
WebRtcAgc_ProcessDigital
WebRtcAgc_AddFarendToDigital
WebRtcAgc_InitVad
WebRtcAgc_ProcessVad
WebRtcAgc_CalculateGainTable

你可能感兴趣的:(自动增益控制)