matlab - 尝试在 Matlab 中重新创建鸡尾酒会算法,结果错误?

标签 matlab machine-learning octave linear-algebra source-separation

使用此声音文件:http://www.ism.ac.jp/~shiro/research/sounds/RSM/X_rsm2.wav

我正在尝试在 matlab 中从 coursera 重新创建 Andrew Ng 的机器学习演示文稿 ( https://class.coursera.org/ml-005/lecture )

我所做的是读取 .wav 文件(16khz,7 秒,2 个 channel )

[x,xfs] = wavread('track.wav')

现在我转置 x

x = x'

现在我继续在鸡尾酒会算法中使用 x

[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x')

MATLAB 返回:

W =

   -0.9233   -0.3841
   -0.3841    0.9233


s =

  265.4832         0
         0   13.0768


v =

   -0.9233   -0.3841
   -0.3841    0.9233

分离的音频在哪里?

编辑:通过进一步的研究,我发现 W 只是分解矩阵。这意味着如果我的目标是获得两个输出分离的声源,则该算法是不完整的。我该如何处理这个分解矩阵?

最佳答案

我相信您想将通过 SVD 找到的解混合矩阵 W 应用于混合信号 x。这可以简单地完成如下:

sigs = W*x;

现在 sigs(1,:) 将是分离的信号之一,sigs(2,:) 将是另一个。

祝你好运。

关于matlab - 尝试在 Matlab 中重新创建鸡尾酒会算法,结果错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26008634/

相关文章:

machine-learning - 机器学习从图片中估计照明方向?

matlab - 如果满足条件,则在当前迭代步骤结束时退出循环

python - 为什么我使用 scipy.io.savemat 获取一行和一列而不是两列

c++ - 矩阵指数与 Armadillo

matlab - 复制 sim 的向后兼容语法的 "Timespan"

linux - 如何在 Octave 中播放声音?

windows - Octave-如何在启动时自动执行命令

java - 在批处理模式下运行 matlab 时如何增加 java 堆内存大小

machine-learning - 默认情况下始终标准化所有功能是不是一个坏主意?

python - 当使用 OpenCV 完成图像加载和调整大小时,Resnet50 会产生不同的预测