当前位置:首页 期刊杂志

基于Qt 的手持式监测接收机人机交互界面设计与实现

时间:2024-05-04

彭华仁,房鹏飞

(中电科思仪科技股份有限公司,山东青岛,266555)

0 引言

随着无线电通信技术以及无线电子设备的发展,城市环境下的电磁环境越来越复杂,不同无线电系统间干扰以及人为干扰频发,非法异常信号干扰人们正常生活的现象频繁发生。为了更加高效的利用频谱资源、保护人们的信息安全,就需要对无线电信号进行监测和管理,对非法的无线电干扰信号进行查处。监测接收机是进行无线电频谱监测、查找干扰源的重要工具。其中,小型化的手持式监测接收机是进行现场干扰源搜索与查找的必备工具,具备一个友好的人机交互界面将有助于其发挥更好的作用。

干扰就是使用非法的信号占用合法信号的频率资源,造成合法信号通信的中断,对信号频域的分析是查找干扰信号的有效手段。利用手持式监测接收机进行干扰信号的现场查找时,就是使用接收机扫描一定频段内的信号,分析得到信号频谱,通过观察频谱图来发现干扰信号,对于间歇性的干扰信号可通过三维瀑布图进行查找。由此可见,频谱图和瀑布图的显示是手持式监测接收机人机界面必须具备的功能。同时,由于扫描速度是手持式监测接收机的一项重要指标,扫描速度越快越有利于发现干扰信号,这就对频谱图和瀑布图的刷新速度提出了很高的要求。本文将基于Qt 开发环境设计一款人机交互软件,实现手持式监测接收机频谱图和瀑布图的高效刷新显示。

1 人机交互界面设计

■1.1 开发工具选择

Qt 是一个跨平台的用于创建精彩用户界面和强大原生应用的框架,它包括一套跨平台的类库、一套整合的开发工具和一个跨平台的集成开发环境Qt Creator,是进行人机交互界面开发的最佳选择之一,与其他图形界面开发工具相比,它具有更优秀的跨平台特性,能够实现“一次编写,随处编译”。Qt 中提供了两种开发人机交互界面的方式:Qt Widgets 和Qt Quick。其中,Qt Quick 是Qt 提供的一种高级用户界面工具包,它包括描述性语言QML、大量的用户界面元素、C++与QML 混合编程等众多技术,使用它可轻松完成移动应用、嵌入式设备等用户界面的开发。

本文所要设计的手持式监测接收机人机交互界面需要具备频谱图与瀑布图的高效刷新显示,还需要具备友好的人机交互,支持触控以及手势操作,方便用户操控设备,对显示图形进行缩放操作,观看频谱细节。其中,频谱图与瀑布图的显示需要涉及大量的数据运算,比如频谱数据的插值抽取与坐标映射、瀑布图数据的颜色映射等。对于复杂的数据运算,使用C++实现能够充分发挥其性能优势,而对于图形的触控缩放操作以及刷新显示则更加适合用QML 语言进行开发。为此,本文将使用Qt Quick 进行手持式监测接收机人机交互界面的开发,利用其提供的C++与QML 混合编程技术实现数据的快速处理以及频谱图与瀑布图的高效刷新显示。在人机交互界面的设计中,C++与QML 混合编程技术的使用以及瀑布图的高效刷新技术是其中设计难点,本文将重点从这两个方面展开论述。

■1.2 C++与QML 混合编程分层架构设计

人机交互界面软件采用C++与QML 混合编程技术进行设计,分为数据处理层和界面显示层。数据处理层用C++实现,主要负责从底层控制端获取接收机实时产生的频谱数据以及将频谱数据转换为用于显示的坐标数据、瀑布图颜色数据等,界面显示层用QML 实现,主要负责与用户的交互以及频谱图、瀑布图的绘制等。数据交互层与界面显示层需要密切配合才能实现人机界面的高效刷新,二者是一种平行关系,除模块划分、多线程技术外,相互之间的数据交换等将严格遵照以下设计原则,具体如图1 所示。

图1 C++与QML 混合编程分层架构图

其中,界面显示层负责实现如下功能:

(1)负责与用户的交互,包括鼠标、键盘、触摸手势;

(2)负责绘制频谱图与瀑布图等图形显示元素;

(3)负责各个图形显示元素的布局管理,可灵活根据窗口数量调整窗口布局,并调整各显示元素大小和位置;

(4)混合编程通信管理:负责建立QML 与C++之间的通信。

数据处理层负责实现如下功能:

(1)测量分析处理:将从底层控制端获取的数据进行频谱映射、插值抽取等处理,得到最终测量结果数据;

