我正在测试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 级别匹配。但我看到的不是这样。
WebRtcAgc_Process()
是否应该适当设置micLevelOut
并保持不变?... - TheCodeArtistWebRtcAgc_Process()
的小描述,帮助你理清期望。 - TheCodeArtistWebRtcAgc_Process()
函数是否将正弦波输入视为非语音段并因此跳过它?您可以尝试传递实际的语音片段并进行测试吗? - TheCodeArtistvadLogRatio
是从传递给WebRtcAgc_Process
的micLevelIn
派生出来的。如果将其设置为**0
**,则它始终小于计算得出的stt->vadThreshold
。因此,输入样本不会被检测为语音,因此会原封不动地传递出去。只是一个想法... - TheCodeArtist