网络无线侦察接收机软件系统的设计和实现网络无线侦察接收机软件系统的设计和实现
本文在分析网络无线侦察接收机软件系统框架的基础上,结合wxWidgets库给出如何设计用户界面、如何利用
wxMathPlot对接收到的数据进行画图、信号处理的基本方法,重点分析了如何解决网络接收数据时可能出现
的“粘包”问题,最后给出了软件运行效果。
1 网络无线侦察接收机软件系统总体设计
网络无线侦察接收机的总体设计如图1所示。硬件系统采集到的数据通过网络采用TCP/IP协议传送给信号实时显示系统。整
个软件系统主要由以下几个模块组成:网络模块、GUI模块、信号处理模块、画图模块、存储模块。其中网络模块主要负责接
收硬件发送的数据;GUI模块则负责与用户的交互;信号处理模块则主要负责对采集到的信号进行一定的处理,如功率谱估
计、解调等;画图模块则需要将网络收到的数据实时显示在用户界面;存储模块则负责将收到的数据存储在电脑磁盘。其中
GUI模块是整个软件系统的核心,其余各模块之间的信息传递则是通过GUI模块,GUI模块相当于一个信息中转站。
目前支持C++进行GUI开发的软件包很多,主流的包括wxWidgets、MFC、QT等等。和其他GUI开发库相比,wxWidgets拥有
丰富的并且开源组件,可以吸引众多人士对其进行改进,对其不断扩充和发展;为其所支持的各种平台提供几乎一致的GUI应
用程序接口(API)。程序从一个平台换到另一个运行,只需要重新编译,链接相应的库文件即可。它提供了一个与平台无关的
framework,所以程序设计时选用wxWidgets-2.8.0库进行GUI开发,编译工具使用的是codeblocks8.02。
2 关键模块设计
2.1 GUI模块的设计
Win32程序的main函数代表程序运行起点,对于wxWidgets程序,整个程序的执行即主线程开始启动,是从建立一个wxApp类
的对象并调用其类成员函数OnInit()函数开始的。OnInit()函数中需要完成的工作则是创建程序窗口的实例。程序中使用的顶层
窗口是从wxFrame(一个可以容纳其他窗口和控件的顶层窗口,通常拥有标题栏和菜单栏)派生出来的。
2.2 画图模块的设计
信号处理的结果需要在界面上显示出来,如频谱图,星座图等。
wxMathPlot是一个用来画二维曲线的图形库。系统中主要使用该库绘制一些分析曲线,向用户展示分析结果(如频谱图)。
wxMathPlot采用的也是类继承的方式。坐标轴和曲线都是以Layer的方式叠加在画图窗上的。
2.3 信号处理模块的设计
为了了解信号各频率成分的构成情况,对网络收到的硬件采集的数据进行功率谱估计。估计方法包括经典功率谱估计和现代功
率谱估计方法。系统中使用的主要是经典功率谱估计,其中又包括周期图法和BT法,下面简要介绍一下周期图法计算功率谱
的计算步骤:
其中步骤1)是指取观测样本的N个值对其进行N点的傅里叶变换,得到的结果UN(ω),步骤2)中对UN(ω)模的平方是确定信号
uN(ω)的能量谱,对能量谱除以持续时间N,其结果是对uN(n)的功率谱估计。
2.4 网络模块的设计
网络模块是基于TCP/IP协议采用C/S通信模型完成的。在C/S模型中,PC属于客户端(Client),而硬件属于服务器端
(Server)。由用户在界面上设置连接硬件所需要的IP地址和端口号,PC端主动向硬件发起连接。连接建立以后,PC通过以太
网接收硬件采集的数据。图2展示了C/S通信模型的实现框架。
实际上,在网络中传送的数据都被分割成包(packet)的形式进行传送。在进行客户端程序开发的时候,出现“粘包”问题。“粘
包”指的是发送方发送的若干个数据包到接收方时都粘在一起。图3(a)~(d)分别展示PC接收到各种粘包的情况。引起“粘包问
题”的原因主要包括以下两个:1)发送端:TCP为了提高传输效率,如果发送方发送的数据包很小,TCP不会立即将该数据包
发送出去,而是等收集到足够多的数据,将几个数据包合成一个包才发送出去;2)客户端:接收方用户进程没有及时处理接收
到的数据,即下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据则放在前一包数据之后。
为了解决“粘包”问题,Client和Server端约定好发送数据包的格式如图4所示。
当PC端收到“粘包”时,首先经过预处理过程——解包,将粘在一起的包分成独立的数据包,并将每个数据包中的数据取出依次
拷贝到pool中分配的缓冲区中。
预处理过程构造类PaeketBuilder,该类的具体设计如下。
评论0
最新资源