彭华仁,吕天志
(中电科思仪科技股份有限公司,山东青岛,266555)
监测接收机是无线电监测、分析与定位等方面的专用设备,在整个无线电监测系统中承担着信号搜索与接收等信息收集工作,是无线电管理的重要工具。无线电监测是要探测、搜索、截获无线电管理区域内的无线电信号,通常工作方式为在设定的无线电频段内进行快速扫描搜索,发现无线电信号并进行分析。出于信息安全的角度,现代的各种信号发射设备普遍采用突发的方式对外发射信号,这些信号大都具有突发性、瞬态性的特定,对于监测接收机而言,这些信号的频率、功率、出现时间、持续时间都是未知的,为提高这些信号的截获概率,就要求监测接收机必须具有宽频段的快速扫描能力。
监测接收机的宽频段快速扫描能力通常以其全景扫描模式的扫描速度进行衡量,全景扫描是接收机以最大FFT带宽在设定的频率范围内进行连续扫描,每次扫描以最大带宽的频率窗口连续相接,从而横贯整个预定义的扫描范围。每次扫描包括参数设置、硬件采集、软件数据处理等几个部分,扫描花费时间越短,扫描速度越快。本文主要从扫描流程优化、多线程并行数据处理、软件代码优化三个方面进行重点设计,以减小监测接收机的数据处理时间,实现监测接收机宽频段的快速扫描。
目前,监测接收机大多采用数字中频体制,其架构如图1所示。该架构的基本工作流程是将天线接收的无线电信号先经过预选滤波器进行预选滤波,再与本地振荡器产生的本振信号进行混频,生成中频信号,再经过中频滤波后进行采样,然后利用FPGA进行数字中频处理,产生所需的频谱数据,交由嵌入式CPU进行后续处理与显示。根据实现方式,可将监测接收机的整个扫描过程大体分为硬件参数设置、硬件采集与软件处理等几个部分,为提高扫描速度,需要同步减小参数设置时间、硬件采集时间以及软件处理时间。本文主要针对与软件有关的扫描控制流程、数据处理等进行设计,以减小软件处理时间。
图1 数字中频体制的监测接收机架构
监测接收机全景扫描模式下的扫描流程一般包括硬件参数设置、FPGA测量、中断响应、数据读取与处理等几个部分。启动全景扫描后,整个扫描频段将由多次扫描拼接完成,每个扫描由CPU首先设置硬件参数、启动FPGA测量,然后FPGA进行采集与数字中频处理,产生频谱数据并通过中断通知CPU读取数据,CPU读取频谱数据,最后显示处理并计算下一个扫描频点的硬件控制参数。CPU软件与监测接收机硬件之间的交互过程如图2所示。图中灰色虚线部分表示在整个扫描流程中需要重复执行的过程。
图2 CPU软件与监测接收机硬件交互过程
上述的扫描控制流程,由CPU软件负责整个扫描流程的调度,每个扫描频点的硬件参数设置、硬件采集、数据处理过程都是串行进行的,FPGA在完成当前扫描频点的采集与数字中频处理之后,需要等待CPU软件处理完成当前频点的频谱数据之后,才能启动下一扫描频点的硬件参数设置、采集与处理。为了提高扫描速度,可对该扫描控制流程进行优化,将扫描流程的控制权交由FPGA完成,CPU软件负责批量设置硬件控制参数、读取频谱数据、显示处理等工作,优化后的CPU软件与监测接收机硬件之间的交互过程如图3所示。
图3 改进后的CPU软件与监测接收机硬件交互过程
改进后的扫描流程,其工作过程大体为:CPU软件首先根据用户设定的扫描频段计算所有扫描频点对应的硬件参数,包括测量参数、通道控制参数和本振控制参数等,并批量发送给FPGA,后续扫描流程的控制交由FPGA负责,然后启动测量,并主动查询是否有频谱数据,若无继续查询,若有则进行频谱数据的后续处理,处理完成后继续查询。在这一扫描流程中可实现硬件采集与CPU软件数据处理的并行处理。CPU软件的扫描流程图如图4所示。
图4 CPU软件扫描流程图
由于FPGA不适合对数据进行对数运算等操作,FPGA产生的频谱数据为线性数据,而最终显示到用户界面的数据为对数数据,为此需要进行数据的转换,同时还需要将全景扫描过程中每次扫描产生的频谱数据映射到显示屏幕的像素点上,频谱数据个数与显示像素点数量不一致,需要进行插值或抽取处理。这些对数据的后续处理均在CPU软件中完成,当用户选择的分辨率带宽较小时,每次扫描产生的频谱数据量会比较大,数据的处理时间就会比较长,因此需要采用多线程并行处理的方式进行数据的并行处理,以加快数据处理速度。
根据功能实现,将监测接收机CPU软件划分为人机界面显示线程(也是软件的主线程)、扫描控制线程、数据处理线程。其中,数据处理线程根据频谱数据量的大小划分为多个数据处理子线程,将频谱数据进行分段并行处理。数据处理线程的处理流程如图5所示。
图5 多线程数据处理流程
其中,测量数据处理专用线程池中软件处理子线程的个数n可根据软件运行平台硬件性能进行优化配置。
CPU软件采用C++语言进行编码实现,在编码时采用代码优化设计,以提高程序的执行效率,减小代码的运行时间。本软件在编码时采用了如下的优化方法:
(1)选用合适的数据类型
由于本软件中使用了大量的乘法运算,为此,笔者首先在所选CPU平台上进行了各种数据类型的乘法运算效率的测试,然后根据测试结果,在保证数据精度和数据范围的前提下,选取合适的数据类型。部分测试代码如图6所示。
图6 测试乘法运算效率代码
(2)使用内联函数减少函数调用
对于普通函数的调用,程序会先从主函数的调用点跳转去执行被调函数,等被调函数执行完后,再返回主函数继续执行,这会占用一些时间。而使用内联函数,可以节省这部分时间。为此,编码时对于频繁调用的简单函数加入inline关键字。
(3)使用memcpy语句代替for循环
对于循环赋值语句,使用memcpy语句代替for循环语句,可减少程序执行时间。
(4)循环展开
循环展开指将循环计数展开,以减少循环迭代的次数。循环展开代码示例如下所示。
上述所示的循环展开示例,迭代次数可由1000次减少到200次,但是代码量会相应的增加,同时实际代码中的循环体也不会像示例中的这么简单,因此实际使用时需要根据实际情况进行循环展开。
上文所述的快速扫描设计方法已在国产某型手持式监测接收机上进行了实现,笔者按照ITU-R SM.1839-1建议书《测量无线电监测接收机扫描速度的测试程序》中推荐的方法对该手持式监测接收机全景扫描模式下的扫描速度进行了实际测试。测试过程为:设置信号源为频率扫描,扫描起始频率3GHz,终止频率6GHz,输出功率-30dBm,扫描点数101,每个扫描频点的驻留时间为150ms,设置手持式监测接收机扫描模式为全景扫描,起始频率3GHz,终止频率6GHz,显示最大保持为开,启动扫描,若监测接收机能够全部捕获信号源每个频点的输出信号,即可根据上述设置参数计算得出监测接收机的扫描速度,若不能全部捕获则需要增大信号源的驻留时间,直至监测接收机能够捕获到全部信号。监测接收机的测试过程图如图7所示。
图7 扫描速度测试图
通过测试图可以看出,当信号源每个频点的驻留时间为150ms时,监测接收机能够全部捕获信号源每个频点的信号,为此,可以通过计算得出监测接收机的扫描速度为3GHz/150ms,即20GHz/s,使用同样测试方法对应用该快速扫描设计技术之前的手持式监测接收机全景扫描速度进行测试,当信号源驻留时间提高到1200ms左右时,接收机才能够全部捕获每个驻留频点的输出信号,由此可见使用该快速扫描设计技术后,扫描速度相比之前提高了近8倍,该设计技术行之有效。
本文针对监测接收机快速扫描的测试需求,研究了扫描流程优化设计、软件多线程并行处理设计以及软件代码优化设计技术,并将这些设计技术应用到了国产某手持式监测接收机上,实现了该监测接收机的宽频段快速扫描。同时,这些设计技术还可以应用到其他同类型的监测接收机类产品中。