单源信号分离

信息处理 matlab 离散信号 连续信号 源分离
2022-02-20 22:34:37

我有一个 wav 文件,它是通过用 2 个扬声器播放 2 个不同的 wav 文件并用麦克风录制的。如果我想使用生成的 wav 文件和另一个原始 wav 文件获取原始信号之一,是否可以这样做?我在网上查了一下,只有盲信号分离算法。先感谢您!

2个回答

我们将您的信号称为x1x2记录的信号是y

y(n)=(x1h1)(n)+(x2h2)(n)

其中n是样本(时间)索引,h1h2是从各个扬声器到麦克风的房间脉冲响应。假设您想利用x_1的知识y中检索x_2您可以应用回声消除方法来删除y中源自x_1的部分。你得到的是(x_2*h_2)(n)加上由于不完美的回声消除而导致的x_1的一些残余。如果您还想摆脱h_2的影响,则必须诉诸盲反卷积方法,这要困难得多(并且您需要了解或假设有关所需信号的一些事情x2yx1yx1(x2h2)(n)x1h2x2 )。

让我们总结一下你的问题。假设从源 1 到记录信号(DAC、扬声器、房间、麦克风、ADC...)的整个信号传输链的传递函数是(以及),那么你已经完成的信号访问也有:h1h2

  • (h1x1)(n)+(h2x2)(n)(结果信号)
  • x1(n)(原始信号之一)。

你的问题是你想恢复吗?那么这与这个问题的设置相同,当然也不是源分离的问题——因为其中一个信号是已知的(直到卷积)。您可以获得的估计值,并恢复如果您可以假设相似,您可以尝试反转并获得更接近的结果。x2h1h2x2h1h2h2x2

如果您没有关于的先验信息,这将是一个真正的 BSS 问题,在这种情况下,这将是棘手的(除非可以对这些声音的产生方式做出一些假设 - 例如其中一个是语音和其他是背景音乐)。x1x2