(2)显示数据变换:将测量结果数据计算为用于绘图的显示数据,包含频谱图的坐标数据以及瀑布图的颜色数据等;

(3)状态存储:负责测量结果数据的文件保存等;

(4)数据传输:负责与底层之间的数据传输。

界面显示层与数据处理层之间的数据通信通过Qt 元对象系统实现,具体技术为:

(1)信号槽:实现跨语言的线程通信;

(2)方法注册、方法调用:由QML 调用C++封装的方法,主要实现状态查询,测量结果查询;

(3)环境注册、类调用:由QML 使用C++声明的类,主要实现数据类的缓冲;

(4)上下文属性、对象调用:由QML 使用C++定义的类对象,主要实现数据共享;

(5)元对象调用方法:由C++调用QML 对象所定义的方法,主要实现特殊的窗口管理。

■1.3 瀑布图高效刷新技术

瀑布图也称为三维频谱,代表的是频谱随时间的变化,其横轴表示频率,纵轴为时间,垂直于横轴和纵轴的是幅度,用颜色表示。瀑布图对于手持式监测接收机查找干扰信号是非常有用的,尤其是对于出现时间较短的间歇性信号。为此,瀑布图的高效刷新是手持式监测接收机人机交互界面设计的重点。人机界面采用的是C++与QML 混合编程架构,瀑布图显示在QML 端完成,瀑布图数据的处理在C++端完成。瀑布图的数据处理与显示绘制流程如图2 所示。

图2 瀑布图绘制流程

当人机界面接收到底层控制端发来的测量数据准备好信号后,在其槽函数中进行数据处理然后保存该组数据,并记录当前存储瀑布图数据的帧数和最新数据在瀑布图数据数组中的索引,为改进瀑布图刷新效率,防止底层频繁发送测量数据准备好信号造成人机界面无法响应,人机界面端进行了压缩处理,即人机界面收到测量结果准备好信号后,只负责保存频谱数据及设置瀑布图更新标记值,同时增加一个定时器,定时器定时周期设置为30ms,每隔30ms 人机界面主动去查询是否有瀑布图更新标记值,若有则根据当前存储瀑布图数据的帧数和最新数据在瀑布图数据数组中的索引从瀑布图数据区读取数据到瀑布图绘图缓存区,并发送计算颜色数据信号给计算线程,在计算线程的槽函数中计算瀑布图颜色数据,计算完成后发送瀑布图更新信号给QML 端,QML 端调用瀑布图绘图更新函数进行瀑布图的更新。

为了提高瀑布图的刷新效率,对于存储瀑布图数据的数组,采用了循环列表的数据结构,每个列表中的元素是一个一维数组,以节省数据的存储时间;对于数据的处理采用了多线程的处理方案,数据的存储与瀑布图颜色数据的计算分别运行于两个线程中,以节省数据处理的时间。

2 人机交互界面的软件实现

手持式监测接收机人机交互界面的软件实现是依据上述的设计架构以及实现流程,在此基础上对各个界面功能进行一一编程实现。本软件使用Qt Creator 进行开发,使用C++编写数据处理部分的代码,使用QML 编写界面各个显示控件的代码,最终完成了整个人机交互界面软件的代码编写。该人机交互界面软件支持单击、拖动、双击、放大、缩小、长按等常用触摸手势操作,可方便的实现显示频谱的放大、缩小、平移等操作。人机界面主界面的实现效果如图3 所示。

图3 人机界面实现效果图

该人机交互界面软件实现后,已成功应用于国产某手持式监测接收机产品上,在该产品的硬件平台上,笔者对人机界面频谱图和瀑布图的刷新效率进行了测试验证,测试代码如图4 所示。

图4 人机界面刷新速度测试代码

频谱图和瀑布图的刷新速度测试结果分别如图5 和图6所示。

图5 频谱图刷新速度测试结果

图6 瀑布图刷新速度测试结果

经过实际测试,人机界面频谱图的刷新速度可达到45帧/s 左右,瀑布图的刷新速度可达到30 帧/s 左右,实现了频谱图和瀑布图的高效刷新显示。

3 结语

本文依据手持式监测接收机设备的功能要求,利用Qt的C++与QML 混合编程技术,对手持式监测接收机人机交互界面软件进行了设计与实现,该软件在国产某手持式监测接收机产品上进行了使用,运行稳定,并且得到了用户的充分肯定。同时,基于Qt 优良的跨平台特性,该软件已经成功的移植到了平板电脑上,作为手持式监测接收机的外控软件,更加方便了用户的使用。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!