机载电荷耦合相机图像数据的光纤传输和整理方法
技术领域
本发明涉及一种遥感相机图像数据的光纤传输方法,特别是一种简单通用的用于电荷耦合(CCD)相机遥感探测***的光纤传输和整理方法。
背景技术
随着计算机技术的飞速发展,遥感探测***开始采用计算机进行控制。但是,遥感探测器前置放大***极易受到计算机内部的高频数字信号的干扰,影响CCD相机图像的信噪比。常用的解决方法是利用光电耦合将前置放大***与计算机隔离。
光纤是利用光进行通讯的一项新兴技术。随着光纤传输技术的日益成熟和平民化,遥感成像***中越来越多地使用光纤作为首选的传输媒介。利用光纤的天然特性,可以避免计算机内部的高频数字信号通过通讯链路耦合入敏感的探测器电路。不仅如此,光纤还可以提供极大的通讯带宽和速度,也使通讯和传输的距离大大加长。
发明内容
本发明的目的在于提供一种简单通用的用于CCD相机遥感探测***的光纤传输方法。CCD工作时,首先由复位脉冲将移位寄存输出端的剩余电荷清空,然后在曝光及转移脉冲控制下,CCD像敏单元转换光信号,并行转移到移位寄存器中,最后,转移信号控制移位寄存器中的电荷信号串行输出,经A/D转换后,将模拟CCD图像数据转化为数字视频信号。鉴于CCD的数字图像数据是一帧一帧的,用光纤来传输CCD图像数据,关键在于在发送端将一帧一帧的图像数据打包,并在接收端正确地恢复一帧一帧的图像数据,最后将图像数据进行整理,并正确无误地传输给计算机PCI总线进行存储和处理。
本发明的技术方案如下:
根据本发明的一种用于遥感探测***的CCD成像光纤传输电路,包括串并/并串转换电路、8B/10B编解码和校验电路、逻辑可编程器件、成帧器(由逻辑可编程器件编程实现)、数据缓存器件、光纤收发模块等。其中串并/并串转换是点对点光纤传输必须进行的步骤,8B/10B编码使得在光纤传输出错时能进行检测和恢复,逻辑可编程器件用于产生帧同步、字同步信号以及其他时序控制信号,同时,为了便于后续的数据处理,需要由逻辑可编程器件在每帧数据中加上同步头和序列号。成帧器用于将CCD图像数据打包后再恢复成一帧一帧的数据,数据缓存器件用于缓存CCD图像数据并输出给光纤收发电路,光纤收发模块用于进行电光/光电转换组成光纤链路。
根据本发明的一种机载CCD相机图像数据的光纤传输和整理方法的步骤如下:其中,
图像数据的光纤的发送的步骤主要为:
1、将CCD图像进行A/D转换,变成数字图像,并缓存在缓存器件中;
2、由逻辑可编程器件对每帧数据添加同步头和序列号;
3、如果A/D转换后位数据数为16位,则将其分为高8位和低8位,并依次输出给光纤收发电路;如果不够16位,则以0补充成16位;如果大于16位(比较少见),则将超出16位的位数也变换成8位输出,不足8位以0补充成8位,高位在前,低位在后;
4、将8位并行输入数据(D0-D7)进行8B/10B编码,并同时产生控制字,为成帧做准备;
5、再转换为高速差分串行位流,然后送光纤发送模块,进行电光转换,通过光纤传输;
图像数据的光纤接收的主要步骤为:
1、由光纤接收模块进行光电转换,转换成PECL高速差分串行位流;
2、将高速差分串行位流进行串并转换和10B/8B解码,得到8位并行数据流;
3、通过控制字判断收到的并行数据流是CCD图像数据还是控制字符,并恢复图像数据为一帧数据;
4、通过8B/10B编码校验,进行出错控制;
5、将8位并行数据流送入FPGA合并成32位,以充分利用PCI总线;
6、把合并后的32位数据流送入缓存器件,为计算机存储做好准备;
7、使用逻辑可编程器件产生PCI高速数据采集卡所需要的时钟和帧同步信号,将图像数据正确采集到计算机存储***。
本发明的优点是简单通用,适用于线阵和面阵CCD图像数据的光纤传输和计算机采集。
附图说明
图1为本发明中的光纤发送端数据格式示意图。
图2为本发明中的光纤发送端硬件处理框图。
图3为本发明中的CPLD程序流程图。
图4为本发明中的光纤接收端硬件处理框图。
图5为本发明中的整个传输成帧过程的状态转移图。
具体实施方式
下面根据图1-图5给出本发明一个较好的实施例,并以长线列三线阵CCD(每个线列包含10200个像元,包含红、绿、蓝三条线列)为例作详细说明。
CCD模拟图像数据经过AD转换(16位量化)后,变为一帧一帧的数字图像数据,再由可编程器件加上同步头和序列号。同步头为每帧图像数据开始的标志,用有规律的高低电平序列0101010110101010(0X55AA)表示;而序列号则可以用来检验漏帧,用16bits无符号整数表示,变化范围为0~65535,从0递加到65535后循环。
图1中一路AD转换器件1对图像信号进行A/D转换后,16位的CCD图像数据转换为8位并行数据存入双口RAM2,并由可编程器件3对每帧数据产生同步头和序列号,格式为0X55;0XAA;序列号H;序列号L;像素H;像素L(如图1所示),再进入光纤链路4。
8位并行数据进入光纤链路4前的整理的硬件处理电路框图如图2(共有相同三路CCD信号处理电路,仅画出一路)所示。用可编程器件3对三路信号进行控制,产生所需要的时序控制信号。图2中虚框所示的硬件编码整理单元4’用分立元件或者集成芯片CY7B923或者其它芯片来实现,锁相环43’产生经由编码器42’8B/10B编码后数据流所需的10倍频高速时钟。带有同步头和序列号的8位并行数据流进入输入寄存器41’,经编码器42’所进行的8B/10B编码具有使光纤传输电流平衡和便于检错的双重作用,同时根据编码控制信号SCD和出错标记信号SVS将数据编码为特定的填充控制字符或者有效数据。在时钟信号的上升沿,SCD信号如果为高电平,8位并行数据编码为特定的控制字,如果为低电平,8位并行输入数据编码为有效数据;同时,如果SVS信号为高电平,由SCD状态和8位并行数据决定编码方式,若为低电平,表明发生错误,8位并行输入数据被忽略,编码为出错控制字发送到接收端。光纤发送模块5的功能是将高速串行数据流PECL转换为光信号,并经光纤传输到图4所示的光电转换模块6。
在光纤发送端,可编程逻辑器件(CPLD)程序100的流程如图3所示。ENA信号控制输入端的数据编码输出或者***空字符编码(1,***空字符;0,编码输出),OEL控制双口RAM的输出(1,不能输出;0,输出);RWL为双口RAM读写控制信号(1,读有效;0,写有效);Counter为16位计数器,表示每帧的像元数。
上述程序100启动后,执行步骤1000,CPLD程序100初始化,双口RAM的地址为0,计数=1,接着执行步骤1001,判断计数=1吗?若计数不等1,执行步骤1003;若计数=1,则执行步骤1002,读OEL=1,EVA=1,RWL=0,写0X55到双口RAM,双口RAM地址加1,计数次数加1,执行步骤1003,判断计数=2吗?若不等于2,执行步骤1005;若等于2,则执行步骤1004,读OEL=1,ENA=1,RWL=0,写0X55到双口RAM,双口RAM地址加1,计数次数加1,执行步骤1005,判断计数次数是否等于3,若不为3,执行步骤1007;若等于3,则执行步骤1006,当状态OEL=1,ENA=1,RWL=0,便对高8位计数,送双口RAM,双口RAM地址加1,计数次数加1,执行步骤1007,判断计数次数是否等于4,若不等于4,执行步骤1009;若等于4,则执行步骤1008,当状态DEL=1,ENA=1,RWL=0,计数低8位送到双口RAM,双口RAM地址清零,执行步骤1009;判断是否5≤计数次数≤20408?若为否,执行步骤10011;若为真,则执行步骤10010,当状态OEL=0,ENA=0,RWC=1,AD数据输出到光纤,双口RAM地址加1,计数次数加1,执行步骤10011,判断Counter=others?若为否,执行步骤10013,程序结束;若为真,则执行步骤10012,当状态DEL=1,ENA=1,双口RAM地址清零,计数清零,执行步骤10013,程序结束。
光纤接收端数据处理的框图见图4。光信号经光电转换模块5后成为高速差分串行位流,再串并转换和10B/8B解码为8位并行数据。如图4中的虚框所示,数据硬件整理解码单元7可以通过分立元件或者集成芯片(如CY7B933)来实现。8位数据通过两种方式进入现场可编程阵列(FPGA)9,一种是直接和FPGA相连,另外一种是先经同步先进先出器件(FIFO)8(可以用FPGA的内部FIFO或者外接独立的FIFO实现)将控制字滤掉,有效数据存到FIF08。第一种实现方式的时序控制略微复杂。经FPGA9经8位数据整理成32位的数据流(也可以加上同步头和序列号后再整理以便检验漏帧),再发送给FPGA9的内部FIFO(实现片上***,减少布线,也可以用外部FIFO),将数据缓存后变为连续的数据流输出到计算机10的PCI总线。FPGA 9还负责产生FIFO的行读使能信号和字时钟信号、PCI数据采集卡101的行同步信号以及外部触发字允许读时钟信号,将数据读出FIFO的同时写入PCI总线,通过DMA方式将数据存入SCSI硬盘102(这里不详述)。
如图5所示FPGA用同步有限状态机实现时序控制和数据转移,一共有14个状态。附表1说明数据整理状态转换的过程。
表1数据整理状态转换
时钟序列 |
状态机状态 |
R通道输入数据(8bit) |
G通道输入数据(8bit) |
B通道输入数据(8bit) | 输出数据(32bit) | 备注 |
0 |
S0 |
× |
× |
× |
×××× |
初始化状态 |
1 |
S1 |
× |
× |
× |
×××× |
成帧状态 |
2 |
S2 |
A0 |
B0 |
C0 |
×××× |
×表示输出无效 |
3 |
S3 |
A1 |
B1 |
C1 |
×××× | |
4 |
S4 |
A2 |
B2 |
C2 |
×××× | |
5 |
S5 |
A3 |
B3 |
C3 |
×××× | |
6 |
S6 |
A4 |
B4 |
C4 |
A0A1A2A3 | |
7 |
S7 |
A5 |
B5 |
C5 |
B0B1B2B3 | |
8 |
S8 |
A6 |
B6 |
C6 |
C0C1C2C3 | |
9 | S9 | A3 | B3 | C3 | ×××× |
将A4A5A6分别寄存到A0A1A2寄存器中,B4B5B6C4C5C6到B0B1B2C0C1C2寄存器中,然后转6,在6和9之间重复直到一行结束 |
10 | S10 | × | × | × | A0A1A2A3 |
由于一行结束标记为行计数器满,所以每行结尾时将最后的三组数据送出,否则丢失最后的数据 |
11 |
S11 |
× |
× |
× |
B0B1B2B3 | |
12 |
S12 |
× |
× |
× |
C0C1C2C3 |
一行结束,返回1 |
13 |
S13 | | | | |
等待状态 |
还要加上状态S0和S1,S0进行初始化工作,对FIFO和寄存器、计数器初始化;在***上电后,首先进入S0状态,接着进入S1状态。S1状态寻找一行图像数据的同步头,开始一行图像数据记录和整理。S13状态为便于调试加入的等待状态。
其中用到3个计数器:ReframeCounter,TotalFrameCounter,TotalPixelCounter。ReframeCounter为成帧过程(S1状态)中的计数器。TotalFrameCounter为接收到的每行图像数据加上序列号,计数范围0~65535,16bit,循环计数。TotalPixelCounter为接收到的图像数据行计数,范围0~20404,15bit,满一行后清零。
状态机状态转移受多个输入信号和当前状态的控制。输入控制信号包括出错指示信号RVS、接收准备好信号RDY、控制字指示符SCD。其中出错指示优先级最高,如果出错,马上丢弃此行数据,进入S1状态重新成帧。状态转移还受计数器ReframeCounter和TotalFrameCounter控制,前者决定是否成帧成功,开始新的一行;后者决定一行是否结束;状态机输出信号包括数据输出,FIFO写允许信号,成帧控制信号RF。