📄 rcb_array.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -