function [e,ee]=fget_data_association_hypotheses(omega)
[m,n]=size(omega);
%
point_layer=1;%深度优先算法层数指针
point_measurement=zeros(m,1);%量测和目标关联指针
point_measurement(1)=1;%设置第一个量测指针为一,即第一个量测和来自杂波
j=1;%量测标识
k=1;%可行事件标识
X=ones(m,1);%可行事件中间输出变量
X_L=ones(2,1);%第L层和目标关联事件
e(:,k)=X;% 可行事件最终输出变量
X_jL=ones(n,1);%第L层关联目标位置中间输出变量
%以下为深度优先搜索算法,详见B.ZHOU, "multitarget tracking in clutter:fast algorithms for data association",IEEE on AES
%VOL.29 NO.2 1993。 因为matlab数组要从1开始,因此该程序中层数L对应与文章中的L-1层
while j while point_layer v=omega(j,:);%提确认阵第j行元素。
Z=find(v);%找出非零元素位置,即找出第j个量测可能的来源
[find_sign,X,point_measurement]=fget_next(Z,X,X_jL,j,point_layer,point_measurement);%判断下一个量测是否满足条件
while find_sign==1
point_layer=point_layer+1;%搜索下一层合适的量测
X_L(:,point_layer)=[j;X(j)];
X_jL(point_layer)=X(j);
k=k+1;
e(:,k)=X;%把可行事件赋值给可行事件最终输出变量
find_sign=0;%设置找到合适量测标志为0退出循环
end
j=j+1;
end
if point_layer>=2
jL=X_L(1,point_layer);
j=jL;
point_layer=point_layer-1;
end
end
[mm,nn]=size(e);
for i=1:nn
ee(:,:,i)=zeros(mm,3);
for j=1:mm
ee(j,e(j,i),i)=1;
end
end