📄 bss.m
字号:
%函数定义:
function W=BSS(X)
%W=BSS(X)为分离阵W的离线批处理ICA学习算法
%输入宗量:X
%输出宗量:W
%调用函数:
W(:,:,1)=[-2.0625,0.071422;0.18782,1.2263]; %给定分离阵W随机初值W(1)
Y(:,:,1)=W(:,:,1)*X; %得到Y的初值Y(1)
m41(1)=mean(Y(1,:,1).^4);
m42(1)=mean(Y(2,:,1).^4);
m21(1)=mean(Y(1,:,1).^2);
m22(1)=mean(Y(2,:,1).^2);
k1(1)=m41(1)/(m21(1).^2)-3;
k2(1)=m42(1)/(m22(1).^2)-3;
j1(1)=sign(k1(1));
j2(1)=sign(k2(1));
J(:,:,1)=diag([j1(1),j2(1)]);
Q=0;
T=length(X);
for i=1:T
Q=Y(:,i,1)*Y(:,i,1)'+J(:,:,1)*tanh(Y(:,i,1))*Y(:,i,1)'+Q;
end
I=diag([1,1]);
F(:,:,1)=I-Q/T; %计算估计函数F(1)
D(:,:,1)=F(:,:,1)*W(:,:,1);
a(1)=0.0001; %设步幅初值a(1)为0.05
DW(:,:,1)=a(1)*D(:,:,1); %计算W(1)的"微小变化"DW(1)
W(:,:,2)=W(:,:,1)+DW(:,:,1); %开始迭代,设迭代次数为800次
%for k=2:20000
for k=2:20
Y(:,:,k)=W(:,:,k)*X;
m41(k)=0.999*m41(k-1)+0.001*(norm(Y(1,:,k)).^4);
m42(k)=0.999*m42(k-1)+0.001*(norm(Y(2,:,k)).^4);
m21(k)=0.999*m21(k-1)+0.001*(norm(Y(1,:,k)).^2);
m22(k)=0.999*m22(k-1)+0.001*(norm(Y(2,:,k)).^2);
k1(k)=m41(k)/(m21(k).^2)-3;
k2(k)=m41(k)/(m21(k).^2)-3;
j1(k)=sign(k1(k));
j2(k)=sign(k2(k));
J(:,:,k)=diag([j1(k),j2(k)]);
Q=0;
for i=1:T
Q=Y(:,i,k)*Y(:,i,k)'+J(:,:,k)*tanh(Y(:,i,k))*Y(:,i,k)'+Q;
end
F(:,:,k)=I-Q/T;
D(:,:,k)=F(:,:,k)*W(:,:,k);
DW(:,:,k)=a(1)*D(:,:,k);
W(:,:,k+1)=W(:,:,k)+DW(:,:,k);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -