WebRTC AGC(自动增益控制)

Posted

技术标签:

【中文标题】WebRTC AGC(自动增益控制)【英文标题】:WebRTC AGC (Automatic Gain Control) 【发布时间】:2014-05-07 12:54:42 【问题描述】:

我正在测试 WebRTC AGC,但我一定做错了,因为信号未经修改就通过了。

以下是我创建和初始化 AGC 的方法:

agcConfig.compressionGaindB = 9;
agcConfig.limiterEnable = 1;
agcConfig.targetLevelDbfs = 9;   /* 9dB below full scale */

WebRtcAgc_Create(&agc);
WebRtcAgc_Init(agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000);
WebRtcAgc_set_config(agc, agcConfig);

然后对于每个 10 毫秒的样本块,我执行以下操作:

WebRtcAgc_Process(agc, micData, NULL, 80, micData, NULL, micLevelIn, &micLevelOut, 0, &saturationWarning);

其中micLevelIn 设置为 0。

谁能告诉我我做错了什么?

我预计满量程正弦音会衰减到目标 DBFS 级别;低电平正弦音(即 -30dBFS)将被放大以匹配目标 DBFS 电平。但这不是我看到的。

【问题讨论】:

您确定绝对没有“尖峰”噪声阻止 AGC 按照您的预期放大输入信号吗?也看看这个answerWebRtcAgc_Process() 是否应该适当地设置 micLevelOut 并保留它?... WebRtcAgc_Process() 的简短描述有助于理清您的期望。 WebRtcAgc_Process() 是否将正弦波输入视为非语音段并因此跳过它?您可以尝试通过实际的语音片段并进行测试吗? 请不要将 c++ 代码标记为 C,它会造成混淆。 我用过类似的代码。但是在我的情况下,到目前为止的输出结果为 -1(错误)。无论如何,如果您到目前为止收到任何饱和警告,您可以分享吗?另外,我知道语音输出是产生的 dbfs、压缩增益和更多参数的综合效果。我注意到这可能不是很有帮助,但我需要确保它有效,以便我可以使用相同的 .如果您已经解决了问题,请分享 【参考方案1】:

这是用于 Webrtc_AGC 的操作序列:

    创建 AGC:WebRtcAgc_Create 初始化 AGC:WebRtcAgc_Init 设置配置:WebRtcAgc_set_config 初始化capture_level = 0 对于kAgcModeAdaptiveDigital,调用VirtualMic:WebRtcAgc_VirtualMic 使用capture_level 处理缓冲区:WebRtcAgc_Process 获取从WebRtcAgc_Process返回的输出捕获级别并将其设置为capture_levelaudio buffers 重复 5 到 7 摧毁 AGC:WebRtcAgc_Free

查看 webrtc/modules/audio_processing/gain_control_impl.cc 以供参考。

【讨论】:

【参考方案2】:

试试这个:

agcConfig.compressionGaindB = 9; agcConfig.limiterEnable = 1; agcConfig.targetLevelDbfs = 9; /* 低于满量程 9dB */ WebRtcAgc_Create(&agc); WebRtcAgc_Init(&agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000); WebRtcAgc_set_config(&agc, &agcConfig);

【讨论】:

以上是关于WebRTC AGC(自动增益控制)的主要内容,如果未能解决你的问题,请参考以下文章

自动增益控制AGC的simulink仿真

如何在为音频会议混合音频时自动增益控制 (AGC)

详解 WebRTC 高音质低延时的背后 — AGC

由WebRTC谈起

WebRTC简介(一)

如何基于 ZEGO SDK 实现回声消除自动增益控制降噪功能