1. 绪论
在精确制导、空间监视、战场感知、防空预警等诸多涉及国家安全和军事实力的应用领域中,目标识别是决定武器系统作战效能的核心技术之一,也是长期制约武器系统信息化发展的瓶颈问题。雷达作为导弹防御系统中重要的传感器之一,以其全天时、全天候、作用距离远等独特的技术优势,成为实现目标识别的主要技术手段之一。随着导弹武器突防技术的发展,人们对雷达测量能力提出了越来越高的要求。从最初只需要测量目标弹道,到后来对目标特性RCS的需求,再到后来需要的目标宽带特性以及极化特性。宽带或超宽带电磁波是雷达技术在频域应用的大幅扩展,可同时激励目标谐振区、光学区甚至瑞利区散射特性,进而获取更加丰富的目标与环境信息 [1] [2] [3] [4] [5]。近年来高速采集和存储技术的突破,催生了雷达数据宽带直接采集系统。该系统使得雷达成为一种数字化的传感器,在雷达波束和威力范围内,以GHz的速率对脉冲周期时间内回波进行采集和储存,实现了“所见即所得”的宽场景、大纵深数据获取。在直采数据中,既包含多目标精确的相对空域分布信息,也包含单个目标的宽窄带、极化特性信息。
本文设计实现某X波段雷达宽带直采数据回波提取软件,目的是从雷达宽带直采数据中提取雷达回波,为以后目标特征提取、目标识别等工作提供基础。下面首先给出软件设计方案,接下来分别介绍软件设计中的三种关键技术,对软件性能作出评估,最后是结束语。
2. 雷达宽带直采回波提取软件设计
现代软件开发多采用组件方式,即利用已有的组件“搭建”应用程序,藉以提高软件开发效率。这些组件模块可以运行在同一台机器或同一网络中不同的机器上,甚或运行在不同的操作系统上。使用组件带来的好处是,当应用系统的需求发生变化时只需对受影响的组件模块进行修改,然后重新整合得到新的升级软件,无需对整个系统进行编译修改,从而确保了软件的健壮性和易维护性,降低了系统开发的复杂度。COM (Component Object Model,组件对象模型)是Microsoft提出的一种基于二进制标准、与编程语言无关的软件架构,是OLE (Object Linking and Embedding,对象链接与嵌入)复合文档和ActiveX等技术的基础。语言无关性、进程透明性、可重用性和安全性是COM的主要特性,COM代码以可重用二进制的组件形式存在。在COM的创建上,可以利用Matlab、C++等多种编程语言进行。鉴于Matlab编程语言擅长矩阵型数据处理及数据的图形显示,在Matlab开发平台上开发封装回波提取算法的COM组件是一个比较合理的选择。另一方面,在Visual Studio平台上基于C/C++语言开发的应用程序虽然在数据处理能力上比Matlab稍逊一筹,但其实时性、交互性远超后者。因此将两方面结合起来,发挥不同编程语言优势,是一个较好的软件开发解决方案。
此外在混合语言编程中,如何实现不同进程间的通信是一个重要的问题。在Windows操作系统平台上,目前常用的进程间通信包括剪贴板、WM_COPYDATA消息、文件映射(File Mapping)、动态数据交换(DDE)、管道(Pipes)、远程过程调用(Remote Procedure Call, RPC)、邮件槽(Mailslots)、Windows套接字(Windows Sockets)等。
基于上述考虑,雷达宽带直采回波提取软件采取“COM + 剪贴板”的设计方案,如图1所示。COM组件封装直采回波提取算法,在Matlab平台上开发并在主程序所在操作系统注册。主程序在Visual Studio 2010上开发 [6] [7],通过调用COM组件提供的功能,实现雷达宽带直采回波提取。主程序和COM之间通过剪贴板机制实现通信。
不难理解,在图1所示回波提取软件设计方案中需要采用两个线程,不妨称之为主线程和回波提取线程,主线程工作流程如图2所示,回波提取线程工程流程见图3。参见图2,雷达宽带直采回波提取软件运行后,主线程启动运行。主线程启动剪贴板监听功能,负责清空Windows剪贴板上既有内容,接下来启动回波提取线程。主线程在执行过程中,一旦发现剪贴板上存有COM组件发来的回波提取消息,就去处理该消息,主要是将COM提取的回波保存到磁盘文件上。主线程消息处理完毕后再次处于剪贴板信息监听状态。最后,回波提取工作结束,主线程关闭剪贴板监听功能后终止运行。在此期间若用户提前终止操作,则主线程通过剪贴板向回波提取线程发出提前终止运行命令。

Figure 1. Software design block diagram of wideband radar echo extration
图1. 雷达宽带直采回波提取软件设计方案
图3所示为回波提取线程工作流程。该线程运行后要做的第一件事就是初始化COM组件,为下面的回波提取创造条件。若COM组件初始化失败,回波提取线程直接退出。在初始化成功的情况下,回波提取线程调用COM组件提供的算法实现雷达宽带直采回波提取,并将提取过程中处理进度信息通过Windows剪贴板发给主线程。图3虚线框内的功能由COM提供。回波提取线程完成全部回波提取工作后正常退出。如回波提取线程在工作中发现剪贴板上有用户提前终止运行的命令,则线程以提前结束运行作为响应。

