跟踪模块详细设计v13.docx
《跟踪模块详细设计v13.docx》由会员分享,可在线阅读,更多相关《跟踪模块详细设计v13.docx(16页珍藏版)》请在冰豆网上搜索。
跟踪模块详细设计v13
跟踪程序设计说明
1.范围
1.1标识
标识号:
ZH4.090.003SDD-01
名称:
被动跟踪模块详细设计说明
作者:
闫桂新
版本号:
V1.1
改动日期:
2011-04-06
1.2系统概述
本文档适用于HYA系统的跟踪算法部分。
目标跟踪是HYA的主要功能之一,对此算法的概要设计文档参见《跟踪子系统设计说明》。
1.3文档概述
本文档是跟踪模块的详细设计,从实际编程角度说明了跟踪模块的实现方法,内容包括跟踪算法、目标判定、预置跟踪三个主要功能。
本文档将提交给软件实现人员作为编程指导。
2引用文档
概要设计文档:
ZH4.090.003SSDD-01《跟踪模块概要设计》
文档规范:
GJB438B-2009《军用软件开发文档通用要求》
HYA项目编码规范:
《中科海讯软件开发规范》
3CSCI级设计决策
跟踪模块用一个独立封装的类来实现,对外提供四个接口函数(即公有函数),分别用于波束数据的传入、手动跟踪目标的指定和撤销、传出跟踪结果。
定义一个存放目标信息的结构,内容包括跟踪目标方位角、跟踪目标能量、跟踪目标前20次跟踪方位记录、预置跟踪目标角速度、启动预置跟踪时需要记录的起始方位、跟踪模式、预置跟踪目标匹配次数记录、跟踪目标丢失次数记录、自动跟踪目标丢失极大值记录。
被跟踪的目标信息以类成员变量形式保存在此结构的数组中。
为避免数据访问冲突,跟踪算法、手动目标控制、跟踪结果传出这三部分要用一个互斥的信号量进行控制,不能同时进行。
控制逻辑要考虑周密,避免程序死锁。
当数据出现非法值时,对错误进行处理:
内部数据忽略,数据有问题时跳过。
模块尽量分解为小的独立函数,使程序结构清晰,便于调试和维护。
对于算法中所有关键的常量信息则单独保存在一个头文件中,以便维护。
软件运行环境:
xpe。
运行周期:
1秒。
4CSCI体系结构设计
4.1CSCI部件
跟踪模块包括以下软件单元:
HYA-SDD-M08-01:
跟踪模块初始化单元(类创建函数)
HYA-SDD-M08-02:
跟踪过程主控逻辑单元(接口函数)
HYA-SDD-M08-03:
跟踪算法实现单元(私有成员函数)
HYA-SDD-M08-04:
预置跟踪处理单元(私有成员函数)
HYA-SDD-M08-05:
自动跟踪目标判定与目标消失判定单元(私有成员函数)
HYA-SDD-M08-06:
手动跟踪目标指定单元(接口函数)
HYA-SDD-M08-07:
手动跟踪目标撤销单元(接口函数)
HYA-SDD-M08-08:
跟踪结果传出单元(接口函数)
4.2执行方案
跟踪模块各CSCI部件之间关系如下图所示:
图a.跟踪模块的流程框图:
其中的箭头表示数据流向。
对目标信息进行设定读取的模块均由互斥信号量控制,以免同时访问。
4.3接口设计
4.3.1接口标识和图表
波束数据传入与跟踪启动接口:
HYA-TR-IF01
手动跟踪目标指定接口:
HYA-TR-IF02
手动跟踪目标撤销接口:
HYA-TR-IF03
跟踪目标信息获取接口:
HYA-TR-IF04
4.3.2HYA-TR-IF01
波束数据传入与跟踪启动接口。
此接口以类的公有成员函数形式实现,参数是一个1080个浮点元素的数组指针。
调用此接口后自动对传入的波束数据做跟踪处理,结果保留在类的私有成员变量中。
当跟踪处理正常结束时,接口返回值是0,出现异常时,返回值是1。
4.3.3HYA-TR-IF02
手动跟踪目标指定接口。
此接口以类的公有成员函数形式实现,参数有两个,第一个是一个浮点数,是跟踪目标的近似角度值(人工操作可能存在一定误差);第二个是目标批号(即目标编号),是1到8之间的整数。
当手动跟踪目标被正常确立时,接口返回值是0;不能被正常确立时(出现死锁等问题),接口返回值是1。
4.3.4HYA-TR-IF03
手动跟踪目标撤销接口
此接口以类的公有成员函数形式实现,参数是一个整数,代表目标批号。
当跟踪目标被正常撤销时,接口返回值是0;不能被正常撤销时(对应批号没有跟踪目标),接口返回值是1。
4.3.5HYA-TR-IF04
跟踪目标信息获取接口。
此接口以类的公有成员函数形式实现,无传入参数,但带有一个传出参数,是一个包含跟踪信息的结构体数组指针。
当正常结束时返回值是0,其他情况下返回值是1。
5CSCI详细设计
5.1类定义,类中自定义结构与类成员变量
跟踪模块类的定义如下:
classCTrack{};
跟踪模块中含有一个描述目标信息的自定义结构,结构成员如下:
typedefstruct_STrackTarget{
floatm_nDirec;//跟踪目标方位角
floatm_nEnergy;//跟踪目标能量
floatm_nPrevDirec[20];//跟踪目标前20次跟踪方位记录,作预置跟踪用
floatm_nAngularSpeed;//预置跟踪目标角速度
floatm_nForeDirecRec;//启动预置跟踪时需要记录的起始方位
intm_nTrackedMode;//跟踪模式:
1为自动,2为手动,3为预置
intm_nRecNum;//预置跟踪目标匹配次数记录,作撤销用
intm_nJudgeNum;//自动跟踪目标丢失次数记录,作丢失用
intm_nForeMarch;//标记一对预置跟踪目标
}STrackTarget;
跟踪模块类包括以下成员变量:
注:
波束数据由接口函数的参数传入,是一个含有1080个浮点数元素的数组,对应均匀间隔(即每两个相邻波束间隔都是1/3度)的360度全方位波束信息。
floatm_nAllDirecBeam[1100];//全方位波束,由主控发出,前后各扩10条,用于处理边界波束
floatm_nPotentialTarget[1080];//潜在目标
STrackTargetm_blkUpdateTrackTarget[8][8];//存放8次极大波束搜索结果,用于更新自动跟踪目标
STrackTargetm_blkTransTrackedTarget[8];//需要传出的跟踪目标信息
intTRACKMODE;//当前跟踪模式:
1为自动,2为手动
HANDLEm_hMutex;//互斥信号量
5.2HYA-SDD-M08-01
跟踪模块初始化单元,函数说明如下:
函数名
voidInitializeTrack(void);
参数
无
功能
跟踪模块初始化
返回值
无
实现方法
将各个成员变量初始化。
创建互斥量。
5.3HYA-SDD-M08-02
跟踪过程主控逻辑单元,函数说明如下:
函数名
boolMainControlTrack(float*pBeamData);
参数
pBeamData
该指针指向主控模块的波束数据存储区。
功能
此接口由主控程序调用,调用频率是每秒1次(与波束形成的频率相同)。
调用此接口后自动对传入的波束数据做跟踪处理,结果保留在类的私有成员变量中。
返回值
当跟踪处理正常结束时,接口返回值是0,出现异常时,返回值是1。
实现方法
函数流程图如下:
Y
N
Y
N
图b.主控逻辑单元流程图
对流程图中关键步骤的详细说明:
1.调用WaitForSigleObject()函数,实现互斥访问。
2.调用InitializeTrack()进行初始化。
将从主控模块传来的波束数据存储到m_nAllDirecBeam[]中。
将0-9号波束放在1080号波束后边,将1070-1079号波束方向放到0号波束前边,由此将原波束扩充到1100条波束。
此方法用于处理边界波束,计算时处理10-1090号波束。
存储时注意波束的对应号。
3.调用TrackTarget()函数进行跟踪处理。
4.TRACKMODE为1时启动自动跟踪模式,为2时启动手动跟踪模式。
5.当某两个跟踪中的目标在此次跟踪处理中匹配到相同的目标方位时,对两目标同时启动预置跟踪。
6.调用UpdateAndLostTrackTarget()函数进行更新自动目标和判定目标丢失。
7.将跟踪结果记录在m_blkTransTrackedTarget[]中。
8.释放互斥量。
5.4HYA-SDD-M08-03
跟踪算法实现单元,函数说明如下:
函数名
voidTrackTarget(float*pTrackTarget);
参数
pTrackTarget
该指针指向存储的波束数据存储区
功能
对已经确立的自动和手动跟踪目标做跟踪处理,更新跟踪目标方位信息。
返回值
无
实现方法
1.首先判断当前跟踪模式:
1为自动跟踪,2为手动跟踪。
对m_blkTransTrackTarget[]进行处理。
2.判断当前跟踪目标的跟踪模式m_nTrackedMode,1为自动跟踪目标,2为手动跟踪目标,3为预置跟踪目标。
3.处理自动跟踪目标:
判断跟踪目标是否存在,若为空,则不作处理。
从上一次跟踪处理后得到的目标方位附近±3度范围(取相邻的17个波束)内找出一个最大值波束,以此波束所对应的方位来更新跟踪目标方位信息。
并将结果记录在m_nPrevDirec[]中,若数组已经置满,则数据向前移动一位,将新数据添到最后一位,用于以后预置跟踪处理。
当在17个波束中找不到极大值波束,则判断此目标丢失,清除此目标。
4.处理手动跟踪目标:
判断跟踪目标是否存在,若为空,则不作处理。
从上一次跟踪处理后得到的目标方位附近±3度范围(取相邻的17个波束)内找出一个最大值波束,以此波束所对应的方位来更新跟踪目标方位信息。
始终跟踪,不作丢失处理。
5.处理预置跟踪目标:
调用ForecastTrackTarget()函数。
5.5HYA-SDD-M08-04
预置跟踪处理单元,函数说明如下:
函数名
voidForecastTrackTarget(void);
参数
无
功能
通过预测运动目标的角速度来预测运动目标的方位,直到预置跟踪状态被撤销或者目标丢失。
返回值
无
实现方法
函数流程图如下:
清除跟踪目标
是否丢失
是否撤销
Y
N
Y
回到常规状态
N
图c.预置跟踪处理单元流程图
对流程图中关键步骤的详细说明:
1.首先对预置跟踪目标存储的20次跟踪方位(不满20次则取全部)进行直线拟合(最小二乘法),求出角速度,由角速度预测此次方位。
此方位作为第20个数据存储起来,其它数据依次向前移动一位。
2.丢失处理:
正横方向[60°,120°]和[240°,300°]上,两目标角度超过5°时开始判定:
对两个目标,在预测方位开始沿±3度查找最大值波束,与目标波束进行比较,如果不能匹配到极值点,则对预置跟踪目标记为丢失。
若有匹配成功,m_RecNum加1,m_RecNum等于3时撤销预置跟踪,回归到常规跟踪状态。
端射方向[0°,30°]、[150°,210°]和[330°,360°]上,两目标角度超过10°开始判定。
其它方向按7.5°。
临界状态按小的算。
3.两个预置跟踪目标独立,一个跟踪目标撤销或丢失不影响另一个。
5.6HYA-SDD-M08-05
自动跟踪目标判定与目标消失判定单元,函数说明如下:
函数名
voidUpdateAndLostTrackTarget(float*pUALTrackTarget);
参数
pUALTrackTarget
该指针指向存储的波束数据存储区
功能
判断跟踪目标是否丢失,更新自动跟踪目标
返回值
无
实现方法
函数流程图如下:
搜索目标方位
判断目标丢失
更新自动跟踪目标
图d.更新目标与目标消失判定流程图
对流程图中关键步骤的详细说明:
1.搜索目标方位:
对每条波束进行极大值判断:
若为极大值,则将其作为潜在目标记录在m_nPotentialTarget[]中。
同时记录在m_nUpdateTrackTarget[][]中:
一维代表行标、二维代表波束方位,数组记录能量值。
若已经有8组数据,则添加在最后一个数据,其它数据依次向前移动一位,用于更新自动跟踪目标。
2.判断目标丢失:
首先对潜在目标强度进行排序。
m_blkTransTrackedTarget[]的每个目标和m_nPotentialTarget[]进行强度比较,若列入前8,将m_nJudgeNum置零。
若未进前8,则m_nJudgeNum加1。
若m_nJudgeNum等于3,则记为目标丢失,清空此编号目标。
3.更新自动跟踪目标:
若m_nUpdateTrackTarget[][]中行数为8、自动跟踪目标数不足8个,则进行此步。
从第一组数据开始,第1个潜在目标和其他7组潜在目标进行方位比较,如果小于3度,则计数加1,统计7次比较,若计数大于等于5,则进行判定:
如果当前正进行自动跟踪的目标个数不足8个,则把最近的目标(先在第8组中找目标的方位,如果没有则在第7组中找,依次类推)记入自动跟踪列表。
如此遍历8组潜在目标数据进行更新。
4.判断当前波束是否为极大值:
在当前波束的左右各选两条波束,如下图,X0即为一个极大值。
图e.潜在目标判定示意图
5.7HYA-SDD-M08-06
手动跟踪目标指定单元,函数说明如下:
函数名
boolManualTrackTarget(floatnManualDirec,intnManualTargetNo);
参数
mManualDirec:
跟踪目标的近似角度值
mManualTargetNo:
目标批号
功能
在人机界面的波束图中操作人员手工选取感兴趣的波束方位作为跟踪目标,最多可以指定8个目标进行手动跟踪。
返回值
当手动跟踪目标被正常确立时,接口返回值是0;不能被正常确立时(出现死锁等问题),接口返回值是1。
实现方法
函数流程图如下:
图f.指定手动跟踪目标流程图
对流程图中关键步骤的详细说明:
1.调用WaitForSigleObject()函数,实现互斥访问。
2.调整当前跟踪模式:
若为自动,将TRACKMODE改为2,转到手动跟踪模式。
将自动跟踪目标全部清空。
3.判断目标起始方位:
在波束缓存m_nAllDirecBeam[1080]中,从nManualDirec附近±2度范围(与nManualDirec相邻的11个波束)内找出最大值点作为手动跟踪目标的起始方位。
如果没有找到合适极值点,则直接将nManualDirec作为起始方位。
4.将手动跟踪目标的信息存入接口参数指定的目标批号中,即m_nTransTrackedTarget[nManualTargetNo],将该手动跟踪目标信息存入该批号中。
5.释放互斥。
5.8HYA-SDD-M08-07
手动跟踪目标撤销单元,函数说明如下:
函数名
boolManualRemoveTarget(intmRemoveTargetNo);
参数
mRemoveTargetNo:
手动撤销的目标批号,范围是1到8。
功能
撤销手动指定的目标批号,对该批号目标不再跟踪。
当撤销最后一个跟踪目标时,自动跳转到自动跟踪模式。
返回值
当跟踪目标被正常撤销时,接口返回值是0;不能被正常撤销时(对应批号没有跟踪目标),接口返回值是1。
实现方法
函数流程图如下:
撤销指定批号目标
Y
N
转到自动跟踪模式
图g.手动撤销跟踪目标流程图
对流程图中关键步骤的详细说明:
1.调用WaitForSigleObject()函数,实现互斥访问。
2.收到手动撤销命令后,检查目标是否存在,若存在,将指定目标批号,即m_blkTransTrackedTarget[mRemoveTargetNo]的信息清除,对其撤销跟踪。
3.当最后一个目标被撤销后,将TRACKMODE改为1,转到自动跟踪模式。
4.释放互斥。
5.9HYA-SDD-M08-08
跟踪结果传出单元,函数说明如下:
函数名
STrackTarget*GetTrackTargetInfo(void);
参数
无
功能
将自动或手动跟踪目标的信息传出,供主控程序调用。
返回值
一个包含跟踪信息的结构体数组指针:
m_blkTransTrackedTarget[]。
实现方法
1.调用WaitForSigleObject()函数,实现互斥访问。
2.返回m_blkTransTrackedTarget[]。
3.释放互斥。
6需求可追踪性
7注释