【问题标题】:Acoustic Echo Cancellation algorithm in MatlabMatlab中的声学回声消除算法
【发布时间】:2015-08-01 13:02:43
【问题描述】:

我和我的同事正在 ADI DSP 上开发声音和语音处理模块。由于我们的单个麦克风和扬声器靠近,我们一直在经历一些重要的回声。我们想实现一个基于 NLMS 的算法来减少这种回声。

我首先想在 Matlab 中实现它并测试算法,但我仍然遇到一些问题。我想我的算法可能存在一些理论问题。我很难理解算法中的“所需信号”是什么,因为我无法访问未损坏的信号。

这是我在 Matlab 中实现此功能的简单方法的概述。 Simulink diagram here

Link to Simulink code (.slx)

由于 Simulink 中的“代数循环错误”,现在代码无法编译,但我感觉这个问题还有更多问题。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否阅读过有关代数环的文档文章? de.mathworks.com/help/simulink/ug/algebraic-loops.html
  • 我可能完全误解了您的问题,但是您的意思是“无法访问未损坏的信号”?你不能关闭扬声器并录制音频样本吗?您的回声不是字面上来自麦克风的输入也通过扬声器传输了一点延迟吗?
  • 可以发一张模型截图吗?看看ti.com/lit/an/spra063/spra063.pdf 的算法图片,它应该有助于对此进行建模。
  • Daniel,是的,我已阅读文档,但似乎无法找到消除此代数循环的方法。 Andras Deak,这必须是一个实时过程。所以麦克风和扬声器总是打开的。 @Navan,我已经发布了截图。在链接中看不到吗?

标签: matlab echo simulink cancellation


【解决方案1】:

您的模型不完全正确。对于声学回声消除,您正在使用自适应滤波器对房间进行建模。您正在使用自适应滤波器识别房间特征。完成此操作后,您可以使用自适应滤波器识别来自扬声器的远端信号返回麦克风的部分,并从麦克风信号中减去该部分以消除回声。

对于您的自适应滤波器,您的输入应该是来自远端的信号,这将是进入房间内扬声器的信号。您想要的信号是房间内麦克风发出的信号。麦克风信号包含来自房间内人的声音的信号,以及来自扬声器的一部分声音,即回声。

Sound from far end          ----|In               | Out (You can ignore this)
                                | Adaptive Filter |
Sound from local microphone ----|Desired          | Error

在此模型中,自适应滤波器的错误输出信号是您想要的无回声信号。这是因为误差是通过从期望值中减去自适应滤波器输出来计算的,这基本上是消除回声。

要在 Simulink 中模拟这个系统,您需要一个过滤器来表示房间。您可以为此使用普通的 FIR 滤波器。您应该能够在线获得房间脉冲响应。这些通常是长(~1000)缓慢衰减的脉冲响应。您的音频源可以代表来自扬声器的信号。您将相同的音频信号输入此房间响应滤波器,您将获得所需的信号。将两者馈入自适应滤波器将使自适应滤波器适应房间响应滤波器。

【讨论】:

  • 非常感谢纳文。这很可能会帮助我找出我的问题。
  • 我意识到您的实现没有成功,因为 NLMS 算法倾向于调整 FIR 滤波器权重以减少误差信号。在您的情况下,我们不希望减少错误信号,因此当过滤器尝试适应时我们会得到一个奇怪的结果。由于错误是输出——在我们的例子中是期望的,而输出是预测的回波,为了让它起作用,我们不需要输入期望的实际回波吗?但我无法获得这样的信号。您还有其他解决方案吗?
  • 最初看这个模型确实感觉很奇怪,因为错误信号就是你想要的信号。该模型的假设是远端信号和近端信号没有相关性。即使自适应滤波器试图最小化误差,由于相关假设,它也不能低于消除回声。奇怪的结果是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多