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 按照您的预期放大输入信号吗?也看看这个answer;WebRtcAgc_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_level
对audio 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(自动增益控制)的主要内容,如果未能解决你的问题,请参考以下文章