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

📄 sobi.m

📁 这是盲信号的代码 都已经通过编译了 做这方面的同仁可以参考一下 我觉得蛮惯用的
💻 M
字号:
function W=sobi(x,n,p)
%二阶盲辨识
%W=sobi(x,n,p)估计分离矩阵
%一般调用方法W=sobi(x);
%x混合信号
%m传感器个数
%N采样点数
%n源信号个数
%p协方差矩阵个数
[m,N]=size(x);
if nargin==1
    n=m;
    p=100;
end
if nargin==2
    p=100;
end
xz=x-mean(x')'*ones(1,N);
Rxx=(xz(:,1:N-1)*xz(:,2:N)')/(N-1);
[Ux,Dx,Vx]=svd(Rxx);
Dx=diag(Dx);
if n<m
    Dx=Dx-real((mean(Dx(n+1:m))));
    Q=diag(real(sqrt(1./D(1:n))))*Ux(:,1:n)';
else
    n=max(find(Dx>1e-14));;
    Q=diag(real(sqrt(1./Dx(1:n))))*Ux(:,1:n)';
end
Xb=Q*xz;%prewhitened data
%Estimation of the time delayed covariance matrices
k=1;
pn=p*n;
for u=1:n:pn
    k=k+1;
    Rxp=Xb(:,k:N)*Xb(:,1:N-k+1)'/(N-k+1);
    M(:,u:u+n-1)=norm(Rxp,'fro')*Rxp;
end
%approximate joint daigonalization
eps=1/sqrt(N)/100;
encore=1;
U=eye(n);
while encore
    encore=0;
    for p=1:n-1
        for q=p+1:n
            %givens rotations:
            g=[M(p,p:n:pn)-M(q,q:n:pn);...
                M(p,q:n:pn)+M(q,p:n:pn);...
                i*(M(q,p:n:pn)-M(p,q:n:pn))];
            [Ucp,D]=eig(real(g*g');
            [la,k]=sort(diag(D));
            angles=Ucp(:,k(3));
            angles=sign(angles(1))*angles;
            c=sqrt(0.5+angles(1)/2);
            sr=0.5*(angles(2)-j*angles(3))/c;
            sc=conj(sr);
            encore=encore | asr;
            if asr
                colp=M(:,p:n:pn);
                colq=M(:,q:n:pn);
                M(:,p:n:pn)=c*colp+sr*colq;
                M(:,q:n:pn)=c*colq-sc*colp;
                rowp=M(p,:);
                rowq=M(q,:);
                M(p,:)=c*rowp+sc*rowq;
                M(q,:)=c*rowq-sr(rowp;
                temp=U(:,p);
                U(:,p)=c*U(:,p)+sr*U(:,q);
                U(:,q)=c*U(:,q)-sc*temp;
            end
        end
    end
end
W=U'*Q;
y=W*x;
                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -