Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图在Matlab中重新创建鸡尾酒会算法,结果是否错误?_Matlab_Machine Learning_Octave_Linear Algebra_Source Separation - Fatal编程技术网

试图在Matlab中重新创建鸡尾酒会算法,结果是否错误?

试图在Matlab中重新创建鸡尾酒会算法,结果是否错误?,matlab,machine-learning,octave,linear-algebra,source-separation,Matlab,Machine Learning,Octave,Linear Algebra,Source Separation,使用此声音文件: 我试图在matlab中从coursera重新创建Andrew Ng的机器学习演示文稿() 我要做的是读取一个.wav文件(16khz,7秒,2个通道) 现在我转置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

使用此声音文件:

我试图在matlab中从coursera重新创建Andrew Ng的机器学习演示文稿()

我要做的是读取一个.wav文件(16khz,7秒,2个通道)

现在我转置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只是分解矩阵。这意味着如果我的目标是获得两个输出分离的声源,那么这个算法是不完整的。如何处理此分解矩阵?

我认为您的内存不足,因为您试图在错误的维度上执行
repmat
(或者可能需要对
x
变量进行转置)。加载
x
会给您一个大小变量:

>> size(x) = [110000, 2]
当然,如果您试图
repmat

repmat(x,110000,1);
如果你做数学运算,你会试图创建一个大小为[12100000000,2]的变量。如果你不介意数零的话,那就是120亿。MATLAB中的一个双精度值大小为8字节,因此您试图创建一个使用12100000000*8*2字节=~200GB的变量。很可能你没有这么多的内存,所以MATLAB不允许你


长话短说,在重新绘制之前,尝试转置
x

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

sigs = W*x;
现在,
sigs(1,:)
将是分离的信号之一,
sigs(2,:)
将是另一个


祝你好运。

现在,在我将x插入算法之前,我先按照你所说的转换它。我不再得到内存不足错误!但我对W,s,v的结果感到困惑。它们的尺寸只有2x2。它们不应该是分离的音频吗?也许可以尝试转置
repmat
的结果?实际上,它不是函数svd,而是由于矩阵的大小而无法相乘的矩阵相乘。
sigs = W*x;