rcb_array.m

来自「一个鲁榜自适应Capon波束形成器(Robust Capon Beamformi」· M 代码 · 共 67 行

M
67
字号
function rcb_amp=RCB_array(Y,a_pool,epsilon)

% INPUT
% Y:       input data matrix: each column is one snapshot 
% a_pool:  all steering vectors need to be evaluated: each column is one 
% epsilon: the size of the uncertainty set of RCB

% OUPUT
% rcb_amp: signal waveform

M=size(Y,1);
L=size(Y,2);
a_size=size(a_pool,2);
R_rank=L;
R_hat=1/L*Y*Y';

if M<=R_rank
    R_inv=inv(R_hat);
    [U,D,V]=svd(R_hat);
    d=diag(D);
    for num_a=1:a_size
        %num_a
        a=a_pool(:,num_a);
        z=abs(U'*a);
        lambda=0;
        while abs(norm(z./(1+lambda*d))^2-epsilon)>1e-5
            %lambda
            lambda=lambda+(norm(z./(1+lambda*d))^2-epsilon)/ ...
                sum(2*z.^2.*d.*(1+lambda*d)./(1+lambda*d).^4);
        end
        a0=a-U*diag(1./(1+lambda*d))*U'*a;
        w=R_inv*a0/(a0'*R_inv*a0);
        %rcb_amp(num_a,1)=abs(1/(a0'*R_inv*a0))*(norm(a0)^2/M);
        rcb_amp(:,num_a)=(w'*Y*sqrt(norm(a0)^2/M)).';
    end
else
    [U,D,V]=svd(R_hat);
    d=diag(D);
    [d_sort,i_sort]=sort(d);
    d=flipud(d_sort);
    U=U(:,flipud(i_sort));
    U_small=U(:,1:R_rank);
    d_small=d(1:R_rank);
    D_small=diag(d_small);
    for num_a=1:a_size
        %num_f
        a=a_pool(:,num_a);
        z=abs(U'*a);
        if norm(z(1:R_rank))^2 < M-epsilon
            rcb_amp(num_f+1)=0;
        else
            lambda=0;
            while abs(norm(z./(1+lambda*d))^2-epsilon)>1e-5
                %lambda
                lambda=lambda+(norm(z./(1+lambda*d))^2-epsilon)/ ...
                    sum(2*z.^2.*d.*(1+lambda*d)./(1+lambda*d).^4);
            end
            IplusLambdaR_inv=eye(M)-U_small* ...
                inv(diag(1./(lambda*d_small))+U_small'*U_small)*U_small';
            a0=a-IplusLambdaR_inv*a;
            w=IplusLambdaR_inv*a/(lambda* ...
                ((a'*IplusLambdaR_inv)*R_hat*(IplusLambdaR_inv*a)));
            rcb_amp(:,num_a)=(w'*Y*sqrt(norm(a0)^2/M)).';
        end
    end
end

⌨️ 快捷键说明

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