面向频谱数据库的电磁频谱检测系统
2019-05-09郭霞张永辉陈真佳刘伟
郭霞,张永辉,陈真佳,刘伟
(海南大学 信息科学技术学院,海南 海口 570228)
0 引言
当前,无线通信业务的迅猛发展使得对频谱资源的需求日益增加,但可用的频谱资源却越来越少。由此衍生的非法占用授权频段的事件频繁发生,已经严重损害到授权用户的正常通信。现如今的频谱检测设备虽然可以实时检测到某些频段有异常信号,但往往受限于有限的存储空间,不能将所有频谱数据实时保存下来,用于后续的数据分析和处理。
文献[1-4]对多种频谱检测的算法进行了研究,实现了对无线电信号的实时检测,但是都未对频谱数据进行有效的存储与管理。能量检测和循环平稳特征检测是目前最常用的有效频谱检测技术。文献[5]对能量检测和循环平稳特征检测两种方法进行了性能比较,循环平稳特征检测虽然检测准确性高但存在着计算复杂度大、检测时间长的问题,不适用于长期的实时检测;能量检测虽然受噪声影响较大,但是实现简单、计算复杂度低、速度较快,被广泛应用于认知无线电网络中。文献[6]分析了无线电管理的现状和存在问题,阐述了大数据在无线电频谱资源管理中的应用,但是仅对无线电频谱大数据应用的关键技术进行了理论分析,并未具体实现。文献[7]探讨了如何实现对频谱资源的直观展示和深入探索,并提出如何在庞大的数据库中更高效地甄别和挖掘频谱数据有效信息这一问题。
基于上述问题,提出一种电磁信号检测系统,建立多个节点进行频谱检测,将每个节点的数据汇总分析,实现对无线电频谱资源的性能分析,挖掘有价值频谱数据信息,实现频谱可视化[8],从而指导认知用户更加有效的利用频谱资源。基于长期的实时检测这一需求,该系统选用能量检测方法[9]。通过软件无线电对频谱资源的数据进行采集,实现对无线电信号的实时检测;并将实时的频谱数据存储在数据库中,用户根据检测需求通过上位机来发送频谱检测指令,同时完成对数据的分析处理。
1 系统概述
系统实现了实时的频谱检测、数据存储、数据分析处理等多种功能,用户可以通过上位机向主控设备发送指令,主控设备解析指令后,按照上位机的要求完成对频谱数据库的操作以及对频谱数据的分析和处理,并将结果反馈给上位机。
1.1 系统架构
系统由信号采集模块、主控模块、数据库、上位机四部分组成,选用Linux平台作为主控模块和服务端,软件无线电作为射频模块,Android平台终端如手机、平板作为客户端,并在Linux平台上搭建频谱数据库,用于数据的存储,主控模块和上位机通过套接字建立通信,主控模块通过USB驱动射频模块。总体设计框图如图1所示。
图1 总体设计框图Fig.1 Diagram of overall design
1.2 系统优势
本系统的整体架构以及各个模块设计,对比现有的频谱检测系统,具有下列几点优势:
1)现阶段使用的频谱检测设备价格较高,体积较大,本系统使用了灵活性强、开源程度高、性价比高的软件无线电作为通信系统的信号采集模块,频段、带宽、调制方式等参数可调,更便于应用拓展。
2)建立频谱数据库,可以存储大量历史数据,便于频谱数据有效信息的挖掘,实现对无线电信号的特性分析。
3)选用Android控制端作为上位机进行频谱数据的检测和处理,方便快捷。
4)采用TCP/IP协议作为主控模块和控制端的通信协议,使得主控模块控制脚本和上位机应用得以并行开发。使用软件工程思想提高主控模块和控制端的独立性,使用TCP/IP协议降低设备之间的通信壁垒。上位机不直接接触硬件结构,移植性较强;设备不区分网络硬件,拥有极高的可靠性,可以为用户提供可靠的服务。
2 系统设计
2.1 信号采集模块
系统的信号采集模块选用的是Software Defined Radio(SDR),SDR主要由天线、射频端、高速模/数和数/模转换器,以及高速数字信号处理器(DSP或FPGA)等组成[10]。软件无线电的软、硬件开源性较高,有很强的灵活性,便于用户自行开发。软件无线电结构示意图如图2所示[11]。
2.2 主控模块
选用搭建Linux系统的设备作为主控模块,主控模块通过USB串口与信号采集模块连接向信号采集模块发送控制指令。主控模块具有Ad Hoc功能,Android控制端可以通过连接主控设备的热点接入系统。主控模块作为服务端,上位机作为客户端通过TCP/IP协议访问主控模块向主控模块发送控制指令。主控模块接收到指令后,通过USB驱动软件无线电模块进行频谱检测,将获取的频谱数据存储到本地数据库,并将数据反馈给上位机处理。
为了实现多任务信号采集,主控模块提供多进程驱动多个SDR进行频谱检测,检测的同时将频谱数据存储到数据库,保证频谱检测数据访问的实时性和频谱数据库的完整性。检测数据以SDR的序列号作为唯一识别码,用户可以根据相应的识别码访问SDR频谱数据。主控模块的控制流程图如图3所示。多进程同时访问同一检测脚本会出现函数重入问题,导致数据不同步或者运行程序出错。为了避免这一现象,在进程间加入了信号量实现操作锁,保证同一时刻只有一个进程占用程序。当信号量值大于0时,则进程可以调用频谱检测脚本,否则进程进入阻塞状态。系统中使用信号量实现进程间通信的流程图如图4所示。
图3 主控模块控制流程图Fig.3 Control flow of master control module
图4 信号量实现进程间通信流程图Fig.4 Flow chart of realizing inter-process communication by means of signal amount
2.3 频谱数据库
2.3.1 数据库
数据库是存储在计算机内、有组织的、可为各种用户所共享的大量数据的集合。频谱数据包含丰富的数字特征,在完成基础的频谱检测功能后,应该将收集到的频谱数据保存起来,用于后续的数据分析和处理。频谱数据库包含各种常用信号样本,如模拟调制、数字调制,以及常用的无线电信号的时频特征和相关信息[12];可根据多种条件及其组合对信号进行筛选和搜索,支持模糊查找,快速匹配信号特征;数据库易于扩展,用户可方便地添加新的样本信号和相关信息,可将历次记录到的干扰信号和排查方法存档,便于对照参考。
为了使数据更好的保存,在主控设备上搭建了MySQL数据库。MySQL数据库使用C/C++语言编写,源代码具有很好的移植性;支持多线程,充分利用CPU资源;而且它为多种编程语言提供了API,方便用户编写自己的程序。MySQL提供了管理和优化数据库操作的工具,可以处理拥有上千万条记录的数据库。本系统设计的频谱数据库选用C语言作为应用程序接口,移植性较好。
2.3.2 频谱数据库设计
系统中频谱数据库的设计至关重要,设计的好坏关系到后期数据查找和数据处理的难易程度。根据频谱数据的特征和后期处理的需求,将频谱数据库分为3个功能模块:数据管理、数据筛选和数据处理。频谱数据库整体设计示意图如图5所示。为了方便后期数据的筛选和处理,数据库中创建两种类型的表:存储频谱检测任务的任务表和存储频谱检测数据的数据表。任务表存储每次上位机发送的频谱检测指令,包括时间、起始频率、采样间隔、终止频率,以及指令所对应的SDR的序列号。系统断电后,且上位机没有发送指令时,系统可以从数据库的任务表中读取上一次频谱检测的指令继续工作。
图5 频谱数据库整体设计示意图Fig.5 Schematic diagram for overall design of frequency spectrum database
为了确保频谱数据的同步性,每个数据表均由时间、温度、湿度、频点等属性描述,数据库中定义表的基本语句为:
CREATE TABLE IF NOT EXISTS Spectrum(time varchar(25)primary key,temp varchar(25),humidity varchar(25),freq_point decimal(6,3));
系统测试时,选用的频谱检测的频段为10 MHz~1 GHz,采样间隔为100 kHz,数据表中存储的是每个频点的能量值。通过计算可知,大概有10 000个频点,即需要建立的表格应有10 000列,但MySQL数据库对表格的列数有限制,需要对表格进行纵向扩展。系统根据上位机发送的频谱检测命令的起始频率、终止频率以及采样间隔,计算频谱检测频点的个数和所需要创建的数据表的个数。为了简化计算,设定每个表格中存放1 000个频点,每个表格中均有时间、温度、湿度三个属性,便于后期数据的筛选和处理。
软件无线电进行频谱检测时,会将数据写入到名为“scan_freq”的文件中,需要在文件中逐行读取数据,将获得的每帧频谱数据添加到数据库中。数据库向表中添加数据的基本语句为:
INSERT INTO Spectrum(time ,temp,humidity,power)VALUES(‘2017’,‘NULL’,‘NULL’,‘-120’);
为了更好地观察数据库中的数据,安装数据库可视化工具MySQL Workbench,任务表和数据表的格式见图6。
图6 数据库创建表格式Fig.6 Formats of tables created in database
2.4 上位机设计
系统选用Android设备作为上位机,采用Client/Server(C/S)架构,实现和主控模块之间的交互。C/S架构,即客户端和服务端的通信连接模式,充分利用客户端和服务器端的环境,在客户端进行具体的运算和数据的处理,服务器端任务较轻,为客户端提供筛选数据的接口,将任务合理分配到Client端和Server端,降低了系统的通信开销。套接字(Socket)是一个通用的网络编程接口,使用套接字通信协议进行通信的设备,均被划分为服务器端和客户端。本系统中主控模块作为服务器端首先通过组播发布自己的IP地址,本地开启端口进行监听,此时该监听进程从运行状态转换成阻塞状态,实时等待客户端发送连接请求。上位机作为客户端,向服务器端发出创建Socket连接请求。服务器端接收到请求,响应状态从阻塞状态转换成运行状态。服务器端反馈Socket描述,客户端接收到描述后发送确认信息,服务器端收到确认信息则标志创建连接成功[13]。具体流程如图7所示。
图7 Socket通信流程图Fig.7 Flow chart of Socket communication
主控模块和Android控制端采用套接字进行通信,Android控制端向主控模块询问SDR的序列号信息,用户可以根据主控模块返回的SDR信息,向对应的SDR发送相应的频谱检测指令,或者查看相对应的SDR返回的频谱数据制成的折线图。同时用户可以在上位机查看频谱数据库中存放的数据表格的目录,筛选所需的数据进行分析处理。Android控制端界面如图8所示。
图8 Android控制端界面Fig.8 Interface of Android control terminal
3 系统测试
频谱数据库中包含大量的历史数据,可以利用这些数据回放之前任一时刻某一频段的能量瀑布图,分析电磁信号的时频特征,计算频道占用度和频段占用度。为了验证本系统采集的频谱数据的准确性,在数据库中利用select语句选取某一时刻某一频段的数据,采用Matlab工具进行数据仿真,将仿真结果和频谱仪的数据进行对比。图9为Matlab仿真得到的700~780 MHz的瀑布图,图10为专业频谱仪检测到的同频段的瀑布图。
图9 系统仿真获得的瀑布图Fig.9 Waterfall map obtained by system simulation
图10 专业频谱仪检测的瀑布图Fig.10 Waterfall map of detection by professional frequency spectrum analyzer
由于SDR和专业频谱仪过滤噪声的能力不同,SDR对噪声的阈值较低,可以检测到更多的微弱信号,因此两幅瀑布图稍有差异。但是对比信号强度较强的信号,本系统和专业频谱设备检测到的无线电信号基本一致。
验证了数据的准确性后,可以利用频谱数据库中的数据计算某一频点的频道占用度。信号强度大于H时(H为用户自己设定的频点被占用的阈值),认为该时刻该频点被占用。计算频道占用度的核心代码如下:
测试时,设置阈值H=-100 dB,得到时间2017年11月21日12:25—17:20,频点763.5 MHz的频道占用度为10.36%。运行结果如图11所示。
图11 运行结果Fig.11 Running result
4 结语
本文提出的基于频谱数据库的电磁信号检测系统,选用开源程度高、灵活性强的软件无线电作为信号采集模块,同时采用C/S架构实现客户端和服务器端的交互。不但实现了对无线电信号的实时检测,而且能将频谱数据实时保存到数据库中,便于后续实现对无线电信号的特性分析和有效信息的挖掘。但由于选用了实现相对简单的能量检测算法,使得在噪声复杂的环境下,可能会造成数据误差过大。今后将对这一算法加以优化,确保采集的频谱数据更为准确。后期将加强对无线电信号的时频特性分析,以更好地挖掘频谱数据中的有用信息,实现对有限频谱资源更加高效合理的利用。