从另一个音频流中“减去”一个音频流

信息处理 过滤器 声音的 背景减法
2021-12-28 21:09:13

我是一名长期的软件工程师,但在信号/音频处理方面的经验几乎为零。我有兴趣通过我们的一个音频组件的用例来了解信号处理。注意:这对我来说只是一个学习练习......最终结果是否有用并不是首要任务。

我们有一个组件 (A),它产生音频(通过扬声器)。我们有另一个组件 (B) 记录该音频(通过一个简单的麦克风)。

我想做的是用A来录制B的音频。然后,如果可能的话,我想比较这两个流。目标是删除流 A 中存在的音频 - 保留录制期间存在的环境条件 - 我知道完全删除是不可能的。

我意识到存在相位和幅度问题。我也意识到这不仅仅是从 A 中“减去”B 的简单问题。也就是说,我的假设是你可以从 A 中减去 A。

我想了解如何解决这个问题。同样,这对我来说是一次学习经历(没有截止日期);我非常愿意从头开始。

任何建议/建议将不胜感激。

3个回答

此设置与系统识别问题有一些相似之处,其中 A 将是您要估计传递函数的 LTI 系统的输入,B 是输出;而“环境声音”是附加噪声。如果您的转换器/放大器/换能器质量不错,则 LTI 假设是合理的。

所以步骤是:

  • 使用系统识别技术来找到最小化 $\hat{h} \star A$ 和 $B$ 之间的均方误差的 FIR 滤波器 $\hat{h}$。一个简单的方法(可能不是这里最合适)是将 $A$ 和 $B$ 的互相关除以 $A$ 的自相关。在这里解释限制是它不适用于长录音(您可能更好地计算您对较短片段的估计并将它们平均) - 并且音乐不是发送到系统以估计其响应的最佳“探测”信号。h^ that minimizes the mean-square error between h^A and B. A simple method, which might not be the most suitable here, is to divide the cross-correlation of A and B by the autocorrelation of A.
  • 您现在可以使用 $\hat{h} \star A$ 作为麦克风“听到”的原始信号 A 的估计值,然后从 $B$ 中减去它以检索环境声音。h^A as an estimate of the original signal A as "heard" by the microphone and subtract it from B to retrieve the ambient sound.

我使用音乐剪辑(A)对此进行了尝试,应用混响和轻微放大器模型来模拟房间中的扬声器,然后混合猫音频样本以获得(B),然后估计来自( A, B) 对,然后从 B 中减去过滤后的 A。这显示了一些结果,但更好的 FIR 估计技术可能会有所帮助!(请注意,我将估计的 IR 截断为其前 5000 个样本以加快计算速度)。

请注意,有一些算法可以自适应地执行此操作(例如LMS)。如果 $A$ 和 $B$ 是实时处理而不是离线处理,这可能更适合您的问题。这种算法构成了电信中使用的回声消除系统的基础。A and B are processed in realtime rather than offline. Such algorithms form the basis of echo cancellation systems used in telecommunications.

不允许输出精确的环境声音的问题是:

(a) 响度差 (b) 由于时间延迟造成的相位差。

因此总体上 B 记录的信号将是(假设房间表现为 LTI 系统)$y_B[n]=\sum_{k=0}^{p}\alpha_k x_A[nk]+x_{amb}[n] )=(x*h)[n]+x_{amb}[n]$,其中 $h[n]=\alpha_n$ 左右是房间脉冲响应。这里 $x_{amb}[n]$ 是 B 位置的环境信号。现在,$z[n]=x_A[n]-y_B[n]$ 你可以看到你将有 $z[n]\neq x_{amb}[n]$,除非你知道房间脉冲响应或其估计。为了获得洞察力,您可以通过减法并查看结果信号的频谱图并与环境信号且仅 A 的信号频谱图进行比较来继续前进。yB[n]=k=0pαkxA[nk]+xamb[n])=(xh)[n]+xamb[n], where h[n]=αn or so the room impulse response. Here xamb[n] is the ambient signal at B's location. Now, z[n]=xA[n]yB[n] you can see that you will have z[n]xamb[n], unless you know the room impulse response or its estimate. To get the insight you may go forward by doing the subtraction and seeing the spectrogram of the resulting signal and comparing with the ambient signal's and only A's signal spectrogram.

另一种方法是将麦克风放置在靠近 A 的位置,以最大限度地减少房间脉冲响应的影响,这种技术用于降噪耳机中,可以消除环境噪声。 http://en.wikipedia.org/wiki/Noise-cancelling_headphonese

这听起来像是“声学回声消除”的标准案例。该主题存在大量专利、研究论文和学术论文(从 1967 年开始,我相信 MM Sondhi 的论文“自适应声学回声消除器”)。

一个简单的概述在这里http://supportdocs.polycom.com/PolycomService/support/global/documents/support/technical/products/voice/vortex_choose_acoustic_echo_canceller.pdf

这是一本关于该主题的不错的书http://www.amazon.com/Advances-Network-Acoustic-Cancellation-Processing/dp/3540417214