📄 bss.m
字号:
%函数定义:
function W=BSS(X)
%W=BSS(X)为分离阵W的离线批处理ICA学习算法
%输入宗量:X
%输出宗量:W
%调用函数:
W(:,:,1)=[1,-0.5;-0.5,1]; %给定分离阵W随机初值W(1)
Y(:,:,1)=W(:,:,1)*X; %得到Y的初值Y(1)
j1(1)=sign(mean(sech(Y(1,:,1)).^2)-mean(Y(1,:,1).*tanh(Y(1,:,1)))); %计算开关函数J(1)
j2(1)=sign(mean(sech(Y(2,:,1)).^2)-mean(Y(2,:,1).*tanh(Y(2,:,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.5; %设步幅初值a(1)为0.05
DW(:,:,1)=a(1)*D(:,:,1); %计算W(1)的"微小变化"DW(1)
W(:,:,2)=W(:,:,1)+DW(:,:,1); %开始迭代,设迭代次数为800次
for k=2:800
Y(:,:,k)=W(:,:,k)*X;
j1(k)=sign(mean(sech(Y(1,:,k)).^2)-mean(Y(1,:,k).*tanh(Y(1,:,k))));
j2(k)=sign(mean(sech(Y(2,:,k)).^2)-mean(Y(2,:,k).*tanh(Y(2,:,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);
a(k)=a(1)/k; %离线算法步幅迭代公式
DW(:,:,k)=a(k)*D(:,:,k);
W(:,:,k+1)=W(:,:,k)+DW(:,:,k);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -