【发布时间】:2013-03-08 20:02:49
【问题描述】:
我制作了一个使用 WebRTC DSP 库(AEC、NS、AGC、VAD)的软件。现在我需要知道每个算法使用什么算法来写我的硕士论文,但我没有找到任何相关信息。
有人知道这个库的算法,特别是回声消除(例如 NLMS,我知道它很常用,但我不知道 WebRTC 是否也使用它)。
我已经尝试了解查看源代码的算法,但我还不够了解。
提前致谢!
【问题讨论】:
我制作了一个使用 WebRTC DSP 库(AEC、NS、AGC、VAD)的软件。现在我需要知道每个算法使用什么算法来写我的硕士论文,但我没有找到任何相关信息。
有人知道这个库的算法,特别是回声消除(例如 NLMS,我知道它很常用,但我不知道 WebRTC 是否也使用它)。
我已经尝试了解查看源代码的算法,但我还不够了解。
提前致谢!
【问题讨论】:
我刚刚成功地为 android 使用了独立的 WebRTC aecm 模块。还有一些提示:
1.最重要的是“延迟”这个东西,你可以在dir中找到它的定义:
..\src\modules\audio_processing\include\audio_processing.h
引用:
设置|延迟|在 AnalyzeReverseStream() 接收到 远端帧和 ProcessStream() 接收近端帧 包含相应的回声。在客户端,这可以是 表示为延迟 = (t_render - t_analyze) + (t_process - t_capture)
在哪里,
- t_analyze 是一帧传递给 AnalyzeReverseStream() 的时间,t_render 是同一帧的第一个样本的时间 由音频硬件渲染。
- t_capture 是音频硬件捕获帧的第一个样本的时间,t_pull 是传递同一帧的时间
ProcessStream()。
如果您想在独立模式下使用 aecm 模块,请确保您严格遵守此文档。
2.AudioRecord 和 AudioTrack 有时会阻塞(由于最小化缓冲区大小),因此在计算延迟时,不要忘记为其添加阻塞时间。
3.如果你不知道如何编译aecm模块,可以先学习Android NDK,模块src路径为
..\src\modules\audio_processing\aecm
顺便说一句,这个博客可能对原生开发有很大帮助。和调试。
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/
希望这对你有帮助。
【讨论】:
int16_t *,这意味着 short * 大多数时间。
从WebRtc中AGC算法的代码检查来看,与http://www.ti.com/lit/wp/spraal1/spraal1.pdf中的描述非常吻合
【讨论】:
它基于 NLMS,但具有可变步长 (mu)。
【讨论】: