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

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

然后尝试通过将麦克风1连接到L通道,将麦克风2连接到R通道,使用连接到我电脑立体声麦克风的两个计算机单声道麦克风进行现实世界录音。在安静的房间里聊天时,我会在后台播放一些音乐来进行测试。

但是,运行FastICA并不会完全分离信号。麦克风的质量是否可能太差?在运行FastICA之前,我需要对记录的WAV文件(16位,带符号PCM,44100Hz)做任何事情吗?

您可以在此处下载记录。

#1 楼

原始形式的ICA仅适用于相同步观测混合物。如您所描述的,使用麦克风会引起其他海报指出的相位延迟。然而,该相位延迟可以被利用。 DUET是在延迟存在下处理立体声分离的最著名算法。链接断开,但您要查找的参考文献在这里> http://eleceng.ucd.ie/~srickard/bss.html。

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

评论


$ \ begingroup $
一个问题-如果混音来自多个在空间上分离的麦克风...那么我们如何才能具有相位同步性呢?...在​​所有文本中,我看到普遍使用了多个麦克风的示例,但是如果相位同步是一个问题,为什么不提及呢?我只是想在这里理解,我是ICA领域的新手。
$ \ endgroup $
–太空
2011年12月6日16:09

$ \ begingroup $
@Mohammad:我怀疑其他应用程序中存在相位同步,并且他们只是使用音频应用程序使读者更熟悉它。
$ \ endgroup $
– Endolith
2011年12月6日在20:10

$ \ begingroup $
@Mohammad间隔麦克风可以使一个信号源具有相位同步性。想象一个源被两个麦克风等距放置在源的两侧捕获。从信号源到麦克风的路径长度在每种情况下都是相同的,并且两个麦克风都将以同相方式接收信号,但仅针对该信号源。您可以沿不同的空间尺寸等距添加更多麦克风,以进一步抑制不想要的信号。一些EEG分析技术可以利用这一点。您还应该注意,每个麦克风之间的相位延迟将是频率的函数(由于波长)
$ \ endgroup $
–丹·巴里
2011-12-7 11:54

$ \ begingroup $
@DanBarry感谢Dan-关于EEG的有趣观点。让我澄清一下-我当然清楚地知道,如果传感器与信号源的距离相等,我们将得到相同的延迟... :-)我试图达到的目标是无法控制此类情况的应用,(房间里有很多传感器),据说ICA在这种情况下可以工作-但在99%的情况下,我们将没有相位同步-如果在这种情况下,它被认为是一种有效的算法-但对这些相位问题很敏感-那么这里缺少什么?...谢谢!
$ \ endgroup $
–太空
2011年12月8日17:01

$ \ begingroup $
@endolith是的,这是一个不错的解决方案,而且有效!我也曾在2003年想到过类似的解决方案,但很失望地找到类似的解决方案,但我的发现与我的发现有很大不同,因此我设法申请了专利。幸运的是,我早在2004年就成为第一个开发实时源分离算法的人。原始演示在这里> audioresearchgroup.com/main.php?page=Demos,新的改进方法可以在视频演示中看到此处> riffstation.com
$ \ endgroup $
–丹·巴里
2011-12-13 12:46



#2 楼

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


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


我想这是通道之间的延迟的原因。如果仔细观察这两个波形,您可能会发现某些声音在一个声道中的出现要比另一声道更快,其余的反之亦然。

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

评论


$ \ begingroup $
我已经尝试过了。正如您所建议的,这应该是一个延迟问题。通过混合单独的录音,FastICA产生了几乎完美的结果。我需要找到一些方法来应对延迟。
$ \ endgroup $
–杰里米
2011-12-4 15:54



$ \ begingroup $
@Jeremy:我想您需要一个不同的算法。
$ \ endgroup $
– Endolith
2011-12-05 3:02

$ \ begingroup $
您知道有什么可以应对延迟的bss算法吗?
$ \ endgroup $
–杰里米
2011-12-5 14:53

$ \ begingroup $
实际上,当我录制并拍手以产生很大的尖锐声音时,我不会注意到任何大胆的延迟。
$ \ endgroup $
–杰里米
2011-12-5 14:55

$ \ begingroup $
@endolith您可能是对的-一些新信息-我检查了脚注,很显然,我的书的作者确实说过,他认为所有信号都不会相对于彼此延迟。 :-/换句话说,混合矩阵只是一个改变幅度的矩阵。嗯现在更加混乱了。 :-)
$ \ endgroup $
–太空
2011-12-12 18:49

#3 楼

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

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