简单的串扰消除(或信号分离)?

信息处理 声音的 源分离
2022-02-08 07:25:20

首先,我对 DSP 很陌生,所以请原谅我没有理解任何基本概念。

我正在使用一个 iOS 应用程序,该应用程序依赖于模拟音频插孔的输入,同时通过输出(耳机等)监控信号。不幸的是,由于输出和输入引线的接近,iOS 设备在足够大的音量下会遭受串扰。

iOS 上的 Garageband 提供了一种称为“串扰预防”的功能,用于通过其放大器建模来监控吉他音频播放。我不知道他们是如何做到的,但这是我想在我的应用程序中做的事情。

我可以访问输出信号,并且无论如何我对输入信号执行 FFT(以执行频谱噪声门控),所以任何使用傅立叶变换的东西都可能很好,因为我正在执行该操作。我很难找到任何解决方案,因为 DSP 对我来说很新。

2个回答

如果我理解正确,您要达到的目标通常称为Acoustic Echo Cancellation在许多情况下,可以有效地使用所谓的自适应滤波算法,例如(归一化)最小均方 ([N]LMS) 算法。在这种情况下,我真的可以推荐 Widrow 和 Stearns 的书Adaptive Signal Processing我相信您会在互联网上找到许多现成的 (N)LMS 算法实现来进行试验。(注意滤波器阶数 - 它需要足够高以捕捉串扰路径的长度。)

此外,正如您提到的您已经在频域工作,您可以查看称为(您猜对了)频域 LMS算法的算法。它们通过所谓的块 LMS算法源自经典的 LMS 算法。在这种情况下,我真的很喜欢 Shynk 的论文:Frequency-domain and multirate Adaptive filtering

自从我结束这个项目已经有好几年了,所以我想我会重新审视我自己的问题,以防有人遇到同样的问题。

在 iOS 设备上消除串扰的主要因素看似简单;将您的音频样本反转到另一个音频通道(将您的正常音频播放到左声道,播放相同的音频但反转到右声道)。

两个声道听起来完全一样,但在输出到扬声器/耳机/等之前会消除音频硬件中的大量串扰。这将使该应用程序本质上是单声道的,但要付出一定的代价来看看它的工作情况。

然而,这不会消除所有的串扰。可能仍然需要软件解决方案。