独立成分分析(IndependentComponent Analysis,ICA)是近年来提出的非常有效的数据分析工具,它主要用来从混合数据中提取出原始的独立信号。它作为信号分离的一种有效方法而受到广泛的关注。最早应用于盲源信号分离(Blind Source Separation,BBS)。


起源于“鸡尾酒会问题”,描述如下:

在嘈杂的鸡尾酒会上,许多人在同时交谈,可能还有背景音乐,但人耳却能准确而清晰的听到对方的话语。这种可以从混合声音中选择自己感兴趣的声音而忽略其他声音的现象称为“鸡尾酒会效应”。


这里我就举这个鸡尾酒会的例子用matlab实现

代码中实现了三个声音的随机混合,并利用fastICA算法进行信号复原,有兴趣的可以下来文件跑下


实现部分只用了3中声音

下载路径:http://download.csdn.net/detail/yeyang911/9139349

代码部分:

I1 = wavread('source1.wav');
I2 = wavread('source2.wav');
I3 = wavread('source3.wav');
subplot(4,3,1),plot(I1),title('输入信号1');
subplot(4,3,2),plot(I2),title('输入信号2');
subplot(4,3,3),plot(I3),title('输入信号3');% 将其组成矩阵
II1 = I1';
II2 = I2';
II3 = I3';
S=[II1;II2;II3];
Sweight=rand(size(S,1));      MixedS=Sweight*S;     % 将混合矩阵重新排列并输出subplot(4,3,4),plot(MixedS(1,:)),title('混合信号1');
subplot(4,3,5),plot(MixedS(2,:)),title('混合信号2');
subplot(4,3,6),plot(MixedS(3,:)),title('混合信号3');% wavwrite(MixedS(1,:),8000,8,'1mixwav1.wav');%保存wav数据
% wavwrite(MixedS(1,:),8000,8,'1mixwav2.wav');
% wavwrite(MixedS(1,:),8000,8,'1mixwav3.wav');MixedS_bak=MixedS;
%%%%%%%%%%%%%%%%%%%%%%%%%%  标准化  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MixedS_mean=zeros(3,1);
for i=1:3MixedS_mean(i)=mean(MixedS(i,:));
end                                        % 计算MixedS的均值for i=1:3for j=1:size(MixedS,2)MixedS(i,j)=MixedS(i,j)-MixedS_mean(i);end
end%%%%%%%%%%%%%%%%%%%%%%%%%%%  白化  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%MixedS_cov=cov(MixedS');                    % cov为求协方差的函数
[E,D]=eig(MixedS_cov);                      % 对信号矩阵的协方差函数进行特征值分解
Q=inv(sqrt(D))*(E)';                        % Q为白化矩阵
MixedS_white=Q*MixedS;                      % MixedS_white为白化后的信号矩阵
IsI=cov(MixedS_white');                     % IsI应为单位阵            %%%%%%%%%%%%%%%%%%%%%%%% FASTICA算法  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X=MixedS_white;                            % 以下算法将对X进行操作
[VariableNum,SampleNum]=size(X);
numofIC=VariableNum;                       % 在此应用中,独立元个数等于变量个数
B=zeros(numofIC,VariableNum);              % 初始化列向量w的寄存矩阵,B=[b1  b2  ...   bd]
for r=1:numofICi=1;maxIterationsNum=100;               % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数)IterationsNum=0;b=rand(numofIC,1)-.5;                  % 随机设置b初值b=b/norm(b);                           % 对b标准化 norm(b):向量元素平方和开根号while i<=maxIterationsNum+1if i == maxIterationsNum           % 循环结束处理fprintf('\n第%d分量在%d次迭代内并不收敛。', r,maxIterationsNum);break;endbOld=b;                          a2=1;u=1;t=X'*b;g=t.*exp(-a2*t.^2/2);dg=(1-a2*t.^2).*exp(-a2*t.^2/2);b=((1-u)*t'*g*b+u*X*g)/SampleNum-mean(dg)*b;% 核心公式b=b-B*B'*b;                        % 对b正交化b=b/norm(b); if abs(abs(b'*bOld)-1)<1e-9        % 如果收敛,则B(:,r)=b;                     % 保存所得向量bbreak;endi=i+1;        end
%    B(:,r)=b;                                % 保存所得向量b
end%%%%%%%%%%%%%%%%%%%%%%%%%%  ICA计算的数据复原并构图  %%%%%%%%%%%%%%%%%%%%%%%%%
ICAedS=B'*Q*MixedS_bak;                     % 计算ICA后的矩阵% 将混合矩阵重新排列并输出
subplot(4,3,7),plot(ICAedS(1,:)),title('ICA解混信号1');
subplot(4,3,8),plot(ICAedS(2,:)),title('ICA解混信号2');
subplot(4,3,9),plot(ICAedS(3,:)),title('ICA解混信号3');% wavwrite(ICAedS(1,:),8000,8,'1dstwav1.wav');%保存wav数据
% wavwrite(ICAedS(2,:),8000,8,'1dstwav2.wav');
% wavwrite(ICAedS(3,:),8000,8,'1dstwav3.wav');

下面为显示效果图:



