資源簡介
基于峭度的MATLAB代碼程序,可以直接運行,有圖

代碼片段和文件信息
%基于峭度極大的ICA算法
clear
%模擬數據
a=0:pi/4:100;
b=sin(a);
[mn]=size(b);
c=rand(mn);
data=zeros(2n);
data(1:)=b+c;
data(2:)=0.5*b+2*c;
[MN]=size(data);
%畫出數據
for(i=1:M)
????subplot(M1i);
????plot(data(M:));
end
%去均值
mean1=mean(data2);
X=zeros(MN);
for(i=1:M)
???X(i:)=data(i:)-mean1(i1);
end
%whiten
[U1S1V1]=svd(X);?%對觀測數據進行奇異值分解
P=U1‘*X;?????????%主分量分解
C=P*P‘;
Z=C^(-1/2)*P;??%觀測數據的白化
????????
%對W賦初值,設置迭代步長
W=eye(MM);
u=0.01;????????????%迭代步長
%算法迭代
W1=zeros(MM);
%step
i=1;
????W1(:i)=W(:i);
????partial=4*sign(mean((W1(:i)‘*Z).^42)-3)*mean((W1(:i)‘*Z).^3*Z‘2);
????W0=zeros(M1);
????W0=W1(:i);
????W1(:i)=W0+u*partial;
????W1(:i)=W1(:i)/norm(W1(:i));
????while((norm(W1(:i)-W0))>=0.0001)
????????W0=W1(:i);
????????W1(:i)=W0+u*partial;
????????W1(:i)=W1(:i)/norm(W1(:i));
????end
%step
i=2;
????W1(:i)=W(:i);
????partial=4*sign(mean((W1(:i)‘*Z).^42)-3)*mean((W1(:i)‘*Z).^3*Z‘2);
????W0=zeros(N1);
????W0=W1(:i);
????W1(:i)=W0+u*partial;
????W1(:i)=W1(:i)/norm(W1(:i));
????while((norm(W1(:i)-W0))>=0.0001)
????????W0=W1(:i);
????????W1(:i)=W0+u*partial;
????????W1(:i)=W1(:i)/norm(W1(:i));
????end
????%判斷是否正交
????
????????while(W1(:2)‘*W1(:1)>=0.01)
?????????????W1(:i)=W(:i);
?????????????partial=4*sign(mean((W1(:i)‘*Z).^42)-3)*mean((W1(:i)‘*Z).^3*Z‘2);
?????????????W0=zeros(N1);
?????????????W0=W1(:i);
?????????????W1(:i)=W0+u*partial;
?????????????W1(:i)=W1(:i)/norm(W1(:i));
?????????????while((norm(W1(:i)-W0))>=0.0001)
??????????????????W0=W1(:i);
??????????????????W1(:i)=W0+u*partial;
??????????????????W1(:i)=W1(:i)/norm(W1(:i));
?????????????end
????????end
???
???%?W(:i)=W1(:i);
%分離后矩陣
Y=zeros(MN);
Y=W1‘*Z;
%畫出分離后的圖形
for(i=1:M)
????subplot(41i);
????plot(Y(i:));
end
subplot(413);
plot(b);
subplot(414);
plot(c);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2015??2009-04-20?17:39??ica2.m
-----------?---------??----------?-----??----
?????????????????2015????????????????????1
- 上一篇:Simuli
nk電池仿真模型 - 下一篇:明小子(超大字典)多后臺 多字段 多表名
評論
共有 條評論