⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bss.m

📁 这是盲信号的代码 都已经通过编译了 做这方面的同仁可以参考一下 我觉得蛮惯用的
💻 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 + -