秦少飞,竺小松
(解放军电子工程学院 电子对抗学院,合肥 230037)
第三次技术革命后,互联网技术进入了一个飞速发展的时代,人类的生产生活方式都发生了质的飞跃。移动互联网技术以及智能手机的普及应用,使得人们可以随时随地的获取各类信息,为方便人类日常生活工作,各类电子产品都在不断向智能化、小型化发展。谷歌在2007年建立了开放手持设备联盟,此后,所有个人和厂商都能在Android 平台上开发应用软件[1-2]。 Android 系统自其推出以来 ,因为开源的系统和丰富的软件资源,迅速得到了广大爱好者以及许多厂商的支持[3-4],成为占有率最高的智能手机操作系统。随着Android系统的不断完善,Android系统逐渐拓展到更多的领域:平板电脑,电视,游戏机,数码相机,机顶盒甚至遥控器。目前Android系统的设备数量已经超过10亿台。
在现代的信号分析的方法中,频谱分析在各个学科的领域有着广泛的应用,是从事各种电子产品的研发、生产、检验的重要依据[5]。目前国内外比较常见的频谱仪系统是基于Xilinx Virtex系列的FPGA的数字信号处理系统[6],近年来,美国加州大学伯克利分校在研制类似的频谱仪,其功能包括高速采样量化信号、频带调制、滤波、傅里叶变换和对数字信号的高速传输,这一系列频谱仪的主要特点是具有多个Z-DOK接口,可以接驳多种I/O板(包括双路1GSa/s的采样卡或者四路250 MSa/s的模数,数模转换卡)[7],德国马普研究所近来也在研发一种扩展带宽快速傅里叶变换频谱仪系统。但是以上设备体积大,价格昂贵,无法大量部署,不便于携带,在很多时候我们需要很方便的对某一块区域进行信号检测,比如在保密的会议现场,某科研工作室一些场所等等。开发出方便携带的频谱仪,以便在特殊场合使用。如果结合Android手机的强大处理显示功能,把Android手机作为频谱仪显示控制端,频谱仪就可以减少很大一部分的设备量,而且不同的安卓手机只需要安装上显示控制软件,就可以实现对频谱仪的控制,这使得频谱仪的显示控制部分更易于维护和更换,同时也可降低生产成本。分布式、多节点、网络化、常态化、实时性成为发展趋势,这一切都对设备提出了小型化、简约化的需求。
鉴于这样的应用背景,设计了一种基于Android手机的频谱处理显示系统,利用它在手机上实时的显示出信号的频谱图。本文首先介绍了软件开发环境的构建,搭建了电脑与智能移动终端(手机)交互测试验证平台,利用PC或手机作为Service,对Client进行信息传递和控制操作,着重研究手机端Android环境下的信息传递与控制操作实现方法。通过对手机屏幕的触摸式操作,完成频谱数据的处理显示,实现测量参数设置,最大值迹线跟踪,最小值迹线跟踪,Mark点标记,多Mark点标记,阈值基线,窗口阈值等功能。
本次设计采用固定的主控机作为Service,其他WiFi模块和手机作为Client,进行组网,手机端或其他Client通过PC进行信息传递和控制操作。如图1所示。
图1 简单组网示意图
设计的所涉无线网络节点采用海凌科电子出品的WiFi模块HLK-RM04,其属于基于通用串行接口嵌入式UART-WIFI(串口-无线网)模块,成本低廉性能高,并且HLK-RM04增加了对以太网的支持。
HLK-RM04/RM30/35系列模块是为串行接口的设备提供互联网接入,实现串行数据在Internet网络上的延伸传输,可进一步拓展串行接口设备的使用范围,增强其在不同场合的适用性,扩大其数据传输距离。
模块默认配置为工作在AP模式下,该模式下,WIFI 使能,工作在AP 模式下,HLK-RM04的ETH1、ETH2 功能使能,ETH1 作为WAN,ETH2作为LAN。通过适当的设置,COM1 的数据与网路数据相互转换。如图2所示。
图2 模块默认工作模式
设计PC端的程序开发是基于Visual Studio环境进行, Visual Studio拥有一套完善的开发系统,包括编程开发,调试测评,性能评估等工具,编写的代码可用于Microsoft所支持的所有平台,支持Visual C++、Visual Basic,Visual C#,Visual F# 等众多语言开发。在本系统中主要使用C#语言在Visual Studio中开发TCP服务器端程序。程序设计分成3个模块:搭建服务模块、接收显示模块和发送模块。
测试使用TCP&UDP测试工具,对于TCP_Service的测试,测试工具作为客户端连入TCP_Service,为了模拟PC端的多点转发控制,测试中测试工具模拟接入两个测试客户端。当连接成功时客户端会首先发送一段可收到服务器发送的连接成功提示信息“ ok!Client connect successful!” 在客户端1和客户端2的发送框分别输入“Test information from Client 1”和“Test information from Client 2”,点击发送,便可在服务器端接收到来自两个客户端的测试信息。
Android系统的开发环境搭建步骤如下:
1)安装java SE Development(JDK) ;
2)配置环境变量;
3)安装Eclipse ;
4)安装Eclipse插件(ADT)与Android-SDK。
平台环境架构如图3所示。
图3 开发环境关系图及模拟器界面
频谱仪设计基于频谱测量硬件模块,本文设计编写的手机客户端APP,通过向模块发送控制指令,控制模块对频谱信号的测量,收到测量数据后,手机屏幕触摸操作可以对频谱数据进行处理显示,实现测量参数设置,最大值迹线跟踪,最小值迹线跟踪,Mark点标记,多Mark点标记,阈值基线,窗口阈值等功能。
本文编写了频谱分析处理数据的显示和控制APP。设计编写的Android客户端采用了XML语言和Java语言。在Eclipse环境下,利用XML语言作为软件界面布局设计和属性定义的工具,并采用“id”的方式建立操作句柄。利用Java语言编写底层操作的驱动程序。两者通过“id”传递消息。该APP基于WIFI互联的模式,使用WIFI传递SCPI协议,向频谱模块发送控制指令,控制调整频谱仪参数,同时接收频谱仪返回的频谱数据,在后台处理,并送至手机屏幕实时显示刷新。
除具有常规频谱仪的基本功能外,还结合安卓系统特点,融入了触屏的操作方式。例如可以加入两点滑动的方式来控制频谱视图的大小和位置,捕捉两点坐标,算出坐标的差值,根据差值变化趋势调整频谱;可以单点触摸,根据捕捉单点坐标变化来调整频谱位置,实现放大后的频谱的拖动;还可以通过双击来使视图恢复默认大小,双击动作的判断由两次点击时间差实现。根据不同设计需求,均可结合安卓系统各类控制来实现。
2.2.1 频率全景显示
全景显示如图4所示。手机端APP向MSA830发送SCPI指令,MSA830返回由五百个幅度数据组成的频谱数据组,APP通过一个定时器,定时向频谱仪模块发送SCPI,然后异步线程接收频谱数据指令。
图4 频率全景显示
在接收到数据以后,首先对数据进行拆分,把幅度数据组成的字符变量拆分为500个double型变量,为了方便存储,把500个double型变量赋值给一个double型数组。在显示时使用了GitHub上的开源库AChartEngine,动态显示频谱曲线。曲线横轴为序列1~500,纵轴为频谱频率点的幅度值。显示过程中使用For循环把500个幅度加入到曲线的数据表中,然后在同时刷新屏幕,更新视图上的显示曲线。每秒接收一组数据,刷新一次曲线。APP中频谱刷新涉及的部分例程包括:定时器流程、异步接收数据线程代码和数据刷新。频谱刷新程序流程图如图5所示。
图5 APP频谱刷新部分流程图
2.2.2 分频段显示(1~100 MHz)
分频段显示如图6所示。参数的SCPI指令如下:
:FREQ:STAR 1 MHz;
:FREQ:STOP 50 MHz;
:FREQ:CENT 100 MHz。
图6 分频段显示(1~100 MHz)
分别设置起始频率,终止频率,中心频率各为1 MHz,100 MHz,50 MHz。为了控制线程的数量,设置频率的指令放和刷新频谱数据的指令放到同一线程发送。程序中通过一个文本框EditText输入参数,然后加入控制指令的格式字符,组成SCPI控制指令,而后通过Socket发送给频谱模块,实现控制。
2.2.3 频谱的放大及缩小
通过两点的滑动控制频谱图的放大和缩小,便于观察波形等场合。放大缩小通过触摸监听OnTouchListener来控制,其包含手指接触屏幕、在屏幕上滑动、离开屏幕3个动作,每次动作触发中断,读取接触点坐标的X和Y值,便可实现对屏幕的动作响应。如图7所示。
图7 频谱的放大极其缩小
2.2.4 多Mark点同时标记
Mark点是频谱参数测量的基础,频谱仪从本质上讲就是对Mark点的操作,双Mark点的X轴差值,Y轴差值,最大值迹线,最小值迹线等,都必须基于Mark点实现。如图8所示。Mark点用菱形标注,加上不同的颜色表示不同的Mark,Mark点的含义是记录标记点的幅度和频率,一般会标记最大值,但是随着数据的刷新,最大值点不是每次都是最大值,频谱仪中对最大值得追踪采用PeakSearch来实现,Peak可以是最大值最小值左峰值右峰值。
图8 多Mark点标记
首先是Mark和Peak最大值的实现,在接收数据拆分完成后,把值传递给频谱线的表的时候,首先给出一个比所有幅度值小的值max,然后把max逐一同500个幅度值进行比较,当幅度值比max大时把幅度值传递给max,同时记录下该幅度值在500个数据中的序列位置index,当500个都比较完后,遍找出了一组数据中的最大值和所在位置,完成一次Paek最大值操作。然后把Mark点值加入Mark曲线,Max为Mark点的Y值,index为Mark点X值。Mark曲线与频谱曲线为两条不同的曲线,一般情况下Mark曲线只有一个标记点。第一次peak操作完成后得到的序列位置index直到下一次Peak之前都保持不变,在每一帧数据刷新时,在频谱曲线加入全部五百个数据,在Mark曲线只加入序列位置为index的点的幅度值,实现对频率点的标记。
在实际频谱仪中,需要对Mark点具有显示和不显示两种模式状态,在程序中使用布尔型变量对Mark点是否显示来控制,用按键控件作为控制接口,当按键第一次被点击时,设置控制变量为True,再次点击时设置控制变量的值为false,在刷新对时控制变量进行判断,值为true则刷新Mark曲线的数据,值为false则不更新。另外还有Peak最小值,与Peak最大值类似,Peak时比较,将一个比所有幅度值大的值min跟幅度值比较,幅度值比min值小时,把幅度值赋值给min,得到序列位置index,刷新时加入index位置处的幅度值,实现标记。
2.2.5 侧边栏SlideMenu
为了使用更多的屏幕来显示频谱图形,APP采用3种方式来隐藏暂时不用的控件,第一种是上拉或下拉控件栏。把控件群放在一个SCROllVIEW之中,使用时向上或者向下拉动;如图9所示。
图9 scrollview
第二种是通过控件点击,交替显示或隐藏下一级控件栏。在使用时将控件的Visibility 属性设置为GONE,在使用之前设置将控件的Visibility 属性为VISIBLE;使用效果如图10所示。
图10 交替显示或隐藏控件栏视图
第三种是使用侧边栏的方式,把控制接口放在左边的侧边栏,需要使用时在屏幕左边缘向右滑动,便可拉出侧边栏。如图11所示。侧边栏的添加相对比较复杂,需要使用SlideMenu开源库。
图11 侧边栏视图
侧边栏控制拉出的控制接口是触摸点的位置,当触摸点在左边设定的较小区域内时,控制侧边栏向右滑出,就能实现对向右滑动动作的判断。
2.2.6 可实时拖动的阈值窗口线
可拖动的阈值线窗口是常规频谱仪不具有的功能,这是频谱仪跟安卓系统结合的一次尝试,灵感来源于Mark和阈值线,阈值线具有一定的带宽,可以通过拖动来测量峰值的幅度值。可拖动阈值线以触摸屏作为控制接口,通过捕获划动动作时触摸点的坐标,然后将坐标转换为频谱图形显示模块的坐标,再将转换后的坐标同幅度值比较,从而算出触摸点所对应的的幅度值,并将触摸点对应的幅度值转换成字符串,在屏幕上利用TextView显示出来,向使用者反馈控制信息,实现人机交互阈值线的拖动的触发与频谱视图的拖动触发相同,二者在控制接口上相冲突,为了区分二者,分开控制,程序中采用长按来判断拖动对象。长按的实现是在触摸屏幕时触发计时器,如果触摸点离开屏幕则清除计时器事件,如果触摸点在屏幕上触摸的持续时间较长,使得计时器的值大于设定时间时,计时器绑定的事件被触发,使得拖动对象转换为阈值线。
联合调试中使用APP测量70~100 MHz的环境中的短波收音机信号,信号输入使用87 MHz 50欧姆天线。同时利用还可以测量到部分2 G,3 G,4 G和Wifi信号。
1)启动TP-link路由器,搭建WiFi环境;
2)设置手机WiFi网关,ip,port等参数;
3)启动MSA830 频谱模块,并用网线连接至路由器;
4)启动APP;
5) APP连接到频谱模块;
6)测量信号,开启最大值迹线跟踪功能,记录信号脉冲。
联合调试中,通过手机端APP处理的数据和频谱模块MSA830 电脑端原厂程序测得的数据进行对比,另外再跟HP公司的E4405B频谱仪测量结果对比,对比情况图12和图13所示。
图12 全景对比测试显示结果
图13 50~150 MHz对比测试显示结果
通过对比可知,手机端APP和仪器及电脑端的显示基本是一致的,说明移动终端完全能够实现频谱数据处理,并准确地显示出信号频谱。
本文基于Android系统和智能移动终端的应用设备控制和联网的APP技术,设计出一款可以实现频谱仪手机客户端显控操作的app。在Eclipse环境下,利用XML语言作为软件界面布局设计和属性定义的工具,并采用“id”的方式建立操作句柄,利用java语言编写底层操作的驱动程序。该软件具有良
好的人机操作界面,与传统频谱仪相比,其使用更加方便,操作简单。利用它工程技术人员可以轻松地完成对信号的采集、处理及频谱分析。
在后续工作中,将尝试利用UDP打洞,或WiFi路由器,实现远端信息传递或显示测控,对其功能进一步完善。通过在PC端增加SQL数据库模块,对接收数据进行存储。增加WIFI模块端的传感器的种类与数量与位置分布,组网扩展联接成巨大的信息网络,使APP的功能性更加强大。
[1] Matos V, Grasser R. Building applications for the Android OS mobile platform: a primer and course materials[J]. Journal of Computing Sciences in Colleges, 2010, 26(1): 23-29
[2] 丁永明,纪方明.基于Android平台移动学习软件的研究与实现[J].数字通信世界,2011,1:66-68.
[3] 朱婷婷, 李 惠. 基于Android的应用软件的综述[J]. 电脑与电信,2011(1):42-43.
[4] 李 杨,冯 刚,李 亮,等.基于Android的多媒体应用开发与研究[J].计算机与现代化,2011(4):149-152.
[5] 陆玲霞,彭勇刚.基于安卓频谱分析仪的探究性实验设计[J]. 实验科学与技术,2016,14(4):44-47.
[6] Parsons A, et al.A Scalable correlator architecture based on Modular FPGA Hardware and data Packetization [J].PASP,2008,120(873):1207-1221.
[7] Parsons A, Backer D, Chang C, et al. PetaOp/Second FPGA Signal Processing for SETI and Radio Astronomy[A]. Proc.10th Asilomar Conference on Signals, Systems and Computers, Paci_c Grove[C]. CA, 2006.