胡铁乔,任志杰
(中国民航大学 天津市智能信号与图像处理重点实验室,天津 300300)
广播式自动相关监视(ADS-B)信号源是ADS-B接收机研制过程中不可缺少的测试设备,目前对ADS-B信号源的研究主要有钟伦珑等设计的ADS-B接收机自动测试系统[1]和王婷琦等设计的ADS-B信号发生器[2]。上述ADS-B信号源均是采用上位机配合下位机的方式实现,上位机是计算机或带有显示终端的嵌入式设备,负责生成已知功率、多普勒频移的ADS-B数据,下位机是数据编码、信号调制、数模转换与上变频等模块,根据上位机提供的ADS-B数据生成对应的ADS-B射频信号。由于这类设备的下位机不仅涉及FPGA和单片机软件开发,还涉及到PCB电路板硬件设计,导致开发周期太长。此外,该类设备一旦定型,后期增加功能需要涉及硬件层面的改动,导致其可扩展性较差。
本文采用CPU+GPU异构平台[3],通过计算机编程生成ADS-B数字中频信号,以Google Earth作为地理信息系统,针对CPU串行执行程序较慢问题,采用CUDA技术利用GPU进行加速来实时生成数字中频信号,通过DA卡将数字中频信号转换为对应频率的模拟中频信号。该方法使得DA转换器尽可能靠近天线端,将更多的任务以软件编程的方式来实现,以这种方式设计出来的系统涉及到的硬件电路较少,具有高度的灵活性与开放性,仅仅通过软件编程就可以增加新的功能,使得系统的可扩展性增强。
ADS-B信号实时生成软件包括参数设置模块、信号生成模块、数据保存模块和显示模块,软件能够根据设定的参数生成采样率为80 MHz的ADS-B数字中频信号,使用采样率为80 MHz的DA卡即可将其回放为与设定功率、频率对应的ADS-B模拟中频信号。ADS-B信号实时生成软件框架如图1所示。
图1 ADS-B信号实时生成软件框架
根据软件功能确定需要设置的参数,其中ADS-B信号参数包括功率和多普勒频移;航迹参数包括飞机的航迹类型、飞机架数和飞机高度;卫星参数包括星下点坐标、轨道高度和轨道倾角。使用MFC的按钮、编辑框、组合框等控件类为各个参数添加相应的控件,实现在参数设置界面调整各个参数的功能。
信号生成模块是ADS-B信号实时生成软件的核心。根据上述参数设置模块中航迹设置与卫星设置的参数,可以生成基于KML语法的航迹数据与卫星天线覆盖范围数据。根据信号设置设定的参数,可以生成与之对应的ADS-B信号或载波。当信号参数中的功率模拟方式选择真实功率时,根据当前时刻飞机与接收天线的距离,通过地空通信链路损耗模型来计算这一时刻信号的功率;功率模拟方式选择固定功率时,通过参数设置界面输入一个固定的功率值,该方式生成的每一条ADS-B信号的功率大小均为设定的功率。当信号参数中的频移模拟方式选择真实频移时,通过多普勒频移计算公式计算信号的多普勒频移,该方式模拟的多普勒频移由当前时刻飞机与接收机天线的径向速度决定;频移模拟方式选择固定频移时,通过参数设置界面输入一个固定的频移值,该方式生成的每一条ADS-B信号的频移大小均为设定的频移。最后,将生成的ADS-B基带信号结合上述得出的功率与频移,生成ADS-B数字中频信号或者频偏和功率与ADS-B数字中频信号相同的载波。
在设定好卫星参数后,软件将生成的卫星天线覆盖范围数据以KML语法格式保存到KML文件中,用于Google Earth显示天线覆盖范围。在生成当前1 s的ADS-B数字中频信号之前,软件将该秒的航迹信息以KML语法保存到KML文件中,用于Google Earth显示当前时刻飞机航迹。软件每生成1 s时长的ADS-B数字中频信号之后便执行一次写磁盘操作,将缓冲区中的ADS-B数字中频信号写入到DAT文件中,当下一秒的信号生成完毕直接将缓冲区中之前的数据覆盖,这样只需开辟两个1 s时长信号占用大小的缓冲区(因为写磁盘部分用到乒乓操作,所以需要两个缓冲区),有利于软件在内存较小的平台上进行部署。
根据ADS-B数据内容,将仿真的飞机以及相关信息显示在界面中,通过Google Earth COM API将Google Earth嵌入到本系统中作为地理信息系统,以KML文件为媒介实现航迹可视化,使得人机交互更为容易。
ADS-B信号实时生成软件系统流程如图2所示,该软件能够实时完成4个通道ADS-B数字中频信号的生成与存盘,后续使用DA卡把生成的4个通道数字中频信号回放为4路模拟中频信号,经过上变频器将模拟中频信号上变频为1090 MHz的射频信号。
图2 ADS-B信号实时生成软件系统流程
飞机距离接收机的远近会影响飞机广播的ADS-B信号到达接收机天线端的功率大小,为了模拟接收机天线覆盖范围内不同距离的飞机发出的ADS-B信号,本文设计的ADS-B信号模拟软件可以调节信号的发射功率。在移动通信中特别是高速运动状态下,发射端与接收端之间径向速度的改变会使天线接收的信号频率发生变化,称为多普勒效应[4],多普勒效应引起的频移称为多普勒频移。飞机与星载ADS-B接收机的相对速度很大,导致信号的多普勒频移较明显,因此需要对ADS-B信号的多普勒频移进行模拟[5]。
2.1.1 直接数字式频率合成器
直接数字式频率合成器(direct digital synthesizer)的英文缩写为DDS,DDS技术是一种经典的频率合成方法。由于DDS技术采用全数字化实现,便于集成,且性能良好,DDS设备日益受到重视,在通信领域中已得到广泛的应用[6]。本文中信号功率与频偏的模拟通过DDS来实现。
DDS由相位累加器、正弦ROM表、DA转换器及低通滤波器构成。在时钟脉冲的控制下,相位累加器以频率控制字K为步长进行累加得到相应的相码,相码寻址ROM查找表进行相码-幅码变换输出不同的幅度编码,再经过DA转换器得到对应的阶梯波,最后经低通波器进行滤波平滑,得到受频率控制字控制的连续变化的输出波形。DDS各个变量之间的数学关系如下
(1)
(2)
式中:fout为待生成的信号频率,fclk为时钟频率,N为相位累加器的位宽,K为对应fout的频率控制字,Δf为频率分辨率。本文中fclk为80 MHz,N设定为28,由式(2)可知Δf为0.298 Hz。
为了避免ROM查找表耗费存储资源过多的问题,将相位累加器的高10位用于寻址ROM查找表,这样ROM查找表也只需要10位就可以存储正弦波一个周期的信息。
2.1.2 多普勒频移模拟
本文中的频移以10 MHz为中心频率,故由式(1)可以得出10 MHz的频率控制字K10MHz,引入KDpl作为多普勒频移的频率控制字,各变量之间的数学关系如下
(3)
(4)
式中:fDpl为多普勒频移,软件执行过程中把通过真实频移或固定频移方式模拟的多普勒频移传递给fDpl,将fDpl代入到式(4)可得出KDpl。DDS的相位累加器在时钟脉冲的驱动下以K10MHz+KDpl的步长进行累加,当相位累加器累加满时就完成了一个周期动作,该周期对应的频率就是叠加上多普勒频移的信号频率。
通过上述方法可以模拟出由飞机与接收机相对速度导致的多普勒频移,多普勒频移模拟关键代码如下:
short Amp_V=GetAmpDat(Amp_dBm);
int tmp1,tmp;
shift_r=phaAddWidth-10;
phase_inc_Dpl=round(DopplerShift*phase_inc_1 Hz);
phase_adder=0;
for(int i=0;i { phase_adder=phase_adder+phase_inc_10MHz+phase_inc_Dpl; tmp1=round(phase_adder/(pow(2,shift_r))); tmp=tmp1%1024; Sin_out[i]=Amp_V*Sin_ROM[tmp]; } 2.1.3 功率模拟 真实功率模拟方式是通过建立地空通信链路损耗模型来实现信号功率模拟,根据地空通信链路损耗公式可以计算信号到达接收机天线端功率值 Pr=PT+GT+GR-Ld-Ls (5) 式中:Pr(单位dBm)是ADS-B接收机接收到的信号功率值,PT(单位dBm)是信号发射功率,GT是发射天线增益,设定为3 dB;GR是接收天线增益,设为8 dB;Ld(单位dB)是自由空间传播损耗,Ls是大气、云、雨、雾吸收损耗,此外,发射天线、接收天线损耗设为6 dB。 对于自由空间损耗Ld,有公式 Ld=32.44+20lgd+20lgf (6) d(单位km)表示发射天线与接收天线的距离,f(单位MHz)表示载波频率,这里取1090 MHz。这样就实现在软件中根据飞机与接收机的距离,模拟出信号经衰减后到达接收机的功率大小。 ADS-B信号实时生成软件生成的数字中频信号最终要通过DA卡将其回放为模拟中频信号。数字中频信号的存放格式由DA卡决定,以8个通道为例,从通道1到通道8,每通道依次存放8个点(short类型)。DA卡中频数据格式如图3所示。 图3 DA卡中频数据格式 图3中每个点都是一个short类型的数值,该数值越大对应回放后的电压越高。建立分贝毫瓦到电压的映射表,使用真实功率或者固定功率方式模拟的功率值通过查表的方式可以得到一个介于-32767~32767之间short类型的数值,2.1.2小节代码段中Amp_V即为查表后的数值,该数值对应经DA卡回放后ADS-B模拟中频信号的电压值。 软件首先生成每驾飞机的航迹数据,包括空中位置、地面位置、空中速度、飞行器身份和类型、飞行器运行状况、目标状况与状态、测试数据共7种类型的数据以及飞机当前发射信号的功率与频移,并将其存储到每驾飞机的航迹数据结构体中。根据RTCA-DO260B中规定的各种报文的编码方法,将以上7种数据编码为对应的7种ADS-B报文。 一帧基带ADS-B信号的长度为120 bit,包括由4个前导脉冲构成的8 bit报头和112 bit的数据域[7]。4个前导脉冲时间起点分别为0.0 μs、1.0 μs、3.5 μs、4.5 μs,每个脉冲持续时长为0.5 μs。数据位采用脉冲位置调制,每个码元的持续时长为1 μs。在1 μs码元时长内若前0.5 μs为脉冲,后0.5 μs为零电平,表示码元为1,若前0.5 μs为零电平,后0.5 μs为脉冲,表示码元为0,112个码元构成一条ADS-B报文。由一帧ADS-B基带信号生成中频信号程序流程如图4所示。 图4 生成一条ADS-B中频信号程序流程 基于通用计算机平台的ADS-B信号源具有较好的灵活性与可扩展性等优点,但是在CPU上串行执行的程序运行速度太慢,特别是在数据量比较大的场景下这种问题更加明显[8]。CUDA是NVIDIA公司推出的一种通用并行计算架构,该架构使GPU能够解决复杂的计算问题[9]。文中将耗时较长的部分利用CUDA技术在GPU上并行化,实现ADS-B中频信号生成与存盘的实时性。 ADS-B信号实时生成软件中耗时最多的是信号调制和写磁盘部分,其中信号调制部分主要是数据的搬移,属于数据密集型操作,所以对这部分进行数据搬移优化。首先将生成4个通道的ADS-B数据分别存储在4个长为80000000的数组中,之后将4个数组的数据按照DA卡回放格式搬移到一个数组中用来写到磁盘。采用CPU完成这项工作时,需要执行80000000*4个数据搬移操作,这种方式耗时长,无法达到实时生成信号的要求。 采用CUDA编程对上面数据搬移部分进行优化,使用GPU强大的并行能力来加速程序的执行。具体步骤如下: (1)分配显存空间; (2)将主机端生成的1 s时长4个通道的ADS-B信号存储到显存空间; (3)配置并启动核函数,将4个通道的ADS-B信号按照DA卡读数据格式搬移到一个缓冲区中; (4)将显卡缓冲区中搬移后的数据拷贝到主机端写磁盘缓冲区中。 主机端与设备端交换的数据量比较大导致拷贝占用的时间比较长。CUDA运行时提供了cudaHostAlloc()函数分配页锁定内存,GPU可以直接与主机端的物理内存交换数据,使拷贝操作比可分页内存性能高2倍,页锁定内存使用cudaFreeHost()进行内存释放。 写磁盘部分采用多线程和乒乓操作技术实现,生成当前秒数据的同时,往磁盘写上1 s已经生成好的数据,这样就利用了生成数据与写磁盘二者中耗时较长的时间隐藏了耗时较短的那部分时间,提升软件工作的速度。乒乓操作是一种常用于数据流控制的处理方法,特点是创建“缓冲区1”和“缓冲区2”两个缓冲区,通过输入数据选择单元和输出数据选择单元按节拍、相互配合的切换,将经过缓冲的数据流不断传输到数据流运算处理模块[10]。 通过创建WriteDisk1与WriteDisk2两个线程分别将“缓冲区1”与“缓冲区2”中的数据写入到磁盘中。为了避免两个线程在写磁盘时同时操作文件指针而导致数据竞争问题[11],本文采用互斥锁来完成两个线程间的通信[12,13]。当WriteDisk1开始操作文件指针时,会上锁避免其它线程对该文件指针的操作,WriteDisk1写磁盘结束后开锁释放对文件指针的使用权;同理,当WriteDisk2开始操作文件指针时,会上锁避免其它线程对该文件指针的操作,WriteDisk2写磁盘结束后开锁释放对文件指针的使用权。 在本文中按1 s为单位生成ADS-B信号,故乒乓操作中的缓冲周期设定为1 s。生成4个通道数据时,每通道数据长度是80000000,故“缓冲区1”和“缓冲区2”的长度是80000000*4。在第1秒时,数据生成完毕后,显卡将当前1 s的4个通道数据通过并行的方式整合到显存中一个长度为80000000*4的数组中,通过拷贝函数将显存内数据拷贝到主机内存“缓冲区1”中并启动WriteDisk1将“缓冲区1”中的数据写到磁盘,在WriteDisk1进行写磁盘时,主线程开始生成第2秒数据,数据生成完毕后,通过拷贝函数将显存内数据拷贝到主机内存“缓冲区2”中并启动WriteDisk2将“缓冲区2”中的数据写到磁盘,在WriteDisk2进行写磁盘时,主线程开始生成第3秒数据,依次循环下去。 Google Earth是谷歌公司旗下的一款虚拟地球软件,本软件平台使用Google Earth作为航迹显示的地图背景,通过调用Google Earth COM API将Google Earth嵌入进目标工程。使用CApplicationGE类的GetMainHwnd函数获取Google Earth的主窗口句柄,使用CApplicationGE类的GetRenderHwnd函数获取Google Earth的地图窗口句柄。在分别获取这两个窗口句柄之后,将Google Earth的地图窗口的父容器改变为本软件的主窗口,并将Google Earth的主窗口隐藏掉,实现了将Google Earth嵌入到本软件平台[14]。本软件平台周期性的将飞机的位置、速度、高度等信息进行更新并写到航迹KML文件中,周期性的对航迹KML文件进行加载,实现了飞机航迹的实时更新。在每一次设置波束参数后对波束KML文件进行更新并将其加载到Google Earth中实现对星载接收机天线覆盖范围的显示。 ADS-B信号实时生成软件实验平台是Intel Xeon E5-2640 CPU的PC机,GPU采用NVIDIA GeForce GTX TITAN BLACK,操作系统是Windows 7,开发环境是Microsoft Visual Studio 2012加装CUDA9.0,使用MFC开发人机交互界面。 ADS-B信号实时生成软件界面包括参数设置菜单栏、快捷工具栏、三维显示窗体3部分,参数设置菜单栏包括卫星参数设置、航路参数设置、生成航迹等主要功能菜单,快捷工具栏包括开始/停止按钮、仿真时间控件、地图放大缩小按钮等使用频率较高的一些功能控件,三维显示窗体用来显示地图背景、航迹等内容。软件启动界面如图5所示。 图5 软件启动界面 通过ADS-B信号实时生成软件中参数设置模块来设置模拟参数,卫星参数设置为多波束类型,信号通道个数为4,航迹类型设置为绕圈飞行,为了方便观察,飞机架数设置为每通道50架,内圈外圈各25架,软件仿真航迹效果如图6所示。将软件生成的ADS-B数字中频信号经过DA卡回放,输出到示波器观察信号波形如图7所示,图7(a)是截取的一帧完整的ADS-B信号波形,图7(b)是帧头局部放大,显示结果与 2.2节中描述的ADS-B信号特征相符。 图6 软件仿真航迹效果 图7 ADS-B信号波形截图 为了进一步验证软件所生成信号的准确性,将所生成的ADS-B数字中频信号经过DA卡和上变频器后通过天线辐射出去,使用Kinetic公司的SBS-3接收机进行接收,经过解码后的航迹如图8所示,图中外面4个圆形航迹为ADS-B信号实时生成软件所发信号,中心的航迹为天津滨海机场上空真实飞机的航迹。 图8 SBS-3接收机接收解码航迹 ADS-B信号是脉冲信号,而频谱分析仪无法直接对脉冲信号进行测量,本软件具有输出连续波功能,可以输出与当前ADS-B信号相同功率与多普勒频移的载波,这样就可以使用频谱分析仪测量载波的功率与频移获取ADS-B信号的功率与频移。 3.1.1 功率测试 当软件设定发送功率为-60 dBm,多普勒频移为0 Hz,输出设定为连续波,将生成的信号经DA卡回放后输出到频谱仪,频谱仪测试功率结果如图9所示。 图9 频谱仪测试功率结果 3.1.2 频偏测试 当软件设定发送功率为-60 dBm,多普勒频移为1000 Hz,输出设定为连续波,将生成的信号经DA卡回放后输出到频谱仪,频谱仪测试频偏结果如图10所示。 图10 频谱仪测试频偏结果 为了验证ADS-B信号实时生成软件生成ADS-B信号的实时性,分别对该软件的CPU版本与CPU+GPU异构版本进行测试,设定每波束模拟250架飞机,仿真时长设定30 s,使用计时函数计算每秒内生成信号并存盘的耗时,最后求取每秒内生成信号并存盘耗时的平均值,比较两种版本的软件生成并存储不同波束个数ADS-B信号每秒耗时的平均值。两种软件版本生成1 s数据耗时平均值对比见表1,当波束数量大于等于2时加速比稳定在6倍左右,当模拟4个波束共1000架飞机时,能够在1 s内完成当前1 s时长信号的生成与存盘,达到了实时生成ADS-B信号的要求。 表1 两种软件版本耗时对比 本文针对当前ADS-B信号源涉及到的硬件系统复杂导致开发周期长、功能可扩展性弱的问题设计开发了ADS-B信号实时生成软件。本软件实现了ADS-B信号源的基本功能,一方面采用DDS技术实现了信号功率与多普勒频移的模拟;另一方面通过CUDA编程和乒乓操作,实现了ADS-B数字中频信号的实时生成与存储。此外,通过Google Earth COM API将谷歌地球嵌入到本软件中作为地理信息系统,增强了人机交互界面的友好性。测试结果表明,通过该方法设计开发的ADS-B信号生成软件运行效果良好,能够实时生成并存储ADS-B数字中频信号,为进一步扩展为多类型信号生成软件平台提供基础。2.2 中频信号生成
2.3 CUDA加速
2.4 多线程与乒乓操作
2.5 地图背景与航迹显示
3 实验结果及分析
3.1 功率与频偏测试
3.2 加速比测试
4 结束语