%该程序用于计算均匀直线阵(ULA)中信号源个数估计性能随SNR的变化情况,采用Monte-Carlo模拟。
%算法:GDE
%by GangLi
%==========================================================================
clear
clc
close all
%==========================================================================
Ne=8; %单元个数
lambda=1; %波长
beta=2*pi/lambda;
d=lambda/2;
%===============================产生信号===================================
M=100; %快拍数
thetas=[-10,0,5]*pi/180; %信号来波方向
Ns=length(thetas);%信号源个数
for n=1:Ns
SS(n,1:M)=randn(1,M)+j*randn(1,M);
SS(n,1:M)=SS(n,1:M)/sqrt(SS(n,1:M)*SS(n,1:M)'/M);
A(1:Ne,n)=exp(j*[0:Ne-1].'*beta*d*sin(thetas(n)));
end
%================================Monte-Carlo===============================
SNR=-10:2:20;
monte=1000; %Monte-Carlo模拟的次数
for nsnr=1:length(SNR);
SNR(nsnr)
Ns_est=0;
for mk=1:monte
Renoise=randn(Ne,M);
Imnoise=randn(Ne,M);
%=========产生零均值,方差为1的高斯白噪声==========
for n=1:Ne
Renoise(n,:)=Renoise(n,:)./std(Renoise(n,:));
Renoise(n,:)=Renoise(n,:)-mean(Renoise(n,:));
Imnoise(n,:)=Imnoise(n,:)./std(Imnoise(n,:));
Imnoise(n,:)=Imnoise(n,:)-mean(Imnoise(n,:));
noise(n,:)=(Renoise(n,:)+j*Imnoise(n,:))./...
sqrt(Renoise(n,:).^2+Imnoise(n,:).^2);
end
%================================================
Ps=10.^(SNR(nsnr)./10); %信号功率
S=sqrt(Ps).*SS;
Y=A*S+noise; %接收到的信号
R=Y*Y'/M; %计算协方差矩阵
%====================GDE=========================
Rp=R(1:Ne-1,1:Ne-1);
[U,D]=eig(Rp);
U=fliplr(U);
T=zeros(Ne,Ne);
T(1:Ne-1,1:Ne-1)=U;T(Ne,Ne)=1;
Rt=T'*R*T;
r=abs(Rt(1:Ne-1,Ne));
DL=0.01;
GDE=r(1:Ne-1)-DL./(Ne-1)*sum(r);
%================================================
k0=0;
for k=1:Ne-1
if GDE(k)<0
k0=k;
break
end
end
Ns_est(mk)=k0-1;
end
Prob(nsnr)=length(find(Ns_est==Ns))/monte; %估计到的信号源个数
end
figure(1)
plot(SNR,Prob,'o-')
xlabel('SNR(dB)')
ylabel('Probability of Detection')