📄 track_init.m
字号:
function [TrackNumber,Track,NewCandidateNumber,NewCandidate,NewCandidateStatusIndex,NewCandidate_symbol]=track_init(pointNum,isoPoint,CandidateNumber,Candidate,CandidateStatusIndex,Candidate_symbol);
% 本函数做航迹起始,其中pointnum是每个周期未关联的孤立点迹从而送给航迹起始程序的个数
% isopoint孤立点迹的具体信息(每个点迹占一行,其中的第一列为方位角,第二列为俯仰角)
% TrackNumber是具体航迹起始后疑似航迹的个数
% Track是具体的疑似航迹库,是三维数组,页-代表航迹,行-代表不同周期的点迹信息(第一行是最新时刻,以此类推),列-方位角、俯仰角
% CandidateNumber侯选航迹库中的侯选航迹数量,CandidateNumber侯选航迹库
% Candidate_symbol启发式规则和基于逻辑方法航迹库的标识位,0代表启发式规则航迹库,1代表基于逻辑方法航迹库...
% 2代表基于逻辑方法三点外推五点航迹库,3代表已被报出的疑似航迹
% CandidateStatusIndex 候选航迹的点迹个数
% NewCandidateNumber,NewCandidate,NewCandidateStatusIndex,NewCandidate_sy%
% mbol都是中间变量,是存储扩展新航迹库的,最后通过函数返回值将值传给候选航迹库
%启发式规则的航迹起始
%代入全局参数:
% CandidateNumber侯选航迹数量
% Candidate(:,:,:)侯选航迹库,页:侯选航迹,行:点迹,列:方位、俯仰角
% CandidateStatusIndex( )侯选航迹库航迹状态索引(侯选航迹中的点迹数目)
% pointNum(k)孤立点迹数量
% k扫描序号
Track=[],TrackNumber=0;
stagate = 25; %方位角关联门大小
faigate = 25; %俯仰角关联门大小
NewCandidateNumber = 0; %新侯选航迹库中的侯选航迹数量
NewCandidate = zeros(0); %新侯选航迹库
NewCandidate(4,2,1) = 0;
NewCandidateStatusIndex=zeros(0); %新侯选航迹库航迹状态索引
pointasssign=zeros(1,pointNum); %点迹关联标志,未关联为0,反之为1
v=0; %暂存NewCandidateNumber
InvalidTrack = [ 999,999;999,999;999,999;999,999; 999,999];
NewCandidate_symbol=[]
for i = 1:1:CandidateNumber %扫描所有的侯选航迹
if Candidate_symbol(i)~=3
if Candidate_symbol(i)==0
for j = 1:1:pointNum %扫描所有的孤立点迹
if abs( Candidate(1,1,i) - isoPoint(j,1) ) < stagate
%第i条侯选航迹第一个点迹方位sta角Candidate(1,1,i)与第k次扫描的第j个量测的方位角isoPoint(j,1,k)
if abs( Candidate(1,2,i) - isoPoint(j,2) ) < faigate
%第i条侯选航迹第一个点迹俯仰fai角Candidate(1,2,i)与第k次扫描的第j个量测的俯仰角isoPoint(j,2,k)
%---------符合关联条件---------
NewCandidateNumber = NewCandidateNumber + 1; %新侯选航迹库中航迹数量加1
NewCandidate_symbol(NewCandidateNumber)=0
for m = 1:1:3
NewCandidate(5-m,:,NewCandidateNumber) = Candidate(4-m,:,i);
end
NewCandidate(1,:,NewCandidateNumber) = isoPoint(j,:);
NewCandidateStatusIndex(NewCandidateNumber) = CandidateStatusIndex(i)+1;
pointasssign(j) = 1; %标志该点迹已被关联
%-------------------------------
end
end
end
end
%判断是否第i个航迹要被启发式规则的方法中止,如果中止转到基于逻辑的方法判断
if NewCandidateNumber ==v
logicinit % 如果没有被启发式规则起始,转到基于逻辑起始
else v=NewCandidateNumber % 否则纪录基于启发式规则发现的候选航迹的数目
end
else logicinit
end %开始判断下一个航迹
end
%未被关联点迹作为航迹头加入新侯选航迹库
for i = 1:1:pointNum
if pointasssign(i) == 0
NewCandidateNumber = NewCandidateNumber + 1; %新侯选航迹库中航迹数量加1
NewCandidate(1,:,NewCandidateNumber) = isoPoint(i,:); %添加航迹头
NewCandidateStatusIndex(NewCandidateNumber) = 1; %新航迹状态索引,1-一个点迹
NewCandidate_symbol(NewCandidateNumber)=0;
end
end
for kk = 1:1:NewCandidateNumber
if NewCandidateStatusIndex(kk) >= 3 & NewCandidate_symbol(kk)==0
TrackNumber = TrackNumber + 1;
Track(:,:,TrackNumber) = NewCandidate(:,:,kk);
NewCandidate(:,:,kk) = InvalidTrack;
NewCandidate_symbol(kk)=3
plot(Track(1:3,1,TrackNumber),Track(1:3,2,TrackNumber),'or-');
hold on
elseif NewCandidateStatusIndex(kk) >= 4 & NewCandidate_symbol(kk)~=0
TrackNumber = TrackNumber + 1;
Track(:,:,TrackNumber) = NewCandidate(:,:,kk);
NewCandidate(:,:,kk) = InvalidTrack;
NewCandidate_symbol(kk)=3
plot(Track(1:4,1,TrackNumber),Track(1:4,2,TrackNumber),'og-');
hold on
end
end
xlabel('目标方位角 单位 mrad');
ylabel('目标俯仰角 单位 mrad');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -