【问题标题】:WebRTC AGC (Automatic Gain Control)WebRTC AGC(自动增益控制)
【发布时间】: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、压缩增益和更多参数的综合效果。我注意到这可能不是很有帮助,但我需要确保它有效,以便我可以使用相同的 .如果您已经解决了问题,请分享

标签: c++ signal-processing webrtc


【解决方案1】:

这是用于 Webrtc_AGC 的操作序列:

  1. 创建 AGC:WebRtcAgc_Create
  2. 初始化 AGC:WebRtcAgc_Init
  3. 设置配置: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 以供参考。

【讨论】:

    【解决方案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);

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 2021-02-28
      • 2012-09-02
      • 2014-06-19
      • 2016-09-16
      • 2014-12-16
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多