FastICA 无法在真实世界的录音中分离声音信号

信息处理 伊卡 Python
2022-01-10 07:52:50

我编写了一个程序来使用Python MDP FastICA 示例上的代码在立体声 WAV 文件上执行 FastICA

通过音频示例,我得到了非常好的结果。

然后我尝试使用连接到我电脑中立体声麦克风的两个计算机单声道麦克风进行真实世界的录音,方法是将麦克风 1 连接到 L 通道,将麦克风 2 连接到 R 通道。当我在安静的房间里说话时,我通过在背景中播放一些音乐来测试。

但是,运行 FastICA 根本不会分离信号。是不是麦克风的质量太差了?在运行 FastICA 之前,我需要对录制的 WAV 文件(16 位,签名 PCM,44100Hz)做任何事情吗?

你可以在这里下载录音

3个回答

原始形式的 ICA 仅适用于相位同步观察混合物。正如其他海报所指出的那样,使用您所描述的麦克风会引入相位延迟。然而,这种相位延迟可以非常有用。在存在延迟的情况下处理立体声分离的最著名算法是 DUET。链接已损坏,但您正在寻找的参考资料在这里 >http://eleceng.ucd.ie/~srickard/bss.html。

这是您应该寻找的论文 >
A. Jourjine、S. Rickard 和 O. Yilmaz,不相交正交信号的盲分离:从 2 个混合物中分离 N 个源,IEEE 声学、语音和信号处理会议 (ICASSP2000),第 5 卷,第 2985-2988 页,土耳其伊斯坦布尔,2000 年 6 月

正如我在页面下方所说的:

事实证明,当信号以不同的延迟出现在不同的传感器通道中时,ICA 实际上并不能很好地工作;它假设瞬时混合(信号在所有不同的录音中彼此完美同步)。延迟在表演者和麦克风的真实情况下发生,因为每个源与每个麦克风的距离不同。

我猜想频道之间的这种延迟是原因。如果您仔细观察这两个波,您可能会发现一些声音在一个通道中比另一个通道中出现得更快,而其余的则相反。

为了证明这不是麦克风的质量,您可以尝试使用一个麦克风在不同时间录制两个不同的信号,然后将它们混合在一起,以便每个信号中的一些信号在每个通道中,然后查看 ICA 是否在这种情况下工作.

还有另一种使用二阶统计的算法:AMUSE。

在这里,您可以找到 Python 中的实现。