基于压缩感知的DOA估计程序
程序可运行,有图有真相,MATLAB得事先装好cvx优化包。
clc;
clear;
close;
lambda=1;
d=lambda/2; %阵元间距离,取为入射波长的一半
K=500; %采样快拍数
theta=[-5 10]; %入射角度
SignalNum=length(theta); %入射信号数量
Nnum=5; %%阵列阵元数量
SNR1=-10; %%信噪比
Aratio=sqrt(10^(SNR1/10)); %信号幅度与噪声幅度比值,并假设信号幅度为1
Fs=5*10^3; %信号频率
Fc=[2*10^3,5*10^3,8*10^3]; %入射信号频率
fs=20*10^3;
thetatest=(-90*pi/180:1*pi/180:90*pi/180); %theta角度搜索范围
thetanum=length(thetatest);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%计算信号协方差矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T_Vector=(1:K)/fs;
A=zeros(Nnum,SignalNum);
SignalVector=zeros(SignalNum,K);
%NoiseVector=zeros(Nnum,K);
Xt=zeros(Nnum,K);
%%构造A矩阵
for k2=1:SignalNum
for k1=1:Nnum %1:12
At(k1)=exp(j*(k1-1)*2*pi*d*sin(theta(k2)*pi/180)/lambda);
A(k1,k2)=At(k1);
end
end
%%%构造信号矩阵和噪声矩阵
for k1=1:SignalNum
SignalVector(k1,:)=exp(j*2*pi*Fc(k1).*T_Vector); %信号
end
Xtt=A*SignalVector;