%该程序用于计算均匀直线阵(ULA)中信号源个数估计性能随SNR的变化情况,采用Monte-Carlo模拟。
%算法:AIC
%==========================================================================
clear
clc
close all
%==========================================================================
Ne=8; %单元个数
lambda=1; %波长
beta=2*pi/lambda;
d=lambda/2;
%===============================产生信号===================================
M=100; %快拍数
thetas=[5,20,30]*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=-20:2:20;
monte=100; %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; %计算协方差矩阵
D=sort(eig(R),'descend');
Ns_est(mk)=myAIC(Ne,D,M); %估计到的信号源个数
end
Prob(nsnr)=length(find(Ns_est==Ns))/monte;
end
figure(1)
title('AIC算法信源数目估计')
plot(SNR,Prob,'o-')
xlabel('信噪比(dB)')
ylabel('成功概率')
评论9