机器学习课程笔记01

Cocktail party problem

非常多的重叠声,较难听懂每个人的讲话

  • 两个人正在讲话
  • 麦克风摆放在与两个讲话者的距离不同的地方
    示意图

思路&要求

  • 根据麦克风的摆放位置,录下不同版本的对话,但麦克风录音的重叠程度也不同
  • 获取每个麦克风的对话录音
    • 写一个cocktail party algorithm
    • 算法需要对录音进行处理
      • 确定有两个音频源
      • 分离出两个声音来源

课程PPT上的代码

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

网上大佬的代码

PS.注释是我自己加的,若有不足还望指出

%----读取两个麦克风的音频文件
%----[y,Fs] = audioread(filename) 从名为 filename 的文件中读取数据,
%----并返回样本数据 y 以及该数据的采样率 Fs。
[x1, Fs1] = audioread('E:\sounds\first.wav');
[x2, Fs2] = audioread('E:\sounds\second.wav');
xx = [x1, x2]';
%--------size(X,2),返回矩阵 X 的列数
%--------mean(X,2),返回矩阵 X 各行的均值
%--------repmat(A,m,n),将矩阵 A 复制 m×n 块
%--------cov(X),返回协方差矩阵;inv(X),返回矩阵 X 的逆矩阵
%--------sqrtm(X),返回矩阵 X 的主要平方根
yy = sqrtm(inv(cov(xx')))*(xx-repmat(mean(xx,2),1,size(xx,2)));
%--------[U,S,V] = svd(A) 执行矩阵 A 的奇异值分解,因此 A = U*S*V'。
[W,s,v] = svd((repmat(sum(yy.*yy,1),size(yy,1),1).*yy)*yy');

%----W是非混合矩阵
a = W*xx; 
subplot(2,2,1); plot(x1); title('mixed audio - mic 1');
subplot(2,2,2); plot(x2); title('mixed audio - mic 2');
subplot(2,2,3); plot(a(1,:), 'g'); title('unmixed wave 1');
subplot(2,2,4); plot(a(2,:),'r'); title('unmixed wave 2');

audiowrite('unmixed1.wav', a(1,:), Fs1);
audiowrite('unmixed2.wav', a(2,:), Fs1);

运行结果

运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值