自动增益控制

WebRTC AGC (Automatic Gain Control)

本文关键字:控制      更新时间:2023-10-16

我正在测试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);

然后对于每个10ms的样本块,我做以下操作:

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

其中micLevelIn设置为0。

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

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

下面是用于Webrtc_AGC的操作顺序:

  1. 创建AGC: WebRtcAgc_Create
  2. 初始化AGC: WebRtcAgc_Init
  3. Set Config: WebRtcAgc_set_config
  4. 初始化capture_level = 0
  5. 对于kAgcModeAdaptiveDigital,调用VirtualMic: WebRtcAgc_VirtualMic
  6. capture_level: WebRtcAgc_Process
  7. 获取WebRtcAgc_Process返回的输出捕获电平并将其设置为capture_level
  8. audio buffers
  9. 重复5到7销毁AGC: WebRtcAgc_Free

检查webrtc/模块/audio_processing/gain_control_impl。Cc供参考。

试试这个:

<>之前agcconfig . compressionaindb = 9;agcConfig。limiterEnable = 1;agcConfig。targetLevelDbfs = 9;/*低于满量程9dB */WebRtcAgc_Create (agc);WebRtcAgc_Init(&agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000);&agcConfig WebRtcAgc_set_config (agc);