ICA 分类语音分离相关推荐

  1. matlab基因频率是看最大值吗,基于ICA的语音信号盲分离.doc

    资源描述 基于基于 ICAICA 的语音信号盲分离的语音信号盲分离 [ [摘摘 要要] ]语音信号盲分离处理的含义是指利用 BSS 技术对一段语音信号进行处理.混合语 音信号的分离是盲分离的重要内容, ...

  2. 盲源分离技术 matlab,基于ICA盲源分离的研究及matlab实现(毕业学术论文设计).doc...

    ********* 大 学 毕业设计(论文)任务书 毕业设计(论文)题目: 基于ICA盲源分离的研究及matlab实现 毕业设计(论文)要求及原始数据(资料): 论文要求: 查找盲源分离的现状及发展历 ...

  3. 从鸡尾酒会问题入门语音分离

    前言 谷歌这篇文章<Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for S ...

  4. 语音分离---学习笔记(1)

    语音分离任务可分为3类: 当干扰为噪声信号时,可以称为"语音增强" 当干扰为其他说话人时,可以称为"多说话人分离" 当干扰为目标说话人自己声音的反射波时,可以称 ...

  5. 深度学习在语音分离的应用

    基于深度学习的有监督语音分离在学术界和工业界越来越受到关注,也是深度学习在语音领域的应用中重要的一部分.这个主题社长曾经邀请搜狗语音研究员文仕学做过分享. 以下是他的分享内容,点击查看更多往期回顾: ...

  6. 【深蓝学院】语音信号处理|ch8-深度学习语音分离

    语音信号处理|ch8-深度学习语音分离 概述 1. 深度学习语音处理 [目标] ①能够有更好的自动语音识别(ASR)的指标: ②能够有更好的人类听觉感知 [现状] ①可以显著提升处理过程的速度并且提升 ...

  7. ICASSP 2023论文模型开源|语音分离Mossformer

    人类能在复杂的多人说话环境中轻易地分离干扰声音,选择性聆听感兴趣的主讲人说话.但这对机器却不容易,如何构建一个能够媲美人类听觉系统的自动化系统颇具挑战性. 本文将详细解读ICASSP2023本届会议收 ...

  8. R语言可视化堆叠(stack)的条形图并通过另外一个分类变量分离(dodge)条形图(stacking by one variable and dodging by another)实战

    R语言可视化堆叠(stack)的条形图并通过另外一个分类变量分离(dodge)条形图(stacking by one variable and dodging by another)实战 目录

  9. 搜狗研究员:详解基于深度学习的语音分离

    来源:AI 研习社 本文长度为3000字,建议阅读6分钟 本文为你介绍语音分离方面主要的研究课题和相关方法. [导读] 基于深度学习的有监督语音分离在学术界和工业界越来越受到关注,也是深度学习在语音领 ...

最新文章

  1. sourcetree 拉取 一直让输入密码
  2. #!/usr/bin/env python与#!/usr/bin/python
  3. row_number()over函数的使用(转)
  4. Python入门--算术运算符,位运算符,比较运算符,布尔运算符,赋值运算符
  5. Java中用split函数进行分割字符串。
  6. mysql指令按顺序排列_《深入浅出MySQL》读书笔记(一)sql基础,常用的操作语句。...
  7. ASP.NET profile之 找不到存储过程'dbo.aspnet_CheckSchemaVersion'
  8. 虚拟机安装Mac系统
  9. 大牛熬夜整理,京东网易滴滴,天津农行软开java面试题合集,大牛已于上个月入职华为!
  10. 201万年薪,华为天才少年路径可以复制吗
  11. python基础ppt_python基础知识(三)
  12. 基金与私募基金概念解析:共同基金、单位信托、投资信托计划、券商集合理财、基金专户理财
  13. 傅里叶逆变换程序matlab,按时间抽取基2-快速傅里叶逆变换算法_MATLAB代码
  14. 解决魅族17横屏全屏会有白边问题
  15. C# 生成图片缩略图
  16. java找出命题p和q的合取_从键盘输入两个命题变元p和q的真值-求它们的合取、析取、蕴含和等价的真值...
  17. ai取代程序员_未来50%的工作都将被人工智能给取代,程序员会被机器人取代吗?...
  18. 2022腾讯云年终双十一活动攻略汇总!
  19. 微信禁止访问国外服务器域名,域名被禁止访问?
  20. 苹果战略管理分析_苹果不懈的战略与执行

热门文章

  1. S32K144学习笔记2 - 串口配置
  2. python 获取qq群成员信息_python 获取qq群成员列表数据
  3. android圆形图标显示不全,android 桌面图标显示不全
  4. vant图标怎么显示不出来_部分自定义图标和自带图标Icon无法同时显示
  5. tf.reset_default_graph()
  6. 顺舟智能智慧灯杆解决方案
  7. Android自定义控件(三)——打造闪闪发光的字体
  8. 确认,谷歌AI中国中心总裁李佳离职
  9. 中国人保为哈尔滨宝月雅生物科技有限公司承保产品责任险,为消费者保驾护航
  10. CUDA 9中张量核(Tensor Cores)编程