1 引言
多传感器数据融合是通过收集空间分布的各种传感器的测量数据,对目标进行检测、关联、配准、跟踪、估计等进行多级多功能处理,以更高的精度或概率得到目标的状态信息,对其进行完整、及时的态势评估[1]。随着多传感器数据融合技术的发展,相应的理论及算法也越来越多,给该课程的教学和科研都带来了不便。因此,构建一个仿真平台,实现各种融合算法的仿真实验,评估各种模型、算法的性能,对实验数据进行定量分析等,都是至关重要。目前,也有一些开发的多传感器数据融合仿真平台[2~4 ],但都是基于Visual C++为开发工具。由于Visual C++开发工具在图形显示、数值分析和矩阵运算等方面较MATLAB语言处于劣势,但其具有强大的封装、人机交互的功能;MATLAB语言设计的程序存在不能脱离其运行环境,难以直接运用的缺点。针对此,本文提出了采用Visual C++6.0和Matlab7.0语言联合开发数据融合仿真平台。一方面发挥MATLAB语言强大的运算功能,另一方面体现Visual C++成熟友好、人机交互的功能。文中介绍了仿真平台的需求分析、功能、联合开发步骤以及最终实现。
2 数据融合仿真平台的分析与设计
2.1 需求分析
在现代高科技战争的大范围立体空间中,单独的雷达等传感器不可能在任何时候都能发现和跟踪空中所有的目标,为了得到空中目标更全面的信息,需要多数量、多类型传感器协同工作。传感器在取得目标的位置、运动参数数据(如径向距离、径向速度、方位和俯仰角等)后,必须对多传感器的测量数据进行预处理、跟踪、关联、融合等处理,实时进行目标发现、状态估计、目标属性识别、态势评估、威胁分析和辅助决策等。这一系列的处理就是多传感器数据融合的过程。由于影响数据融合效果的因素很多,仅靠研制人员进行验证、研究比较、定性评估是远远不够的,必须寻找一种有效的方法进行验证和定量评估。仿真技术便是利用计算机技术和仿真建模技术,来对数据融合结果进行定量研究,即验证数据融合结果的可靠性或其它需要验证的属性。因此,仿真平台在信息融合技术发展中具有极其重要的地位。但是,由于目前已经相对成熟的理论和算法很多,任何一个仿真平台都不可能囊括全部,所以,无论对于教学还是科研,构建一个通用的多传感器数据融合仿真平台具有其特殊的实用价值。
2.2 仿真平台功能
多传感器数据融合仿真平台主要用来实现目标跟踪、航迹关联、航迹融合等各种算法的验证,提供算法研究比较的一个平台。此平台界面采用Visual C++6.0语言设计,算法通过Matlab7.0语言来实现。
仿真平台具备以下功能:
(1)提供良好的人机界面。用户可以用命令菜单和热键设置初始条件来获取观测数据,可以实时对多传感器的测量数据进行预处理、跟踪、关联、融合、态势评估等一系列处理,可以实时干预某种融合处理的运行和停止,可以合理配置、选取和设定各种实验参数。
(2)数据处理功能。具有强大的数值计算、数据分析处理、系统分析以及符号运算等功能。
(3)图形显示功能。能以人性化的显示方式将所需信息综合显示,同时允许设定各种参数进行智能判断,使其既具有基本模拟功能,又具有图形显示的能力。
(4)仿真重演功能。根据记录的信息重现系统仿真,方便融合平台重复进行各项功能验证。
(5)脱离环境,独立运行的功能。可以脱离Visual C++与MATLAB环境独立运行,管理简单灵活,有较好的通用性、扩展性和可移植性。
3 数据融合仿真平台的实现
本系统采用VisualC++6.0与Matlab7.0混合编程来进行开发。MATLAB作为当今世界上应用最为广泛的数学软件,具有非常强大的数值计算、数据分析处理、系统分析、图形显示甚至符号运算的功能,是一个较完整的数学平台。该仿真平台使用MATLAB就是为了实现预处理、跟踪、关联、融合、态势评估等一系列数据处理算法,将其封装成.m函数,并制成MATLAB COM组件。Visual C++是当前 Windows 下的主要编程语言之一,它能方便地形成应用软件中所需要的各种用户界面和工具,并直接与系统及底层硬件交换数据。该仿真平台使用Visual C++就是为了开发界面友好、管理简单灵活,通用性、扩展性和可移植性强的多传感器数据融合仿真平台操作界面并调用COM组件实现仿真功能。二者的结合使用,可实现优势互补。
MATLAB与Visual C++结合的方法有多种,但其实用程度与范围不同。常用的方法有[5,6]:
(1) VC利用MATLAB引擎(Engine)调用MATLAB函数。
(2) 通过调用语言编译器和链接器,将MATLAB程序编译成VC文件并嵌入VC。
(3) 使用matcom工具将.m函数文件转化成相同功能的C++文件并嵌入VC。
(4) 使用MATLAB在VC中的Add-in插件,将MATLAB文件导入VC环境中。
(5) 使用MATLAB提供的C接口函数库或C++接口函数库直接在VC中编程。
(6) 利用MATLAB COMPILER(编译器),将MATLAB的函数编译成可脱离MATLAB环境的COM组件,然后在VC中调用。
其中前两种方法必须在安装了MATLAB的系统上运行,在实际开发中很少采用,采用第三种方法时待编译的.m文件不能涉及MATLAB的内部类。
本文采用COM组件来实现VC与MATLAB混合编程。COM组件是以Win32动态链接库(DLLs)或可执行文件(EXEs)的形式发布的可执行代码组成的,它完全与语言无关,以二进制的形式发布,可以很容易从旧版本升级到新版本。该方法生成的应用软件对MATLAB没有依赖性,可以与之独立而运行。具体实现步骤如下:
3.1 使用MATLAB R2007a来制作COM组件
a. 启动MATLAB,在Command Window中输入dotnettool来启动MATLAB Builder图形用户界面。
b. 在MATLAB Builder中首先创建一个新工程(File->NewProject)。
c. 为新建的工程添加已经建立好的.m文件。
d. 编译COM组件:选择Build | COM Object菜单项编译当前工程的COM组件。
3.2 在Visual C++中调用COM组件
a. 建立一个VC++ 6.0 MFC工程,类型为Dialog based。
b. 将新建的COM工程所在的文件夹下的文件copy到VC工程文件夹下。
c. 选择VC Project | Add to Project | Files菜单项,将上述文件添加到工程中。
d. 插入资源:选择Insert | Resource菜单项插入Dialog、Menu等资源。
e. 首先初始化COM,然后创建一接口指针,通过指针调用其方法,最后释放COM,具体代码略。
3.3 设置编译环境
选择Project | Settings菜单项,弹出Project Settings对话框,选择General选项卡,在Microsoft Foundation Classes下选择Use MFC in Static Library,目的是发布程序,不需要拷贝 MFC动态链接库文件。
选择C/C++选项卡,在Category中选中precompiled headers,选中Automatic Use of precompiled headers单选按钮,并将header设为stdafx.h。
3.4 编译及发布程序
首先在Win32 Debug下调试程序,调试成功后再选择在Win32 Release下编译成发布版。Debug(调试版本)下包含调试信息,并且不做任何优化,便于程序员调试程序。Release(发布版本)下不包含调试信息,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。所以发布程序需要在Release下编译。
3.5 打包COM组件
编译结束后的COM组件只能在本机上使用,要在其他机器上使用必须要注册,且注册MATLAB创建的COM组件需要一些文件的支持,如MCRInstaller.ere。打开新建COM时保存的工程文件,选择Comment | Package Comment菜单项,弹出Package Files对话框,勾选Include MCR将MCRInstaller.ere包含到发布包中,点击Create打包。完成后拷贝COM目录下的可执行文件到目标机器运行,按提示安装MCR,完成COM注册。
3.6 平台实现
系统主界面如图1所示。为了验证仿真平台的有效性和实用性,选择菜单功能|目标跟踪,进入目标跟踪界面,如图2所示;对kalman滤波算法进行仿真验证,点击“kalman”按钮进入系统,分别输入采样周期和观察值,如图3所示;点击确定按钮,出现kalman滤波算法仿真结果,如图4所示。
另外,各种算法性能测试是在蒙特卡洛模式下进行的,通过设置不同的场景,如改变航迹和传感器数目、改变航迹的动作参数,改变传感器的采样周期等,对仿真结果进行比较。通过测试,平台可以有效地实现不同观测数据的多级多功能融合,满足融合算法测试的需要,运行稳定,其数据处理和显示功能为教学和科研提供了强有力地支撑。
本文介绍了采用Visual C++6.0和Matlab7.0语言联合设计开发多传感器数据融合仿真平台,该平台可实现融合算法仿真实验、测试数据分析、算法评估等功能,并以人性化的显示方式将所需信息综合显示,满足数据融合各类算法验证要求,平台运行稳定,为课程教学和科学研究提供了强有力地支撑。