Figure 3. Workflow of echo extration thread
图3. 回波提取线程工作流程
3. 关键技术
下面着重介绍雷达宽带直采回波提取软件设计及实现中用到的三项关键技术:COM组件、剪贴板技术及多线程技术。
3.1. COM组件的创建及使用
· 创建COM组件
在Matlab平台上创建COM组件界面如图4所示,步骤如下:
Step1:以Matlab函数形式编写雷达宽带直采回波提取源程序(.m文件形式)。
Step2:在Matlab命令行输入deploytool,启动Deploytool Project对话框,在对话框中设置好项目名称、项目保存位置,项目类型选择Generic COM Component,设置好后点击“OK”按钮进入下一步。
Step3:添加.m源程序文件以及用到的所有辅助函数。
Step4:运行Build命令生成COM组件,组件自动在Windows操作系统中注册。
· 使用COM组件
为使用上述Matlab平台上创建的COM组件,需调用Windows API (Appication Programming Interface,应用程序编程接口)函数AfxOleInit来初始化COM运行环境,调用CreateDispatch函数初始化调用接口,并在不需要COM组件时调用ReleaseDispatch函数释放COM所占系统资源,示例C++代码如下:


Figure 4. Build a COM on Matlab platform
图4. 在Matlab开发平台上创建COM组件
3.2. 利用剪贴板实现主线程和COM组件间通信
在Windows操作系统中,剪贴板实质上是一块在各应用程序间共享的公共内存区域。当在应用程序中执行“剪切”或“复制”操作时,应用程序将所选择的数据以一定的格式存放到剪贴板上,其它任何支持这些数据格式的应用程序都可以访问它们。剪贴板上可存放任意格式的数据,这些数据的格式称为剪贴板数据格式,它们既可以是系统预先定义好的,也可以是用户自定义的。
在雷达宽带直采回波提取软件的实现过程中,COM组件所在的回波提取线程和主线程之间采用Windows剪贴板作为通信媒介。为提高源程序代码的可读性,采用字符串型剪贴板数据格式。当主线程向回波提取线程发起通信时,主线程把字符串信息放在剪贴板上,Windows操作系统负责通知回波提取线程使用该消息,反之亦然。在Visual Studio开发平台上 [8] [9] 为了向操作系统定制这样的功能,需要调用数个API函数。其中启用剪贴板监听功能时需调用AddClipboardFormatListener,函数原型为:
BOOL WINAPI AddClipboardFormatListener(_In_HWND hwnd);
这里hwnd为实现剪贴板信息监听功能的主线程窗口句柄。
当关闭剪贴板监听功能时,使用RemoveClipboardFormatListener函数实现:
BOOL WINAPI RemoveClipboardFormatListener(_In_HWND hwnd);
参数hwnd的含义与上面AddClipboardFormatListener中的相同。
作为通信的另一方,在COM组件所在的回波提取线程中,下述Matlab代码负责将字符串strMsg放到剪贴板上:
try
clipboard('copy', strMsg);
catch exception
end
另一方面,从剪贴板上获取字符串型信息并赋予变量str的Matlab代码为:
str=clipboard('paste');
3.3. 多线程技术
多任务是在一个操作系统平台上可以同时运行多个程序或者能在一个程序内部实现多任务的能力。早先的DOS、Windows 3.x操作系统都不是为多任务而设计的,部分原因是内存管理能力不够强。随着计算机技术的发展,从Windows XP开始及在其后续版本操作系统中实现了真正的多任务、多线程,为各种实时应用程序的实现提供了软硬件基础 [10]。
为了在主线程中创建并启动回波提取线程,需要使用API函数AfxBeginThread,它所创建的回波提取线程运行时没有窗口界面,因为它通过剪贴板与外界交互。AfxBeginThread函数各参数含义如表1所示。

Table 1. Parameter information of AfxBeginThread
表1. AfxBeginThread函数参数信息
当AfxBeginThread函数成功创建回波提取线程后,会返回一个指向CWinThread对象的指针,后面可以用该指针对线程进行控制。当全部回波提取工作完成,pfnThreadProc指向的线程函数返回时,回波提取线程的运行就结束了。
4. 雷达宽带直采回波提取软件性能评估
为评估雷达宽带直采回波提取软件性能进行仿真数据试验。图5给出主线程运行截图。试验结果表明,回波提取正常,软件运行效率较高,交互性好,实现了预定功能。
图6是对一条回波进行傅里叶变换后得到的幅频图,从幅频图中可以得出结论:该回波的频率成分集中在低频即−60~60 Hz内。在此基础上对多个回波分析,可以得到空间目标的一维距离像、二维像,并可提取目标的微动特征,作为空间目标识别的识别信息。

Figure 5. The window of main thread about wideband radar wave extraction software
图5. 雷达宽带直采回波提取软件主线程运行界面

Figure 6. An amplitude-frequency chart of an echo wave
图6. 一条回波的幅频图
5 结束语
雷达宽带直采数据蕴含着导弹等空间目标的重要信息,从宽带直采数据提取回波信息是进行后续特征提取、目标识别等数据处理的前提和基础。在某X波段雷达宽带直采回波提取软件的设计和实现中,使用COM组件实现了程序源代码重用,缩短了软件开发周期。采用Windows剪贴板作为COM组件和主线程间通信机制,提高了软件各模块的独立性和软件整体的健壮性。采用多线程技术提高了软件运行的速度和交互性。在仿真数据试验及工程实践中的应用表明,该软件性能达到了设计要求。