Webrtc AGC 算法原理介绍(三)
来源:互联网 发布:淘宝直通车基础题答案 编辑:程序博客网 时间:2024/06/13 08:59
零、前言
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量在这几篇文章中描述清楚。
一、WebRtcAgc_AddMic
WebRtcAgc_AddMic用在自适应模拟模式下(kAdaptiveAnalog),其流程如下:
WebRtcAgc_AddMic 流程图
这个流程第一步是根据帧长和采样率继续分帧,具体如下:
这里注意32k时候因为在apm里头已经做了分频,10ms的数据分成了低频16K的10ms数据和高频16k的10ms数据,因此上表32000子帧个数10和subFrames为160。这些子帧用下面用来计算能量信息。
第二部分是如果麦克风最大值大于模拟值就计算缓慢增益的序号对应的值。
获取了目标放大序号后,缓慢调整放大表序号gainTableIdx,每次调整1单位。并且在kGainTableAnalog表中取出增益系数。kGainTableAnalog是Q12的,最大放大倍数是3.16倍,也就是10db。
接下来这个放大倍数对输入in_mic和in_mic_H(32K)使用。
对输入信号计算长度为L的M个子帧的最大M个能量,作为信号包络,以及M个低频8K的能量。最后对每一个subFrames计算VAD,这个为vadMic,意思是Microphone刚刚收到信号的VAD,其中包含了回声和噪声。
二、WebRtcAgc_VirtualMic
从上面的流程图可以看出WebRtcAgc_VirtualMic函数在kAdaptiveDigital的时候调用。其中包括一个虚拟的音量调节部分。其详细的流程图如下:
在第一个部分通过零率和能量大小来判断是否是低能信号(lowLevelSignal)。
16KHz低信号的判决维度,其中黑色的地方是低能量lowLevelSignal = 1,白色的地方不是低能量或者说能量比较大lowLevelSignal = 0。这里能量的大小判断主要目的还是做一个VAD判决,保证处理的信号是语音而不是噪音。
此处获得低能量信号标志在WebRtcAgc_ProcessDigital中使用,详细内容在该函数再讲述。另外一个控制模式kAgcModeAdaptiveAnalog和kAgcModeAdaptiveDigital进入WebRtcAgc_ProcessAnalog流程。
//Four modes review.enum{ kAgcModeUnchanged, kAgcModeAdaptiveAnalog, kAgcModeAdaptiveDigital, kAgcModeFixedDigital};if ((stt->agcMode < kAgcModeFixedDigital) && ((stt->lowLevelSignal == 0) || (stt->agcMode != kAgcModeAdaptiveDigital))){ if (WebRtcAgc_ProcessAnalog(agcInst, inMicLevelTmp, outMicLevel, stt->vadMic.logRatio, echo, saturationWarning) == -1){ return -1; }}
总的来说,kAgcModeAdaptiveAnalog一定进入WebRtcAgc_ProcessAnalog流程;kAgcModeAdaptiveDigital在位大能量的时候进入WebRtcAgc_ProcessAnalog流程;而kAgcModeFixedDigital不会调用该流程。
VirtualMic的第二个流程是根据输入麦克风等级调节输入找到增益表,然后在增益表中找到对应的增益系数。
上图是增益图。可以看出随着Index,Gain指数递增。最大是31.6倍,也就是30dB放大;最小是0.0996,,也就是-20dB衰减。之所以用了两条曲线,估计是设计者认为压缩和衰减需要不同的斜率。
确定了GainIdx的由micVol和maxAnalog以及输入的micLevelIn和micRef(micLevelIn的旧值)控制。如果在这次和上次micLevelIn有不一样的情况下,GainIdx为127。否者
最后调用WebRtcAgc_AddMic流程。
- Webrtc AGC 算法原理介绍(三)
- Webrtc AGC 算法原理介绍(一)
- Webrtc AGC 算法原理介绍(二)
- Webrtc AGC 算法原理介绍(四)
- #Webrtc AGC 算法原理介绍(五)
- Webrtc AGC 算法原理介绍(六)
- webrtc(一) agc
- webrtc agc
- Webrtc 回声消除 三(NS、VAD、AEC、AGC设备端终结篇)
- WebRTC之AGC自动增益控制
- 单独编译和使用webrtc音频增益模块(AGC)
- Android 单独抽取 WebRtc-AGC(音频增益) 模块
- WebRTC GCC算法介绍
- WebRTC GCC算法介绍
- 自动增益(AGC)算法小结
- AGC算法分析
- 自适应增益AGC算法
- WebRTC 初览(3) getUserMedia 介绍三
- 使用Itext做pdf文档下载--返回前端类型为ResponseEntity(byte[])
- iOS App转让的版权归属、管理更新、中英文公司名称问题
- bathsize问题
- ggplot2学习笔记之颜色标度
- 什么是网关
- Webrtc AGC 算法原理介绍(三)
- 自定义Toast
- 数据链路层
- oracle 维护
- df命令和du命令统计同个目录不同
- 物理层
- 图片验证码识别平台
- VS2010 Intel OpenCL安装与配置
- ionic开发篇之踩坑集