2019-08-12  739 views 3

WebRTC中AGC模块分析(上)

拖了快一个月了,终于有时间来将所研究的WebRTC中的自动增益控制AGC)模块的内容进行下系统的整理。目前个人了解的还很初步,有很多东西还没有研究透彻,所以这部分分析整理可能会比较浅薄,后续随着研究的深入,内容会不断完善。

本次先更新第一部分,包括WebRTC的AGC模块的介绍、框图、函数关系图和函数功能介绍等。下一期更新具体的函数原理内容。

1.AGC模块的简介和性能结果

WebRTC的音频处理模块分为语音活动检测(VAD)、降噪(NS和NSX)、回音消除(AEC)、回声控制(AECM)和音频增益(AGC)等5个部分。本次我要介绍的是其中的自动增益控制(AGC)部分,其代码主要位于WebRTC的modules\audio_processing\agc\legacy中。

什么时候用得到增益控制呢?实际上,当对语音的响度进行调整的需要时,就要做语音自动增益(AGC)算法处理,平时的语音聊天都会用到这个算法。

最简单的方法就是对所有的音频采样乘上一个增益系数,由于人的听觉对所有频率的感知不是线性的,所以会导致这样处理以后,听起来有的频率增强了、有的频率削弱了,导致了语音失真的方法。所以,要让整个频段听起来响度增益都是相同的,就必须在遵循响度曲线基础上,在响度这个尺度做增益,即按照响度曲线对语音的频率进行加权。

本工程以10ms为单位对语音进行模拟和数字增益的自适应调整。增益的调整仅在语音活动期间进行,语音的长度必须依照程序中所给的长度(8000Hz时为80个点,16000Hz、32000Hz和48000Hz为160个点)。本程序必须在进行回声消除后,在近端麦克风信号进行调用。

在这里介绍的时候,我以Github上的工程(https://github.com/cpuimage/WebRTC_AGC)为例进行讲解WebRTC中AGC的过程。

该方法的效果,如图1.1所示。

图1.1 语音效果图像

2.AGC的整体框图和函数关系图

2.1 AGC模块整体框图

图2.1 AGC模块整体框图

2.2 AGC模块函数关系图

表2.1 AGC模块函数关系图
表2.2 AGC模块函数功能解释
表2.3 其它相关函数功能及解释

2.4 使用到的常量

1.全通滤波器因子:

static const uint16_t kResampleAllpass1[3] = {3284, 24441, 49528};

static const uint16_t kResampleAllpass2[3] = {12199, 37471, 60255};

2.AGC的四种工作模式

表2.4 AGC的四种工作模式

2.5 使用到的结构体

    WebRtcAgc_config是配置targetLevelDbfs和compressionGaindB用于调节agc的动态范围。

3 条留言  访客:1 条  博主:1 条   引用: 1 条

  1. zxchaobin

    作者你好,最近在看webrtc_agc,在vad之前首先进行了downsampleBy2,将16kHz或8kHz都降到4kHz。downsampleBy2函数用到了全通滤波器因子,请问这部分是什么意思,它是如何实现降采样的呢?
    万分感谢!

    • 小奥 博主

      @zxchaobin AGC这部分其实我看过去蛮久的了,虽然是8月份发到博客上。我刚刚稍微看了下代码,感觉这部分之所以要进行下采样可能与WebRTC中VAD的下采样有异曲同工之妙。具体我再研究下回复你。

来自外部的引用: 1 条

  • 个人学习笔记整理 – 小奥の部落格

给我留言

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: