这是我用模拟信号进行ICA处理,你可以将模拟信号改成语音输入信号即可

clc;clear all;close all;

fs=1000;

N=1024;

t=(0:N-1)/fs;

f1=60;

f2=150;

f3=200;

I1=sin(2*pi*f1*t);

I2=cos(2*pi*f2*t);

I3=randn(size(t));

% I3=sin(2*pi*f3*t);

subplot(4,3,1),plot(I1),title('输入信号1'),axis([0,100,-4,4]);

subplot(4,3,2),plot(I2),title('输入信号2'),axis([0,100,-4,4]);

subplot(4,3,3),plot(I3),title('输入信号3'),axis([0,100,-4,4]);

% 将其组成矩阵

S=[I1;I2;I3];

Sweight=rand(size(S,1));

MixedS=Sweight*S;     % 将混合矩阵重新排列并输出

subplot(4,3,4),plot(MixedS(1,:)),title('混合信号1'),axis([0,100,-4,4]);

subplot(4,3,5),plot(MixedS(2,:)),title('混合信号2'),axis([0,100,-4,4]);

subplot(4,3,6),plot(MixedS(3,:)),title('混合信号3'),axis([0,100,-4,4]);

MixedS_bak=MixedS;

%%%%%%%%%%%%%%%%%%%%%%%%%%  标准化  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MixedS_mean=zeros(3,1);

for i=1:3

MixedS_mean(i)=mean(MixedS(i,:));

end                                        % 计算MixedS的均值

for i=1:3

for 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:numofIC

i=1;maxIterationsNum=100;               % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数)

IterationsNum=0;

b=rand(numofIC,1)-.5;                  % 随机设置b初值

b=b/norm(b);                           % 对b标准化 norm(b):向量元素平方和开根号

while i<=maxIterationsNum+1

if i == maxIterationsNum           % 循环结束处理

fprintf('\n第%d分量在%d次迭代内并不收敛。', r,maxIterationsNum);

break;

end

bOld=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;

% 核心公式,参见理论部分公式2.52

b=b-B*B'*b;                        % 对b正交化

b=b/norm(b);

if abs(abs(b'*bOld)-1)<1e-9        % 如果收敛,则

B(:,r)=b;                     % 保存所得向量b

break;

end

i=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'),axis([0,100,-4,4]);

subplot(4,3,8),plot(ICAedS(2,:)),title('ICA解混信号2'),axis([0,100,-4,4]);

subplot(4,3,9),plot(ICAedS(3,:)),title('ICA解混信号3'),axis([0,100,-4,4]);

matlab实现ica,Matlab用ICA进行话语分离相关推荐

  1. matlab 摄像头拍照,matlab摄像头拍照

    图像采集: 该单元是指道路上安装的摄像头在检测到有车辆通过的同时进行 拍照并...在 MATLAB 中我们可以调用 im2gray 函数对图像进行灰度化处理. 4.2.2图像的...... 2 车辆牌 ...

  2. 【 MATLAB 】使用 MATLAB 得到高密度谱(补零得到DFT)和高分辨率谱(获得更多的数据得到DFT)的方式对比(附MATLAB脚本)

    上篇博文分析了同一有限长序列在不同的N下的DFT之间的不同: MATLAB ]使用 MATLAB 作图讨论有限长序列的 N 点 DFT(强烈推荐)(含MATLAB脚本) 那篇博文中,我们通过补零的方式 ...

  3. 【 MATLAB 】使用 MATLAB 实现模拟信号的近似及其连续傅里叶变换

    严格来说,利用MATLAB是不可能用来分析模拟信号的.然而,如果有足够小的时间增量在足够细的栅格上对采样而产生一种平滑的图,并有足够大的时间来展示所有的模式,那么就能对模拟信号作近似分析.令是栅格间隔 ...

  4. 【 MATLAB 】使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法

    例题: 一个3阶低通滤波器由下面差分方程描述: y(n) = 0.0181 x(n) + 0.0543 x(n-1) + 0.0543 x(n-2) + 0.0181 x(n-3) + 1.76 y( ...

  5. matlab中fdyn,Matlab的用法总结

    1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...

  6. matlab 数学库,matlab数学函数库

    (n) 求 n 的阶乘 如何用 matlab 配方 没有发现 matlab 有这一命令,不过我们可以调用 maple 的命令,调用方法如下: 首先加载 maple 中的 student 函数库,加载. ...

  7. matlab字符衔接,matlab字符串连接(多个字符串)的经验,matlab字符串

    matlab字符串连接(多个字符串)的经验,matlab字符串 参考 matlab中字符串连接的3种方法  文章,实验遇到的一些小白问题,如有问题希望大神们给予指导. Matlab中,两个或多个字符串 ...

  8. matlab模块 python,Matlab 和Python结合使用

    今天介绍的内容比较基础,希望能达到抛砖引玉的效果. Matlab 和 Python 结合使用无非分为两种情形: Matlab中使用Python包: Python中使用Matlab. 1. Matlab ...

  9. Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示

    Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示 目录 输出结果 实现代码 输出结果 实现代码 %Brownian motion clf; n=20; s=0.02; x = rand ...

  10. Matlab:利用Matlab实现布朗运动模拟

    Matlab:利用Matlab实现布朗运动模拟 目录 输出结果 实现代码 输出结果 实现代码 n=40 s=0.04 x=rand(n,1)-0.5; y=rand(n,1)-0.5; h=plot( ...

最新文章

  1. python信用卡违约_Python信用卡验证
  2. 计算机图形学----基于3D图形开发技术 (韩正贤 著)
  3. 团队开发经验:如何带领一个项目团队并做好项目总结 !!
  4. Java:假设车库有3个车位(可以通过boolean[]数组来表示车库)可以停车,写一个程序模拟多个用户开车离开,停车入库的效果。注意:车位有车时不能停车。
  5. JavaWeb(一)——web服务器、Tomcat安装和配置
  6. webstorm 设置jsp支持
  7. 算法----最大承载量下的最大价值问题
  8. 「小算法」回文数与数值合法性检验
  9. MySQL子查询作为列_mysql 列子查询
  10. 蔡高厅老师 - 高等数学阅读笔记 - 04 - 函数的连续性(18、19、20、21)
  11. 世界500强的科技从业者,依旧逃不出买房难的宿命
  12. Java改环境变量把path修改了,CentOS查看和修改PATH环境变量的方法
  13. Android应用程序的Activity启动过程简要介绍和学习计划 .
  14. C语言 — 编程规范、标识符命名规范
  15. ISA Server、虚拟机、托管服务器的使用
  16. /dev/mapper/VolGroup-lv_root空间爆满解决
  17. python3 模板库 好用_关于3个Python模板库的比较
  18. windows10安装dll文件
  19. h.264视频编码器
  20. C 实现黑客帝国数字雨

热门文章

  1. 复购几乎为0的产品,怎么做线上推广?
  2. C++ 小游戏 井字棋
  3. 出行必备 酷讯全面锁定“秒杀票”
  4. 写给永动机接触者的一封信
  5. fastadmin创蓝短信插件第二版
  6. 计算机综合实践免修 华东师范大学,电子技术综合实践
  7. 2007-2008年中国十大平面设计公司排名
  8. 财付通开放平台 android,腾讯开放财付通对接平台
  9. 开心网kaixin001.com外挂免费下载
  10. 污染源在线监控_污染源在线监控数采仪