www.gusucode.com > 协方差矩阵稀疏DOA-源码程序 > 协方差矩阵稀疏DOA/l1_SRACV.m
clear all; close all; clc; lambda=60; dd=lambda/2; %阵元间距离,取为入射波长的一半 Kp=80; %采样快拍数 Nnum=9; %%阵列1阵元数量 fs=20*10^3; theta=[6,26]; AA=[2,3,3]; SignalNum=length(theta); Fc=[2*10^3,5*10^3,2*10^3]; %入射信号频率 SNR=10; Aratio=sqrt(10^(SNR/10)); %信号幅度与噪声幅度比值,并假设信号幅度为1 % thetatest=(0*pi/180:1*pi/180:90*pi/180); %theta角度搜索范围 thetatest=[-60:1:60]*pi/180; thetanum=length(thetatest); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SignalVector=zeros(SignalNum,Kp); Xt=zeros(Nnum,Kp); M=Nnum; T_Vector=(1:Kp)/fs; d=dd*(0:M-1); w=2*pi/lambda*sin(thetatest); A=exp(-1j*d'*w); % % % for k2=1:thetanum % % % for k1=1:M % % % Att(k1)=exp(-j*(k1-1)*2*pi*dd*sin(thetatest(k2))/lambda); % % % A(k1,k2) =Att(k1); % % % end % % % end %%构造观测矩阵Y for k2=1:SignalNum for k1=1:Nnum At(k1)=exp(-j*(k1-1)*2*pi*dd*sin(theta(k2)*pi/180)/lambda); Atemp(k1,k2)=At(k1); end end %%%构造信号矩阵和噪声矩阵 for k1=1:SignalNum SignalVector(k1,:)=exp(j*2*pi*Fc(k1).*T_Vector); %信号 end Xtt=Atemp*SignalVector; %NoiseVector=sqrt(0.5)*(randn(Nnum,K)+j*randn(Nnum,K)); %--------------------加噪声方法---1 for kk=1:Nnum Xt(kk,:)=awgn(Xtt(kk,:),SNR,'measured'); end %-------------------加噪声方法---2 % for k1=1:Nnum % NoiseVector(k1,:)=SignalNum/Aratio.*noisecg(Kp)'; % Xt(k1,:)=Xtt(k1,:)+NoiseVector(k1,:); % end Rx=(Xt*Xt')./Kp; % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [V, D] = eig(Rx); % X*V = V*D DD = diag(D); % 对角阵变矢量 sigm_n=min(DD); %最小特征值^作为 的估计 I=eye(M); W12=sqrt(Kp)*(kron((Rx^(-0.5)).',Rx^(-0.5))); Y=Rx-sigm_n*I; y=W12*Y(:); Fai=W12*kron(I,A); II=ones(1,thetanum); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% belta=sqrt(chi2inv(0.99999,M*M)) % % % cvx_begin % % % variable B(thetanum,M) % % % variable b(thetanum,1); % % % minimize(norm(b,1)) % % % % minimize (norm(sqrt(sum((B.^2)')),1)) % % % subject to % % % for kk=1:1:thetanum % % % norm(B(kk,:))<=b(kk,1); % % % end % % % temp0=Rx-A*B-sigm_n*I; % % % temp=W12*vec(temp0); % % % norm(temp)<=belta ; % % % % norm(y-Fai*B(:))<=23 ; % % % cvx_end % % % % % % figure() % % % plot(0:1:90,b); %%%%%%%%%%%%%%%%%%%%%%----B,,W*vec(R-AB-I)---%%%%%%%%%%%%%%%%%%%% belta=sqrt(chi2inv(0.9999,M*M)); AP=[]; for i=1:1:M AP=blkdiag(AP,A); end % I2=eye(thetanum); % APP=[]; % cvx_begin % variable B(thetanum*M) complex; % variable b(thetanum); % % minimize(norm(b,1)) % % minimize (norm(sqrt(sum((B.^2)')),1)) % subject to % for i=1:1:thetanum % for j=1:1:M % APP=blkdiag(APP,I2(i,:)); % end % b(i)>=norm(APP*B); % APP=[]; % end % % temp0=vec(Rx-sigm_n*I)-vec(AP*B); % temp=W12*temp0; % norm(temp)<=belta; % cvx_end % % figure(1) % plot(0:1:90,b); %%%%%%%% %%%%%%%%%%%%%%%%%%----B,r,g---y-Fai*vec(B)---%%%%%%%%%%%%%%%%%%%%%%%% I2=eye(thetanum); APP=[]; cvx_begin variable B(thetanum*M) complex; variable r1(thetanum); variable g minimize(g) subject to norm(y-Fai*B)<=belta; for i=1:1:thetanum for j=1:1:M APP=blkdiag(APP,I2(i,:)); end r1(i)>=norm(APP*B); APP=[]; end II*r1<=g; cvx_end % figure(2) % plot(-90:1:90,r); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 % II=ones(1,thetanum); % cvx_begin % variable B(thetanum,M) complex; % variable r(thetanum); % variable g % minimize(g) % subject to % norm(y-Fai*B)<=belta; % % for i=1:1:thetanum % for j=1:1:M % APP=blkdiag(APP,I2(i,:)); % end % r(i)>=norm(APP*B); % APP=[]; % end % II*r<=g; % cvx_end % % figure() % plot(-90:1:90,r);