摘" 要:随着触摸屏的使用越来越广泛,新一代手持式频谱仪摒弃了实体按钮及旋钮,全面采用触摸屏作为人机交互的主要方式。在新的人机交互方式下,为了突出触摸屏的优点及提高人机交互体验,经过对频谱图常用设置参数的分析,及触摸屏对不同触摸手势动作的识别分析,设计并实现了一套针对手持式频谱仪频谱图进行手势操作的方案。该方案通过区分不同的手势动作,实时响应并调用对应的接口,以修改相应的频谱参数。相比于使用传统的仪器面板按钮及旋钮设置参数,手势操作更加方便,极大地提高了用户操作体验。
关键词:触摸屏;人机交互;手持式频谱仪;手势操作
中图分类号:TP311 文献标识码:A" 文章编号:2096-4706(2024)11-0053-05
Design and Implementation of Gesture Operation for Handheld Instruments
Based on Touch Screen
REN Guangqiang1,2
(1.Ceyear Technologies Co., Ltd., Qingdao" 266555, China;
2.Electronic Measuring Instrument Technology Innovation Center of Shandong Province, Qingdao" 266555, China)
Abstract: With the increasing use of touch screens, the new generation of handheld spectrum analyzer has abandoned physical buttons and knobs and fully adopted touch screens as the main way of human-computer interaction. In the new human-computer interaction mode, in order to highlight the advantages of touch screens and improve the human-computer interaction experience, a solution for touch screen gesture operation in the spectrogram of handheld spectrum analyzer is designed and implemented through the analysis of commonly used setting parameters in the spectrogram and the recognition analysis of different touch gesture actions. This solution distinguishes different gesture actions, responds in real-time, and calls corresponding interfaces to modify the corresponding spectrum parameters. Compared to using traditional instrument panel buttons and knobs to set parameters, gesture operation is more convenient, greatly improving the user experience.
Keywords: touch screen; human-computer interaction; handheld spectrum analyzer; gesture operation
0" 引" 言
频谱仪作为微波测量仪器,在众多领域有广泛的应用,其主要功能为频谱分析,即通过对输入信号进行采样、混频、滤波及快速傅里叶变换(Fast Fourier Transform, FFT)计算,最后通过频谱图显示出信号的频域信息[1]。近年来,触摸屏[2]的发展与应用越来越广泛,随着智能手机、平板电脑等小型化触控设备的普及,人们已经越来越习惯触摸屏及手势操作(如单指拖动、双指放大缩小)等概念。输入输出(Input-Output, IO)方式的变化带来了人机交互方式的变化,越来越多的智能化仪器开始采用触控、语音[3]等交互方式代替传统的按钮、旋钮等方式进行设备的控制,新一代手持式频谱仪[4]也全面采用触摸屏作为人机交互的主要方式。在全面使用触摸屏的情况下,尽管虚拟按钮与虚拟键盘等设计早已实现,但直接对频谱图进行手势操作的设计还没有在手持式频谱仪上实现。本文设计并实现了一种以QML与C++混合编程[5]为基础,由QML进行手势动作的识别,再调用相应的由C++实现的底层接口进行具体的参数修改的方式进行手持式频谱仪频谱图手势操作的方案。
1" 频谱图手势操作设计
手持式频谱仪的主界面一般包括频谱图、各级功能菜单、频谱图参数信息等,如图1所示。其中包含坐标及频谱迹线的频谱图为频谱仪的主要显示区域,也是需要支持手势操作的区域。
1.1" 手势操作类型
触摸屏常用的触控操作根据同时支持的触控点数分为单点触控和多点触控[6],手持式频谱仪采用的触摸屏为电容触摸屏,支持多点触控。结合电容触摸屏的特点,将手持式频谱仪支持的手势操作分为两类:单指操作与双指操作,其中,单指操作包括单击、双击与拖动,拖动又可分为上下拖动及左右拖动。双指操作主要是双指缩放,包括上下缩放及左右缩放。
1.2" 支持手势操作的频谱图参数
手持式频谱仪对频谱图参数的修改其实是对频谱迹线所在坐标对应参数的修改。其中,频谱迹线的横坐标在非零扫宽时表示信号的频率,单位为赫兹(Hz),在零扫宽时表示信号的扫描时间,单位为秒(s),而纵坐标始终表示信号的幅度,单位为dB。除了频谱迹线本身之外,在频谱图里还会有一些辅助性的标线或标点用于指示频谱迹线中某点的值或者某段范围,如标记、时间门门延迟、门宽度[7]等,为了方便用户使用这些功能,辅助性的标线或标点的位置变化也应该支持手持操作进行修改。
1.3" 其他需要支持手势操作的功能
由于手持式频谱仪的使用场景多为外场[8],且在观察频谱图的过程中经常需要点击或者拖动标记,因此在实际使用的过程中容易出现点击或者拖动标记时不小心拖动频谱迹线的情况。为了防止误触导致频谱迹线产生不必要的变化,必须增加防误触的设计,即能够让用户关闭频谱图对手势操作的响应。为此,在频谱图里增加了手势锁的设计:当打开手势锁定时,频谱图仅辅助性的标线或标点能够响应手势操作,而频谱迹线不再响应手势操作;当关闭手势锁定时,频谱迹线及辅助性的标点或标线均能响应手势操作。
此外,手持式频谱仪在一些特定功能或模式下有多个窗口,这些窗口分别显示信号在不同维度下的信息,如解调分析模式[9]。为了方便观察各个窗口,可以增加双击放大或缩小当前窗口的功能。
结合上述分析后,设计的手势操作类型同对应要修改的频谱图参数之间的关系如表1所示。
2" 频谱图手势操作实现
QML是Qt公司推出的一款描述性的界面编程语言,它可以简单快速地创建出应用程序的UI界面,且能够与C++互相调用,使用QML与C++混合编程可以使程序底层的C++实现与上层的UI界面创建并行进行,提高开发效率。其中,QML用于创建界面,以及接收各种外部事件,包括键盘、鼠标、触摸等事件,而C++用于实现底层具体的业务逻辑,二者可以直接互相调用或者使用Qt的信号槽机制[10]进行通信。目前,大多数嵌入式设备均采用这种方式进行主机软件的开发,本设计也是基于此。频谱图手势操作具体的实现路径为:由QML编写的UI界面接收并识别手势操作信号,再根据识别出的不同类型的手势操作调用相应的由C++编写的底层接口对频谱图参数进行修改,最终实现通过手势操作修改频谱图参数的功能。
2.1" 手势操作类型的识别
在Qt Quick提供的基础类型中,有多种类型可以接收触摸事件,本设计中用到的有3种,分别是PinchArea、MouseArea与DropArea。其中,PinchArea是一种可以接收双指缩放事件的抽象QML类型,它可以实时识别并发送双指触摸事件,其发送的事件参数中包括了双指各自触摸位置的坐标、缩放比例、双指触摸位置间的角度等,因此其主要用于识别双指操作。MouseArea是一种可以接收单指触摸或者鼠标事件的抽象区域,它可以实时识别并发送单指的按下、松开、单击等事件,因此其主要用于识别单指单双击操作。DropArea是一种可以接收单指拖拽事件的区域,它可以实时识别并发送单指拖拽事件,因此其主要用于识别单指拖拽操作。为整个频谱图区域全局覆盖上PinchArea、MouseArea与DropArea之后,频谱图便可实时识别单指及双指相关触摸事件。相关实现伪代码如下:
Spectrogram { //频谱图区域
id: spectromgram
PinchArea {
id: pinchArea
anchors.fill: parent
onPinchStarted: { //接收并处理双指拖动开始的信号 }
onPinchUpdated: {//接收并处理双指拖动信号 }
onPinchFinished: { //接收并处理双指拖动结束信号 }
}
MouseArea {
id: mouseArea
anchors.fill: parent
drag.target: dragRect
drag.axis: Drag.XAndYAxis
Rectangle {
id: dragRect
width: dragArea.width; height: dragArea.height
x: dragArea.width / 2; y: dragArea.height / 2
color: \"transparent\"
Drag.active: dragArea.drag.active
Drag.onActiveChanged: {
if(active) { //接收并处理拖动开始信号 }
}
}
onPressed: { //判断按下位置 }
onReleased: { //接收并处理拖动结束信号 }
onClicked: { //判断定时器是否打开并决定识别为单击还是双击信号 }
}
DropArea {
id: dropArea
anchors.fill:parent
onPositionChanged: { //处理拖动信号}
}
Timer {
id: timer1
repeat: 1
interval: 200
running: 1
}
}
2.1.1" 单次操作识别过程
识别单次手势操作类型的步骤如下:
1)单指按下后,MouseArea接收到按下信号,开始判断按下位置的坐标,是否位于标记、门起始、门终止线附近,若位于以上标点或标线附近,则默认为拖动上述对象,否则默认为拖动迹线或单击。
2)若步骤1)后松手,则识别为单击。
3)若步骤1)后手指开始拖动,则DropArea接收到拖动信号,根据步骤1)中判断的结果识别为拖动标记、门起始线、门终止线或频谱迹线,且根据持续接收到的拖动信号中的位置坐标实时判断拖动方向。
4)若步骤1)后按下第二个手指,则PinchArea接收到双指缩放信号,根据双指按下时的初始位置与坐标轴之间的夹角判断缩放方向,且根据持续接收到的缩放信号中的比例值实时进行缩放调节。
5)步骤3)后松手,拖动结束。
6)步骤4)后松开两个手指,缩放结束。
在以上操作过程中,一旦步骤2)、3)、4)中的手势动作被识别,则在该手势动作结束之前,即完全松手之前,不会再次进行手势动作的重新识别。也就是说,不会出现单指拖动的过程中,按下第二个手指导致当前的单指拖动变为双指缩放的问题;也不会出现双指缩放过程中,松开单个手指导致当前的双指缩放变为单指拖动的问题。需要注意的是,双指缩放过程中,若松开一个手指,不会导致缩放立刻结束,此时若再次按下第二个手指,缩放仍能继续进行。
2.1.2" 定时器与双击识别
在使用手指操作触摸屏时,由于两次单击位置很难在同一点上,因此MouseArea很难接收并识别到系统默认的双击事件。为了解决这个问题,采用将两次时间间隔较近的单击事件识别为一次双击事件的方法。这种方法需要将MouseArea和定时器Timer结合起来,具体实现方式为:把定时器Timer设置为单次触发,当MouseArea识别到单击事件后,判断定时器是否正在运行,若定时器未运行,则打开定时器,若定时器正在运行,则将该单击事件识别为双击并关闭定时器。这种方法的关键在于确定定时器的运行时间。通过多次试验,将定时器的运行时间设定为200 ms,这样既能较好的识别到想要的双击事件,也不容易将两次无关的单击误识别为双击。经上述处理后,手指在200 ms内连续单击两次频谱图就会被识别为双击,且这种识别跟两次单击的坐标位置无关,仅与两次单击的时间间隔有关。
2.2" 频谱图参数的修改
频谱图中识别到的各种类型的手势操作中,单击的响应是弹出或关闭手势锁图标,双击的响应是放大或缩小窗口,这两种响应都与频谱图参数无关,在QML中直接修改UI界面即可。除此之外的拖动与缩放等操作,需要根据表1中的对应关系对频谱图的坐标或标记位置等参数进行修改,而修改参数需要调用由底层C++实现的接口。本文采用的调用C++接口的方式为:为底层的C++类型实例化一个单例对象,并将该对象注册到QML上下文中,然后在QML文件中直接调用该C++对象接口的方式。这种方式实现简单,避免了大量的信号槽连接与取消连接相关的处理。
通过上述方式,按照表1中的对应关系,在QML文件中识别到拖动与缩放等手势操作的信号处理函数中,直接调用由底层C++实现的接口,即可对频谱图的坐标或标记等参数进行修改。
需要注意的是左右拖动会根据初始按下时的位置判断拖动的对象,左右缩放会根据当前扫宽是否为零判断缩放参数是扫宽还是扫描时间,这些判断也需要调用底层的接口。此外,拖动操作时调用接口传递的参数为当前拖动的像素值,底层接口会将其换算为要修改的参数值之后再进行设置。
3" 手势操作测试
通过上述方式实现手持式频谱仪的手势操作后,测试各种不同类型的手势操作,程序均能够实时响应。测试结果如图2所示。
4" 结" 论
手持式频谱仪采用本文设计的手势操作方案后,能够根据当前手势动作类型,实时响应并调用底层接口对频谱图参数进行修改。这种方案所支持的手势动作简单且符合使用习惯,节省了正常点击菜单输入数值修改参数的时间,充分利用了触摸屏的优点,极大地提升了人机交互体验。目前本设计方案已经在某新一代手持式频谱仪上使用,收到了很好的用户反馈。
参考文献:
[1] 郝祥和.基于嵌入式便携式频谱仪的设计与研制 [D].成都:电子科技大学,2020.
[2] 刘褚燚,邱慧.电容式触摸屏重点专利技术 [J].中国科技信息,2021(22):22-23.
[3] 吴鹏飞.基于深度学习的嵌入式连续语音识别系统设计 [D].哈尔滨:哈尔滨工业大学,2020.
[4] 苏勇辉,李柏林.手持式频谱分析仪下的全程锁相扫描控制技术的实现 [J].现代信息科技,2020,4(12):39-41.
[5] 彭华仁,房鹏飞.基于Qt的手持式监测接收机人机交互界面设计与实现 [J].电子制作,2021(7):58-60.
[6] 沈子毅.人车交互的多指触控方式设计 [D].南京:东南大学,2021.
[7] 高振国,张重阳,徐杰,等.超宽带天线测试系统设计 [J].空天预警研究学报,2022,36(5):339-342.
[8] 李光,秦顺友.手持频谱仪在地面站天线故障检测中的应用 [J].河北省科学院学报,2020,37(3):32-36.
[9] 丁鹏,苏勇辉.一种基于频谱分析仪的模拟信号解调与分析方法 [C]//2019年全国微波毫米波会议.广州:[出版者不详],2019:269-271.
[10] 韦星辰,占伟伟,何建清,等.基于松耦合服务架构的软件集成构建方法 [J].信息技术与信息化,2023(7):82-85.
作者简介:任广强(1993—),男,汉族,河南开封人,助理工程师,硕士,研究方向:嵌入式系统设计。
收稿日期:2024-01-21