L1-SRACV

%2017
%function:L1_SRCAV算法


clc
clear all;
close all;
d_lamda=1/2;           %最大阵元间距
M=8;                   %阵元数
theta=[0 30];          %信号的入射角度
snr=20;
L=500;                 %快拍数
K=length(theta);       %信源数
for k=1:K
    A(:,k)=exp(-1j*2*pi*[0:M-1]'*d_lamda*sin(theta(k)/180*pi)); %导向矢量
end
S=10.^((snr/2)/10)*(randn(K,L)+1j*randn(K,L));      %仿真信号
noise=(1/sqrt(2))*(randn(M,L)+1j*randn(M,L));
X=A*S+noise;                             %接收到的信号            
R=X*X'/L;                                %信号协方差矩阵
Rn=noise*noise'/L;                       %噪声协方差矩阵
step=1;                                %搜索步长
Se_begin=-90;                             %定义搜索起终点
Se_end=90;                                
Searching_doa = Se_begin:step:Se_end;    %谱峰搜索范围
AA = zeros(M,length(Searching_doa));     %初始化稀疏基矩阵,维数(阵元*网格)
for m=1:length(Searching_doa)            %构造完备基
    AA(:,m) = exp(-1j*(0:M-1)*d_lamda*2*pi*sin(Searching_doa(m)*pi/180));
end
Sumvector=ones(length(Searching_doa),1);
p=0.001;
yita=chi2inv(1-p,M^2);
y=vec(sqrt(L)*R^(-1/2)*(R-Rn)*R^(-1/2));
PHI=sqrt(L)*kron((R^(-1/2)).',(R^(-1/2)*AA));
%%利用凸工具箱进行二阶锥规划问题的求解
cvx_begin
variables r(length(Searching_doa))
variables g
variable B(length(Searching_doa),M)  complex;
expression bb(length(Searching_doa),1) 
minimize(g);
subject to
Sumvector'*r<=g;        %第一个不等式约束


for q=1:length(Searching_doa)       %第二个不等式约束
    bb(q,:)=norm(B(q,:));
end
bb=cvx(zeros(length(Searching_doa),1));
for q=1:length(Searching_doa)
    bb(q)<=r(q);
end
norm(y-PHI*vec(B))<=sqrt(yita);
for q=1:length(Searching_doa)
    bb(q,:)=norm(B(q,:));
end
cvx_end
p=abs(bb(:,1))/max(abs(bb(:,1)));           %归一化
clear B
clear g
clear r
clear cvx_cputime 
clear cvx_optpnt 
clear cvx_optval 
clear cvx_problem 
clear cvx_slvitr 
clear cvx_slvtol  
clear cvx_status
clear cvx_optbnd
plot(Searching_doa,p);
xlabel('Searching_doa(degree)');
ylabel('power');
title('L1-SRACV');
grid on
效果:低信噪比,角度差较小时有伪峰

猜你喜欢

转载自blog.csdn.net/weixin_38452468/article/details/74995732