文献标识码: A
文章编号: 0258-7998(2012)01-0034-04
在航空摄影测量领域,常采用高分辨率CCD相机在高空对物体进行拍摄。目前的CCD数据处理系统首先在CCD相机的控制下,输出海量连续的CCD数据流。然后通过构造缓存单元结构,缓存接收的CCD图像数据。由于图像信息量太大,无法实时处理,需要在飞行过程中将所有图像实时记录在高速硬盘上,最终把缓存的数据流输入至实时记录系统实现高分辨率CCD数据的记录。
针对飞行过程中的一些特殊情况,需根据接收的GPS信息(飞行高度、速度等)实时调整CCD帧频[1]。要实现可变帧率的CCD数据处理,对整个CCD数据实时处理能力提出了更高的要求。同时,随着CCD像元数的激增,每帧CCD图像的像素分辨率超大,如何实现基于高分辨率CCD图像感兴趣区域的智能实时观测是目前航测领域的研究重点。针对可变帧率和智能观测需求,提出了一种基于感兴趣区域的可变频CCD实时处理系统。
系统根据可变频要求,一方面通过在FPGA内部设计UART控制器,触发CCD相机外同步触发信号,实时计算出随GPS信息不断变化的CCD帧频信息;另一方面,提出了一种数据提取算法,该算法通过对乒乓缓存的CCD图像数据进行可变窗口定位,实现了感兴趣区域的智能观察和存储;最后,通过视频编码实现感兴趣区域的高清晰视频实时显示。整个系统已在FPGA内实现并通过验证,可广泛适用于任何分辨率大小CCD的智能实时处理。
1 系统设计方案
该可变频CCD智能实时处理系统由CCD控制模块、数据实时处理模块和实时显示模块组成。CCD控制模块:在相机外同步工作模式下,通过在FPGA内设计UART控制器,接收外部发来的GPS信息,实现CCD相机帧频的实时调整。针对数据实时处理模块,提出了一种数据提取算法:首先提取出原始CCD图像数据的感兴趣区域,该区域符合SMPTE(1080i)有效的高清晰视频数据分辨率大小,并通过可变窗口定位实现区域的智能实时调整;然后通过乒乓缓存结构的设计,实现感兴趣区域的实时存储;最后由实时显示模块,将缓存的感兴趣区域数据打包为高清晰视频格式,通过视频编码实现感兴趣区域的高清晰视频实时显示。图1给出了整个系统的实现方案。
2 CCD控制模块的设计
2.1 可变频帧率的设计与实现
在飞行过程中,首先需接收GPS导航信息[3](主要包括飞行器经纬度位置、时间(时/分/秒)以及海拔高度、地速等飞行参数,数据刷新率为10 Hz/s),根据信息计算得到当前相机帧频。由于数据刷新率较高,接收数据的准确性是保证后续工作精度稳定的前提条件。
传统的处理方式是[4]:通过串口配合相关电路,接收GPS信息,并计算得到随飞行高度和速度实时改变的相机帧频。UART(Universal Asynchronous Receiver Transmitter)作为计算机或外围设备的串行通信接口,通常在单片机中使用。本设计中改用FPGA完成所有数据处理,并设计了基于PFGA的UART控制器。
UART控制器包含以下组件:时钟发生器、输入和输出移位寄存器、发送/接收控制单元和FIFO缓冲存储器。时钟发生器通常是比特率允许在一个位周期中采样的倍数。输入和输出移位寄存器是串行和并行之间形式转换的基本方法。发送或接收控制单元完成数据的传输和接收器下控制读或写控制逻辑。FIFO缓冲存储器实现对发送/接收数据的高速缓存。图2给出了基于FPGA的UART控制器设计,可见,整个UART设计充分利用FPGA的内部存储和时序逻辑资源,减小了系统的面积, 改变了传统通过单片机处理器的控制,大大降低了系统功耗,提高了设计的稳定性。
通过基于FPGA的UART控制器设计,GPS信息可从UART正确接收,根据GPS相应的飞行参数,可计算得到可变帧率,并输入至FPGA。本系统每帧CCD的拍摄时间间隔表达式如下:
式中,v是飞行速度(km/h),H是飞行高度,a是拍摄视角, qx是相邻的图片重叠比例。可见,通过接收GPS的飞行速度和飞行高度信息和实际拍摄要求,即可计算出拍摄时间间隔。根据时间和频率之间的关系,得到CCD当前帧速率。
FPGA在内部时钟的控制下,针对可变帧频率,通过FPGA的时序逻辑控制,产生外同步控制脉冲信号。这样,在外同步脉冲的触发下,相机开始积分,积分完毕后,在行、场、消隐同步信号的控制下,读出CCD相机数据。
2.2 基于高速Cameralink接口的CCD数据传输
为提高海量CCD连续数据流的传输速率,采用基于Cameralink接口技术实现高速CCD数据传输。Cameralink接口技术是基于Channel Link技术发展而来的。Channel Link是基于LVDS技术发展而来的,它是一种用来传输视频数据的新技术。Channel Link使用一个并转串驱动器和一个串转并接收器传输数据,其最高速率可达2.38 GHz/s,非常适合高分辨率CCD数据实时处理以及其他高速控制信号的传输[5]。
高分辨率CCD数字相机通过Camera Link接口的连接,实现多位高速并行的数据线转换为串行数据线输出。同时,通过接收芯片DS90CR288A实现对CCD相机输出的串行数据还原为原始的并行数据输出,并提供了相应的CCD相机通信信号和有效控制信号。对DS90CR288A解码输出的CCD相机数据输入至FPGA,实现实时处理。
3 实时数据处理模块
3.1 感兴趣区域提取算法
实时处理模块主要对输入至FPGA的CCD图像数据进行处理。CCD相机数据的时钟输出速率为2 MHz×40 MHz,以两路并行格式输出,两路数据像元分辨率大小为2 048×1 024,数据分辨率为10 bit。为有利于数据进一步处理,在FPGA内构造FIFO实现对两路并行数据的实时合成。合成后的数据分辨率为10 bit,频率为80 MHz,像元分辨率大小为2 048×2 048。
在实际观测中,需要实时提取感兴趣区域。设原始图像分辨率大小为M×N,感兴趣区域分辨率大小为m×n。由于CCD原始数据分辨率远大于感兴趣区域数据分辨率,提出了一种感兴趣区域提取算法。算法设计思路如下:
(1)通过UART接收当前波门位置信息(Rstart,Rwidth,Cstart,Cwidth),同时波门位置信息实时写入FPGA。其中,Rstart、Rwidth分别表示在像素时钟的作用下,原始图像对应的行起始地址和行宽;Cstart、Cwidth分别表示在像素时钟的作用下,列起始地址和列宽。
(2)在FPGA中构造4个专用寄存器分别用来动态存储上述波门位置信息(Rstart,Rwidth,Cstart,Cwidth)。
(3)在像素时钟的控制下,在FPGA内构造两个计数器分别对每行、每列像素个数进行计数。Pi、Qj分别表示当前行、列计数值。
(4)构造波门判别函数模型,如判别函数为真,即当前计数值在波门信息范围内时,对于图像数据予以保留,否则予以舍弃。判别函数如式(2)所示。
当一帧图像数据接收完毕时,即完成了对当前帧图像的感兴趣区域数据提取。当下一帧数据输入且波门位置改变时,则返回(1),重复上述过程即可。
3.2 高速缓存的设计
在实时抽取后,保留下的数据分辨率大小与高清晰模拟视频有效数据分辨率相同。但两者在速率和帧频上都不相等(相机数据速率为80 MHz,帧频为变量,高清晰视频数据格式选择速率为74.25 MHz,帧频为30帧/s,每帧分为奇场和偶场的格式),因此需要为变频的CCD图像感兴趣区域和恒速的视频编码之间构造一个适应通道——高速缓存结构。常用的缓存结构主要有以下三种形式[6]:
(1)FIFO结构:能够达到很高的传输速度和效率,且由于省去了地址线而有利于PCB 板布线。缺点是只能顺序读写数据,因而显得比较呆板。
(2)双口RAM结构: 具有两套独立的数据、地址和控制总线,能达到很高的传输速度,并且具有随机存取的优点。缺点是大容量的高速双口RAM 硬件复杂度高,价格昂贵。
(3)SRAM乒乓缓存结构:可随机存取,同时较大容量的高速SRAM容易得到且价格适中。缺点是切换控制电路比较复杂。
综合考虑以上三种高速缓存方案,在本设计单元中,选用SRAM乒乓缓存方案。具体设计流程如下:在第一个缓冲周期,将输入数据流缓存到第一片SRAM中;在第二个缓冲周期,通过控制信号的切换,将输入的数据流缓存到第二片SRAM中,并将第一片SRAM缓存的第一个周期的数据通过控制送入下一处理单元(视频编码单元);在第三个缓冲周期,通过控制权的再次切换,将输入的数据流缓存到第一片SRAM,并将第二片SRAM缓存的第二个周期的数据通过控制权的切换,送到下一处理单元。如此循环,周而复始,很好地完成对数据流的无缝缓冲和处理。
4 实时显示模块
4.1 基于FPGA的高清晰视频数据打包
由于从数据实时处理单元SRAM 读出的是纯粹图像数据, 因此首先要将读出数据打包为符合SMPTE274 标准的1080i 高清晰视频格式,最终实现高清晰的模拟视频显示。
首先简单介绍符合SMPTE274标准的1080i高清晰模拟视频格式[7]。图3给出了高清晰视频数据包格式。其中,每个EAV 和SAV 定时基准信号由4 个字的序列组成,格式如下:FF、00、FF、XY(数值以16进制表示,FF、00留供定时基准信号用) 。头三个是固定前缀,第四个字包含定义第二场标识、场消隐状态和行消隐状态的信息。每行有效数据像素为1 920个像素,行消隐期为272个像素。
对数据进行打包实际就是用FPGA产生包头信息、消隐期的填充数据以及Y分量的数据和Cb、Cr分量的数据复合,再进一步将视频数据和包头信息、填充数据合并,最终产生符合上述定义格式标准的数据包。在具体实现过程中,FPGA要设计两个计数器,一个用来进行行计数,另一个用来对每行的像素进行计数。根据两个计数器的值,在相应的地方写上包头信息,在消隐期填上填充数据,而在有效行的有效像素期,FPGA 的输出来自SRAM 输出的原始相机数据。这样,在FPGA 里的视频数据复合成模块,用74.25 MHz 的时钟将Y分量和Cb、Cr分量按格式要求的4:2:2格式复合成高清晰视频数据流,如图3所示。
4.2 基于FPGA的视频编码芯片控制和实现
在完成对数据的打包后,需要对视频芯片内部寄存器进行配置并最终转换为模拟视频显示。ADV7300A支持I2C总线通信协议。传统的工作方式通常使用单片机实现对I2C总线接口的控制。然而,为减少设计资源并提高FPGA的使用效率,设计了基于FPGA的I2C总线控制器。
I2C总线控制器主要包括以下几个单元:数据缓存单元、移位寄存器单元、I2C总线传输控制单元和分频单元。其中,数据缓存单元实现对如初始化ADV7300的数据进行缓存,这里缓存单元即通过FPGA内部的RAM存储即可。
移位寄存器单元实现数据的并-串转换。由于FPGA内部的缓存单元的数据位宽为8 bit,而I2C总线上传输的位宽为1 bit,所以要进行并串转换,且需满足数据高位在前,低位在后。通过构造移位寄存器,可在时序控制逻辑模块的控制下根据读写使能信号对数据进行正确处理。
I2C总线传输控制单元是设计的核心,根据I2C总线传输协议,整个传输过程可以分为空闲、开始、发送数据、接收数据、停止5个状态。当I2C总线处于空闲状态且驱动信号为高电平时开始运作I2C模块, 并根据读/写判断进入下一状态,即进行传输数据或接收数据。当数据传输完毕, 跳入停止状态。因此,在FPGA内设计有限状态机的结构实现对I2C总线的传输时序控制,其状态转移如图4所示。
分频单元则根据I2C总线传输速率,通过对FPGA的全局时钟进行分频,以满足I2C总线的传输速率要求。
通过在FPGA内实现基于I2C总线控制器的设计,很好地完成了FPGA对视频编码芯片ADV7300内部寄存器的配置和读写,最终实现高清晰模拟视频显示。目前,该设计已通过验证,并成功应用于某航空摄影测量工程,具有很高的工程应用价值。
参考文献
[1] 陈苏婷,吴钦章,杨世洪.航空摄影测量用高清晰视频编码显示系统设计[J].半导体光电,2007,28(4):596-600.
[2] 陈苏婷,杨世洪.基于IB-IWT实时图像压缩的FPGA设计与实现[J].信息与控制,2009,38(1):145-149.
[3] 高文武,贺赛先.基于GPS的CCD相机同步控制器[J]. 武汉大学学报,2004,29(8):744-746.
[4] 宋杰,何友,唐小明.雷达视频回波信号的实时采集、显示与存储系统[J].数据采集与处理,2006,21(1):90294.
[5] 王明富,杨世洪,吴钦章.大面阵CCD图像实时显示系统的设计[J].光学精密工程,2010,18(9):2053-2059.
[6] 李武森,迟泽英,陈文建.高速DSP图像处理系统中的乒乓缓存结构研究[J].光电子技术与信息,2005,18(3):76279.
[7] Analog Devices,Inc.ADV7300A datasheet[EB/OL].http//www.analog.com.2005.
[8] 何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社,1995.