2
鸡尾酒会算法SVD实现…在一行代码中?
在斯坦福大学的Andrew Ng在Coursera的机器学习入门演讲的幻灯片中,他给出了鸡尾酒会问题的以下一行八度音阶解决方案,因为音频源是由两个空间分开的麦克风录制的: [W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x'); 幻灯片的底部是“来源:Sam Roweis,Yair Weiss和Eero Simoncelli”,幻灯片的底部是“由Te-Won Lee提供的音频剪辑”。吴教授在影片中说: “因此,您可能会看这样的无监督学习,并问,'实施此过程有多复杂?” 似乎要构建此应用程序,似乎要进行音频处理,您将编写大量代码,或者链接到处理音频的一堆C ++或Java库中。处理音频的复杂程序:分离音频等,结果证明该算法可以完成您刚刚听到的操作,只需一行代码即可完成……如此处所示,这花费了研究人员很长时间因此,我并不是说这是一个简单的问题。但是事实证明,当您使用正确的编程环境时,许多学习算法实际上都是很短的程序。” 在视频讲座中播放的单独音频结果并不完美,但在我看来,这是惊人的。有人对那一行代码的性能有何见解?特别是,没有人知道参考文献来解释Te-Won Lee,Sam Roweis,Yair Weiss和Eero Simoncelli在那一行代码方面的工作吗? 更新 为了证明算法对麦克风分离距离的敏感性,下面的模拟(以八度为单位)将音调与两个空间分离的音调发生器分离。 % define model f1 = 1100; % frequency of tone generator 1; unit: Hz f2 = 2900; % frequency of tone generator 2; unit: Hz Ts = 1/(40*max(f1,f2)); % sampling period; unit: …