Webrtc AGC 算法原理介绍(一)

来源:互联网 发布:删除数据库 drop 编辑:程序博客网 时间:2024/05/22 23:11

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 略
0 0
原创粉丝点击