资源简介
从网上找的独立成分分析的Matlab代码和自己根据书写的代码,能用。
代码片段和文件信息
%x是观测变量,m是观测信号的个数,y是对独立分量的估计,n是独立分量的个数,w是分离矩阵
wav_1=wavread(‘d:\S\man.wav‘);
wav_1=wav_1‘;
sound1=wav_1(1:200000);
wav_2=wavread(‘d:\S\music.wav‘);
wav_2=wav_2‘;
sound2=wav_2(1:200000);
wav_3=wavread(‘d:\S\dragen.wav‘);
wav_3=wav_3‘;
sound3=wav_3(1:200000);
wav_4=wavread(‘d:\S\wang.wav‘);
wav_4_2=wav_4(:1);
wav_4_2=wav_4_2‘;
sound4=wav_4_2(1:200000);
wav=[sound1;sound2;sound3;sound4];
hun=rand(44); %混合矩阵hun
x=hun*wav; %混合信号x
figure(123);
subplot(411);plot(sound1);title(‘souce1‘);
subplot(412);plot(sound2);title(‘souce2‘);
subplot(413);plot(sound3);title(‘souce3‘);
subplot(414);plot(sound4);title(‘souce4‘);
%ICA预处理,包括去均值和白化两个部分
%去均值
x_centering=zeros(size(x));
q=zeros(size(x1));
for i=1:4
q(i)=mean(x(i:));
for j=1:size(x2)
x_centering(ij)=x(ij)-q(i);
end
end
%妈蛋源代码的白化就是错的啊
MixedS_cov=cov(x_centering‘);
[ED]=eig(MixedS_cov);
Q=inv(sqrt(D))*(E)‘;
x_whiten=Q*x_centering;
x_whiten=real(x_whiten);
IsI=cov(x_whiten‘); %这段显然是多余的,用来装逼的,因为如果白化成功IsI应该是只有斜线上为1的矩阵
%总感觉白化这里出了点问题,数据白化后有了虚部,虽然虚部都是0又是闹哪样?
%FastICA算法的迭代过程
%基于非高斯性最大化原理,使用固定点(Fixed-point)迭代理论寻找 的非高斯性最大值,
%该算法采用牛顿迭代算法对观测变量x的大量采样点进行批处理,以最大化负熵作为目标函数,
%每次从观测信号中分离出一个独立分量,是独立分量分析的一种快速算法。
%该算法有两种求解独立成分的方法,一种是Deflation method,分别对分离矩阵的每一列进行更新,每次提取一个独立分量;
%另一种是Symmetry method,同时对所有独立分量对应的分离矩阵的列进行更新。
%该算法是Deflation method,
%这个代码和另外一个基本是相同的,都是Deflation method,但其中一个函数的选取有所不同
wp=rand(41);
w=zeros(42);
maxnumber=200;
- 上一篇:基于FASTica算法的独立成分分解
- 下一篇:射线声学bellhop程序
评论
共有 条评论