Matlab删除人声

时间:2013-01-22 14:46:19

标签: matlab audio source-separation

我用fft编写程序从歌曲中删除人声。在C#之前我决定在Matlab中测试降低频率的算法,但是不能像例子那样得到结果。有一个噪音。我试过选择任何范围(0.7 - 1.5),但都是相同的......噪音。我没有? 请帮我写好吧)提前致谢!

[y, fs] = wavread('Song.wav');
left = y(:,1);
right = y(:,2);
fftL = fft(left);
fftR = fft(right);

for i = 1:683550 %in my example 683550
  dif = fftL(i,1) / fftR(i,1);
  dif = abs(dif);
  if (dif > 0.7 & dif < 1.5)
    fftL(i,1) = 0;
    fftR(i,1) = 0;
  end;
end;

leftOut = ifft(fftL);
rightOut = ifft(fftR);
yOut(:,1) = leftOut;
yOut(:,2) = rightOut;

wavwrite(yOut, fs, 'tmp.wav');

1 个答案:

答案 0 :(得分:1)

从代码中我可以看到,如果左右之间的强度“相等”,则只需将频率内容分类为声音(等于被定义为介于0.7和1.5之间的比率)。我不熟悉你这个计划的原因,但它实际上可能产生一个不错的结果。

你做错了什么事情很可能与fft大小有关,而且你要一次性处理完整的信号,所以说。

例如人声一首歌随着时间而变化,因此你的掩饰也必须变化。这意味着您必须在时域中以帧的形式分解信号,并为每个帧分别进行fft和屏蔽。此外,您应该考虑在时域框架中使用重叠。

此致