段云龙,袁 波,陈金锋
(中国电子科技集团公司第二十七研究所,河南 郑州 450047)
随着CCD和CMOS等电子元器件和通信技术的提高,高分辨率遥感卫星的有效载荷数量急剧增长,数据传输的码速率快速提高,如吉林一号A星数传数据编码后信道速率单通道为344 Mbps;快视系统可在接收遥感数据的同时或接收完成之后即刻生成未经任何校正处理的可视图像,通过它用户可直观了解有关遥感图像质量、云层覆盖和评估、目标图像快速判别等方面的基本情况以及进行星地间数传链路的测试[1-3]。
在遥感数据高速记录与快视方面,杨仁忠等[4]提出了一种通用快视数据格式、数据格式转换处理方法,实现了通用多功能成像显示技术,并以回放的方式模拟多颗卫星数据,验证了设计的正确性;孙磊等[5]通过研制SCSI硬盘控制器,采用计算机插板直接控制磁盘阵列进行数据存储的模式,实现基于计算机控制的卫星快视设备的设计;陈亮等[6]基于DirectDraw接口、硬件调色板技术实现遥感图像实时、双屏宽幅显示。在快视数据并行处理方面,远远[7]在Windows平台上采用TCP协议实现遥感图像实时网络接收,采用UDP协议组播实现网络监控,对异步多通道CCD数据采用同步刷新控制策略,通过多个DirectDraw对象实现多通道异步遥感图像的多屏幕拼接显示;张华琳等[8]利用DirectDraw技术实现了快视图像数据的平滑显示,但是该接口已经过时;刘翔[9]提出了一种基于可靠广播的数据同步和消息机制CPU和GPU并行的多机协同处理方法实现高分辨率图像快视;运晓东[10]采用OpenGL着色语言GLSL通过可编程管线充分利用GPU硬件加速实现海量遥感影像快速浏览;董敏等[11]将CUDA引入实时快视系统,利用GPU强大的通用计算能力加速图像数据的解析和显示,获得数倍于传统CPU处理方案的效率;刘进锋等[12]分析认为CUDA和OpenGL互操作显示速度比不使用CUDA提高了7~8倍。在遥感卫星数传数据及格式化处理方面,冯钟葵[2]和张庆君[13]介绍了CCSDS高级在轨系统AOS空间数据链路协议、同步与信道编码处理以及在我国的实现情况,将有助于理解遥感卫星下传数据格式;张智琦等[14]分析国内外几种主流的遥感卫星RAW数据格式及特点,并结合中国遥感卫星地面站实际情况,提出了一种遥感卫星RAW格式方案,以期RAW数据格式早日规范化;姜宇鸣等[15]设计实现的遥感数据记录存档软件采用通用的FRED格式对遥感数据进行格式化和编排存档。
以上情况对遥感卫星数据记录、快视系统的速度和效果提出了更高的要求。本文设计了一套遥感数据高速记录和快视系统,完成两通道多路遥感数据的高速记录,利用GPU强大的通用计算能力加速图像数据的解析和显示。此外,针对后端影像预处理的输入要求,本文设计了遥感数据格式化模块,完成了遥感数据流的格式化处理。
为了满足高分辨率光学遥感卫星的多通道、高码速率的数据实时传输和处理需求,同时为了适应系统的车载机动环境,本文在遥感卫星数据记录、快视与格式化系统的硬件设备和软件模块两方面都进行了综合分析和设计,采用目前可扩展系统设计方面常用的“平台+插件”的技术体制,以高性能数据处理服务器为通用计算平台,设计以接口作为扩展点的插件式集成和运行框架,从而可以很方便地针对各颗遥感卫星设计出不同的功能模块。系统结构组成图如图1所示。
图1 系统结构组成
在硬件设备方面,为了适应车载机动的工作环境,并兼顾后续遥感数据的实时预处理,系统采用一台加固高性能服务器作为数据处理的通用计算平台,采用多核处理器+众核CPU架构设计,主要由CPU、GPU、众核、内存、固态硬盘和千/万兆网卡等部件组成。此外,为了满足多通道、高码速率的数据实时传输和处理的要求[16],系统采用InfiniBand交换机作为网络通信设备,并向高性能数据处理服务器加配InfiniBand网卡和固态存储卡,其中,固态存储卡可作为数据处理的高速缓存使用。高性能计算机硬件架构如图2所示。
高性能计算机的主要部件参数为:CPU:2颗Intel至强六核E5-2640(2.50 GHz,1.5 MB缓存);内存:256 GB(8×32 GB)DDR3ECC 1 600 MHz;众核CPU:Intel Xeon Phi协处理器5110P(1.053 GHz,60核心);GPU加速卡:2块NVIDIA Kepler K20 GPU图像加速卡;固态存储卡:1.0 TB ioDrive2 MLC PCIe固态存储卡;InfiniBand网卡:1块40 GB InfiniBand网卡,QSFP,最高支持40 Gbps,PCIe2.0;RAID卡:1 GB缓存,支持RAID0、1、5、6、10等。
图2 高性能计算机硬件架构
在软件模块方面,考虑到各颗卫星的数传格式的差异性和后续可扩展需求,系统采用目前软件应用框架设计方面常用的“插件式”的集成和运行框架。插件式框架模型的本质是一种应用工程的扩展,它使扩展功能通过插件方式实现,并使用框架进行集中统一管理,框架内部提供宿主程序和插件之间及插件与插件之间的通信机制,插件式框架能够将扩展插件有机地集成到一个平台中并有效地协调工作。
根据系统的功能需求,软件组成主要包含系统配置、数据记录、数据快视、数据格式化和和数据回放等5个模块。其中,系统配置主要提供系统运行必要的通用参数和业务参数;数据记录模块采用多线程方式接收前端解密去压缩设备输出的2通道8路数据并高速、准确地记录;数据快视模块利用GPU并行地从数据流中提取图像数据显示;数据格式化模块按照影像预处理模块的输入要求将遥感数据进行格式化处理;数据回放模块主要完成在事后模式下提供对遥感卫星原始数据的回放快视显示。实现时,系统将相关模块的核心业务抽象为顶层接口,针对不同的卫星数据格式,自顶层接口派生出实现相应卫星数据处理的功能模块类,这样就可以实现针对接口编程,而非针对实现编程,提高了系统的扩展能力。插件式软件框架设计的结构如图3所示。
图3 插件式软件框架设计结构
数据记录模块采用多线程方式接收前端解密去压缩设备输出的2通道8路数据并高速、准确地记录。数据记录模块与解密去压缩设备的数据输出模块采用客户端/服务器架构,数据记录模块作为服务器,解密去压缩设备的数据输出模块作为客户端。在传输数据时,解密去压缩设备的数据输出模块首先基于TCP/IP协议发起连接请求,数据记录模块接收连接请求并建立传输链接。数据记录模块根据配置文件中设置的监听端口的数量,发起相应数量的接收工作线程来接收前段发送过来的2通道8路数据。数据记录模块具有8个配置参数,可根据实际需求灵活配置,这些参数具体含义如下:
参数1:作为服务器的InfiniBand网卡的IP地址;
参数2:监听的IP地址的端口号的基数,如:8000;
参数3:端口数量,如:单通道时3、4、6;双通道时6、8、12;
参数4:接收数据的时间长度,如果传输时间超出该值,则强制终止接收,单位为s;
参数5:接收后的数据写盘的文件路径;
参数6:接收后的数据写盘的文件扩展名,如:dat;
参数7:接收后的数据写盘的文件的类型:0:单个文件;1:多个分块文件;
参数8:如果以“多个分块文件”方式对接收数据进行写盘,指定分块文件的大小,默认值为100 MB。对数据进行分块处理可以节省后续影像预处理模块处理耗时。
本系统所接收卫星的单通道数传速率约344 Mbps,双通道可达688 Mbps,若存储介质采用普通机械硬盘无法满足实时记录的要求,系统采用固态硬盘作为存储记录设备。另外,网络互联设备采用InfiniBand交换机,系统采用的InfiniBand交换机传输速率最高可达40 Gbps,可满足遥感大数据量的传输需求。
对于遥感数据快视需要从大量的连续数据码流中提取出有效图像数据,并将提取出的数据转化为像素值,最后在相应的窗体上绘制显示。针对该问题,本文采用CUDA来加速图像数据提取和显示。按照CUDA编程模型将CPU作为终端(Host),而将GPU作为设备(Device)。在一个系统中可以存在一个主机和多个设备。CPU和GPU各自拥有相互独立的存储器地址空间:主机端内存和设备端的显存。CPU负责进行逻辑性强的事物处理和串行计算,GPU则专注于执行计算密集、高度线程化的并行处理任务。运行在GPU上的CUDA并行计算函数称为内核函数(Kernel)。内核函数并非一个完整的程序,而是整个CUDA程序中的一个可以被并行执行的步骤。调用内核函数时,CPU调用CUDA API将内核函数的二进制代码传到GPU。内核函数以一个网格(Grid)的形式执行,每个网格由若干个线程块(Block)组成,每一个线程块又由最多1 024个线程(Thread)组成。网格之间通过GlobalMemory交换数据。线程块之间不能相互通信,只能通过GlobalMemory共享数据。同一Block内线程可以通过SharedMemory和同步实现通信。Block间粗粒度并行,Block内线程细粒度并行[16-17]。
以本系统所接收卫星数据为例,星上将图像数据量化为10位,需要对原始数据码流每隔10位分割,然后从每一个10位数据中截取出8位作为一个像素点显示。常规的提取图像数据方法是采用传统的中央处理器(CPU)遍历全部图像数据,利用移位和位与运算提取出图像数据。这种方法处理耗时较长,滞后严重,而且由于需要过多的逻辑判断,而且字节不对齐,不适用于CUDA平台上。实际上,分析码流数据的特点可知,原始数据每隔40位对齐,即每取5个字节原始图像数据可以提取出4个10位像素,再将其截取为4个8位像素值。具体方法为:第1个10位为取第1个字节+第2个字节的高2位;第2个10位为取第2个字节的低6位+第3个字节的高4位;第3个10位为取第3个字节的低4位+第4个字节的高6位;第4个10位为取第4个字节的低3位+第5个字节;对于提取出的每一个10位数据中通过右移2位截取出8位作为一个像素点显示。具体提取过程如图4所示。
图4 原始数据CUDA并行提取示意
本文采用上述方法利用CUDA进行并行处理。内核函数代码如下:
__global__ voidgetImageDataKernel(byte[]bRawData,int[]iOutputData,int height,int width)
{
int outPutLength = height * width;∥8 388 608个元素
int x = thread.blockDim.x * thread.blockIdx.x + thread.threadIdx.x;
int y = thread.blockDim.y * thread.blockIdx.y + thread.threadIdx.y;
int offset = x + y * thread.blockDim.x * thread.gridDim.x;
if (offset { int t0 = 0;∥用来保存2个待处理数与掩码的逻辑位操作后的数据 int t1 = 0; t0 =bRawData[offset * 5 + 0]<< 8;∥第0个字节全部保留各位 t1 =bRawData[offset * 5 + 1]& 0xC0;∥与11000000位与,保留高2位 int temp0 = t0 + t1; temp0 >>= 6;∥得到10位有效图像数据 temp0 >>= 2;∥右移2位得到8位有效图像数据,直接将每个像素点的10位数据的最低两位丢弃 iOutputData[offset * 4 + 0]= temp0; t0 =bRawData[offset * 5 + 1]& 0x3F;∥与00111111位与,保留低6位 t1 =bRawData[offset * 5 + 2]& 0xF0;∥与11110000位与,保留高4位 int temp1 = (t0 << 8) + t1;∥优先级:算术运算符>位移运算符>赋值运算符 temp1 >>= 4;∥由于第一个字节只保留低6位,前面位与操作使其高两位置零,所以不再需要通过左移2位而丢弃高2位,直接通过右移4位得到10位有效图像数据 temp1 >>= 2; iOutputData[offset * 4 + 1]= temp1; t0 =bRawData[offset * 5 + 2]& 0x0F;∥与00001111位与,保留低4位 t1 =bRawData[offset * 5 + 3]& 0xFC;∥与11111100位与,保留高6位 int temp2 = (t0 << 8) + t1; temp2 >>= 2; temp2 >>= 2; iOutputData[offset * 4 + 2]= temp2; t0 =bRawData[offset * 5 + 3]& 0x03;∥与00000011位与,保留低2位 t1 =bRawData[offset * 5 + 4];∥第4个字节全部保留各位 int temp3 = (t0 << 8) + t1; temp3 >>= 2; iOutputData[offset * 4 + 3]= temp3; } } 为了便于后续遥感影像预处理模块高效地工作及遥感数据的格式化存档,按照遥感影像预处理输入要求的格式对解密去压缩设备输出的码流数据进行格式化处理,采用通用的FRED格式对遥感数据进行编排处理,生成FRED数据。其中主要工作为:① 4个子线阵CCD片成像数据的拼接,主要包含2个步骤:一是光学相机帧同步搜索,搜索帧同步头确定有效数据帧;二是光学相机帧计数对齐,不同CCD或谱段间按帧计数对齐;② 从多光谱数据中提取出成像辅助数据填充到对应幅号的全色数据前。格式化后的FRED数据每幅包含2 048行,每行包含辅助数据44 Byte、全色4 096像元以及RGB图像1 024像元。其中多光谱数据以R、G、B填充的方式按行的方式循环传输。每路图像中一幅图像的格式如图5所示。 图5 单通道一幅图像格式化后的数据编排 根据上述设计,本文设计和实现了一套遥感数据记录、快视与格式化系统。系统在硬件设备方面的突出特点是采用商用高性能服务器作为通用数据平台,而非采用基于CPCI或VPX结构的专用处理设备。在软件方面,系统的突出特点是采用CUDA语言利用GPU卡完成遥感影像数据的并行提取和快视,而非采用FPGA或DSP等专用板卡来设计程序。系统的设计方案可降低数据处理设备的专用属性和研发难度。系统硬件拓扑图如图6所示。 系统软件主要包括高速接收与记录模块、全色数据处理模块(包含帧同步处理、格式解析等功能)、多光谱数据处理模块、条带影像快视处理模块和格式化处理模块等。系统软件主界面如图7所示。 图6 系统硬件拓扑图 图7 遥感数据记录、快视与格式化系统 按照系统的总体设计要求,运行时前端解密去压缩设备可输出2通道数据,每个通道可按星上数传通道实际数量启动并独立工作,每一个通道分配一个IP地址,并各绑定4个端口号用来传输4路数据。如通道1分配8000~8003共计4个端口,前2个端口8000和8001分别输出全色线阵CCD的两片子CCD的成像数据,后2个端口8002和8003分别输出多光谱线阵CCD的两片子CCD的成像数据,这样即可完成2类载荷的全部成像数据的输出。输出的数据通过InfiniBand交换机被后端的高性能数据处理服务器接收,可用于实时记录、存盘、实时/回放快视和格式化处理。系统的数据流示意图如图8所示。 本文设计并实现了一套适用于车载机动环境下的多路高速遥感数据记录、快视与格式化系统,该系统采用多线程方式以TCP/IP为可靠传输协议,并采用固态存储卡实现遥感数据的高速接收与记录,采用CUDA语言利用GPU硬件加速提取遥感数据中各通道的像素值用于影像快视,最后按照后续遥感预处理的输入要求将原始码流数据进行相应的格式化处理。 图8 系统数据流示意 实验验证表明,本文的设计可满足吉林一号A星多路遥感数据高速记录、快视和格式化处理的需求。与传统的卫星遥感数据记录和快视系统相比,本系统的“平台+插件”技术体制,既增强了系统硬件的通用性,又增强了软件的可扩展性。 [1] 张翀.遥感卫星数据格式化快速显示系统的设计与实现[D].北京:中国科学院大学,2015:1-5. [2] 冯钟葵,葛小青,张洪群,等.遥感数据接收与处理技术[M].北京:北京航空航天大学出版社,2015:84-87. [3] 李永昌.大视场TDICCD空间相机全通道高可靠快视系统[J].光电子激光,2015,26(2):224-232. [4] 杨仁忠,蔡兴文,杨蕾,等.通用遥感卫星快视处理系统技术研究[J].遥感信息,2009(5):32-35. [5] 孙磊,安建平,卜祥元.遥感卫星快视设备的设计与实现[J].电子技术与应用,2007,33(7):119-121. [6] 陈亮,龙腾.遥感图像实时宽幅显示技术研究与实现[J].微计算机信息,2008,24(30):288-289. [7] 远远.遥感图像实时多模式显示技术研究[D].成都:电子科技大学,2008:17-46. [8] 张华琳,高升,马茜,等.DirectDraw技术在快视显示系统中的应用[J].无线电工程,2010,40(8):56-58. [9] 刘翔.高分辨率图像快视技术及实现[J].无线电工程,2006,36(3):20-22. [10] 运晓东.海量遥感影像快速浏览技术研究与实现[D].北京:中国科学院大学,2016:7-18. [11] 董敏,阎镇.基于CUDA的航天遥感图像实时快视系统的研究[J].计算机技术与发展,2014,24(6):32-35. [12] 刘进锋,郭雷.CUDA和OpenGL互操作的实现及分析[J].微型机与应用,2011,30(23):40-42. [13] 张庆君,郭坚,董光亮,等.空间数据系统[M].2版.北京:中国科学技术出版社,2016:143-161. [14] 张智琦,张洪群,刘定生.遥感卫星原始数据格式分析及规范化研究[J].空间科学学报,2007,27(1):83-88. [15] 姜宇鸣,陈道波.遥感数据记录存档软件的设计与实现[J].郑州轻工业学院学报(自然科学版),2011,26(3) :104-107. [16] 季艳,鲁克文,张英慧.海量遥感数据分布式集群化存储技术研究[J].计算机科学与探索,2017(9):1398-1404. [17] 张舒,褚艳利.GPU高性能运算之CUDA[M].北京:中国水利水电出版社,2009:14-19. [18] 刘金硕,邓娟,周峥,等.基于CUDA的并行程序设计[M].北京:科学出版社,2014:31-33,46-47.2.3 遥感数据格式化处理
3 系统实现与应用
4 结束语