WebRTC AGC(自动增益控制)

我正在testingWebRTC AGC,但是我必须做一些错误的事情,因为信号只是未经修改而通过。

以下是我如何创build和初始化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. 创buildAGC: WebRtcAgc_Create
  2. 初始化AGC: WebRtcAgc_Init
  3. 设置configuration: 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重复5到7
  9. 销毁AGC: WebRtcAgc_Free

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

尝试这个:


     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);