📄 dbtex5.m
字号:
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% 程序功能:本例为DML和ULA的Monte-Carlo仿真 %
% 程序员:王浩 harvey %
% 日期:20071106 %
% 备注: 当信源相干时,MUSIC不能处理,因此本例利用了其他DOA算法 %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%function dbtex5
%*******************************************%
% 参数定义
%*******************************************%
lambda =0.03; %波长
D =0.45*lambda; %阵元间距
T =35; %快拍数;
K =12; %数字阵通道数
theta=d2r([-5 0]); %目标角度,目标数由角度的个数给出
phi =zeros(size(theta')); %目标角度
SNRtrial = [-10 -5 0]'; %每个阵元的信噪比dB
alpha =d2r([20 210])'; %目标信号的开始相位
dalpha =d2r([0 -10])'; %快拍间的相移,表示目标在以常速运动
dist=Inf*ones(size(theta')); %源的距离,Inf指无穷大
tgtModel = 'const'; %仿真的目标类型
%noiseModel ='rndnw'; %仿真的噪声类型
noiseModel ='rndn'; %仿真的噪声类型
doaStart=d2r([-4 1]);
Ntrial=10;
%*******************************************%
% 运行命令
%*******************************************%
ant =defant('isotropULA',[K,D]); %定义天线,各向同性的均匀线阵
Ndoa=size(doaStart,2);
NSNRtrial=size(SNRtrial,1);
doaMean=zeros(NSNRtrial,Ndoa);
doaStdDev=zeros(NSNRtrial,Ndoa);
doaStdDevCRB=zeros(NSNRtrial,Ndoa);
noTgt=size(theta,2);
for nSNR =1:NSNRtrial
fprintf('nSNR=%d\n',nSNR);
edoaAll=[];
SNR=ones(size(theta',1),1)*SNRtrial(nSNR,1);
RssHat=zeros(noTgt,noTgt);
for nTrial=1:Ntrial
fprintf(' nSNR= %d,nTrial= %d,Total= %d\n',nSNR,nTrial,(nSNR-1)*Ntrial+nTrial);
%产生仿真信号收到的天线信号,具体各参数含义请参考doc compsim4函数说明
[sig,tgtSig] =compsim4(ant,lambda,T,tgtModel,[theta',phi,SNR,alpha,dalpha,dist,eye(size(theta',1))],noiseModel,eye(K));
%估计DOA:s
edoa=sdoapar1('dml',sig,doaStart);
pdoapar(edoa)
edoaAll=[edoaAll;edoa];
%edoaAll=[edoaAll;getm(edoa.doa,1,':',':')'];
%以下估计目标信号的相关矩阵
RssHat=RssHat+(1/T)*tgtSig*tgtSig';
end% for nTrial
doaMean(nSNR,:) =mean(edoaAll);
doaStdDev(nSNR,:)=std(edoaAll);
doaStdDevCRB(nSNR,:)=crbdet(ant,theta,RssHat,T,lambda)
end%for nSNR
fprintf('\nMean of DOA:s[degrees]\n')
fprintf('DOA1 DOA2\n')
disp(r2d(doaMean))
fprintf('Standard deviation of DOA:s[degrees]\n')
fprintf('DOA1 DOA2\n')
disp(r2d(doaStdDev))
fprintf('Standard deviation Cramer Rao Bound of DOA:s[degrees]\n')
fprintf('DOA1 DOA2\n')
disp(r2d(doaStdDevCRB))
figure
plot(SNRtrial,r2d(doaStdDev(:,1)),SNRtrial,r2d(doaStdDev(:,2)),SNRtrial,r2d(doaStdDevCRB(:,1)))
title('Standard deviation of DOA');
legend('Target1','Target2','CRB')
xlabel('SNR ');
ylabel('[degrees]');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -