• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2023-08-01
  • 语言: Matlab
  • 标签:

资源简介

从网上找的独立成分分析的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;

评论

共有 条评论