1

我正在尝试使用 WebRtc 库创建一个独立的 AGC。(输入 - wav 文件,输出 - 调整增益的 wav 文件)。但此时我对这个问题有一些问题。

我正在尝试使用在gain_control.h文件中声明的函数。当我使用 WebRtcAgc_Process(....) 时,我获得了适用于整个信号的恒定增益,但不适用于取决于输入信号幅度的非线性增益。

可能我应该使用其他功能来达到我的目的吗?如何通过 WebRTC 库实现 AGC?

4

2 回答 2

3

AGC 的主要目的是提供推荐的系统麦克风音量,用户可以通过操作系统设置该音量。如果您想应用纯数字增益,您可以将其配置为两种模式之一(从modules/audio_processing/include/audio_processing.h,但gain_control.h具有类似模式):

// Adaptive mode intended for situations in which an analog volume control
// is unavailable. It operates in a similar fashion to the adaptive analog
// mode, but with scaling instead applied in the digital domain. As with
// the analog mode, it additionally uses a digital compression stage.
kAdaptiveDigital,

// Fixed mode which enables only the digital compression stage also used by
// the two adaptive modes.
//
// It is distinguished from the adaptive modes by considering only a
// short time-window of the input signal. It applies a fixed gain through
// most of the input level range, and compresses (gradually reduces gain
// with increasing level) the input signal at higher levels. This mode is
// preferred on embedded devices where the capture signal level is
// predictable, so that a known gain can be applied.
kFixedDigital

您可以通过 设置这些WebRtcAgc_Init(),但除非您需要避免开销,否则我建议只使用 AudioProcessing 类。

于 2012-10-03T15:54:11.033 回答
0

参考http://osxr.org/android/source/external/webrtc/src/modules/audio_processing/agc/interface/gain_control.h#0133

增益调整仅在 0135 * 语音活动期间进行。输入语音长度可以是 10ms 或 0136 * 20ms,输出长度相同。

webrtcage_process 快速概览

int WebRtcAgc_Process(void* agcInst,
                    const WebRtc_Word16* inNear,
                    const WebRtc_Word16* inNear_H,
                     WebRtc_Word16 samples,
                     WebRtc_Word16* out,
                     WebRtc_Word16* out_H,
                     WebRtc_Word32 inMicLevel,
                     WebRtc_Word32* outMicLevel,
                     WebRtc_Word16 echo,
                     WebRtc_UWord8* saturationWarning);
于 2015-03-03T15:54:56.173 回答