文獻標識碼: A
文章編號: 0258-7998(2012)01-0034-04
在航空攝影測量領(lǐng)域,常采用高分辨率CCD相機在高空對物體進行拍攝。目前的CCD數(shù)據(jù)處理系統(tǒng)首先在CCD相機的控制下,輸出海量連續(xù)的CCD數(shù)據(jù)流。然后通過構(gòu)造緩存單元結(jié)構(gòu),緩存接收的CCD圖像數(shù)據(jù)。由于圖像信息量太大,無法實時處理,需要在飛行過程中將所有圖像實時記錄在高速硬盤上,最終把緩存的數(shù)據(jù)流輸入至實時記錄系統(tǒng)實現(xiàn)高分辨率CCD數(shù)據(jù)的記錄。
針對飛行過程中的一些特殊情況,需根據(jù)接收的GPS信息(飛行高度、速度等)實時調(diào)整CCD幀頻[1]。要實現(xiàn)可變幀率的CCD數(shù)據(jù)處理,對整個CCD數(shù)據(jù)實時處理能力提出了更高的要求。同時,隨著CCD像元數(shù)的激增,每幀CCD圖像的像素分辨率超大,如何實現(xiàn)基于高分辨率CCD圖像感興趣區(qū)域的智能實時觀測是目前航測領(lǐng)域的研究重點。針對可變幀率和智能觀測需求,提出了一種基于感興趣區(qū)域的可變頻CCD實時處理系統(tǒng)。
系統(tǒng)根據(jù)可變頻要求,一方面通過在FPGA內(nèi)部設(shè)計UART控制器,觸發(fā)CCD相機外同步觸發(fā)信號,實時計算出隨GPS信息不斷變化的CCD幀頻信息;另一方面,提出了一種數(shù)據(jù)提取算法,該算法通過對乒乓緩存的CCD圖像數(shù)據(jù)進行可變窗口定位,實現(xiàn)了感興趣區(qū)域的智能觀察和存儲;最后,通過視頻編碼實現(xiàn)感興趣區(qū)域的高清晰視頻實時顯示。整個系統(tǒng)已在FPGA內(nèi)實現(xiàn)并通過驗證,可廣泛適用于任何分辨率大小CCD的智能實時處理。
1 系統(tǒng)設(shè)計方案
該可變頻CCD智能實時處理系統(tǒng)由CCD控制模塊、數(shù)據(jù)實時處理模塊和實時顯示模塊組成。CCD控制模塊:在相機外同步工作模式下,通過在FPGA內(nèi)設(shè)計UART控制器,接收外部發(fā)來的GPS信息,實現(xiàn)CCD相機幀頻的實時調(diào)整。針對數(shù)據(jù)實時處理模塊,提出了一種數(shù)據(jù)提取算法:首先提取出原始CCD圖像數(shù)據(jù)的感興趣區(qū)域,該區(qū)域符合SMPTE(1080i)有效的高清晰視頻數(shù)據(jù)分辨率大小,并通過可變窗口定位實現(xiàn)區(qū)域的智能實時調(diào)整;然后通過乒乓緩存結(jié)構(gòu)的設(shè)計,實現(xiàn)感興趣區(qū)域的實時存儲;最后由實時顯示模塊,將緩存的感興趣區(qū)域數(shù)據(jù)打包為高清晰視頻格式,通過視頻編碼實現(xiàn)感興趣區(qū)域的高清晰視頻實時顯示。圖1給出了整個系統(tǒng)的實現(xiàn)方案。
2 CCD控制模塊的設(shè)計
2.1 可變頻幀率的設(shè)計與實現(xiàn)
在飛行過程中,首先需接收GPS導(dǎo)航信息[3](主要包括飛行器經(jīng)緯度位置、時間(時/分/秒)以及海拔高度、地速等飛行參數(shù),數(shù)據(jù)刷新率為10 Hz/s),根據(jù)信息計算得到當前相機幀頻。由于數(shù)據(jù)刷新率較高,接收數(shù)據(jù)的準確性是保證后續(xù)工作精度穩(wěn)定的前提條件。
傳統(tǒng)的處理方式是[4]:通過串口配合相關(guān)電路,接收GPS信息,并計算得到隨飛行高度和速度實時改變的相機幀頻。UART(Universal Asynchronous Receiver Transmitter)作為計算機或外圍設(shè)備的串行通信接口,通常在單片機中使用。本設(shè)計中改用FPGA完成所有數(shù)據(jù)處理,并設(shè)計了基于PFGA的UART控制器。
UART控制器包含以下組件:時鐘發(fā)生器、輸入和輸出移位寄存器、發(fā)送/接收控制單元和FIFO緩沖存儲器。時鐘發(fā)生器通常是比特率允許在一個位周期中采樣的倍數(shù)。輸入和輸出移位寄存器是串行和并行之間形式轉(zhuǎn)換的基本方法。發(fā)送或接收控制單元完成數(shù)據(jù)的傳輸和接收器下控制讀或?qū)懣刂七壿?。FIFO緩沖存儲器實現(xiàn)對發(fā)送/接收數(shù)據(jù)的高速緩存。圖2給出了基于FPGA的UART控制器設(shè)計,可見,整個UART設(shè)計充分利用FPGA的內(nèi)部存儲和時序邏輯資源,減小了系統(tǒng)的面積, 改變了傳統(tǒng)通過單片機處理器的控制,大大降低了系統(tǒng)功耗,提高了設(shè)計的穩(wěn)定性。
通過基于FPGA的UART控制器設(shè)計,GPS信息可從UART正確接收,根據(jù)GPS相應(yīng)的飛行參數(shù),可計算得到可變幀率,并輸入至FPGA。本系統(tǒng)每幀CCD的拍攝時間間隔表達式如下:
式中,v是飛行速度(km/h),H是飛行高度,a是拍攝視角, qx是相鄰的圖片重疊比例??梢?,通過接收GPS的飛行速度和飛行高度信息和實際拍攝要求,即可計算出拍攝時間間隔。根據(jù)時間和頻率之間的關(guān)系,得到CCD當前幀速率。
FPGA在內(nèi)部時鐘的控制下,針對可變幀頻率,通過FPGA的時序邏輯控制,產(chǎn)生外同步控制脈沖信號。這樣,在外同步脈沖的觸發(fā)下,相機開始積分,積分完畢后,在行、場、消隱同步信號的控制下,讀出CCD相機數(shù)據(jù)。
2.2 基于高速Cameralink接口的CCD數(shù)據(jù)傳輸
為提高海量CCD連續(xù)數(shù)據(jù)流的傳輸速率,采用基于Cameralink接口技術(shù)實現(xiàn)高速CCD數(shù)據(jù)傳輸。Cameralink接口技術(shù)是基于Channel Link技術(shù)發(fā)展而來的。Channel Link是基于LVDS技術(shù)發(fā)展而來的,它是一種用來傳輸視頻數(shù)據(jù)的新技術(shù)。Channel Link使用一個并轉(zhuǎn)串驅(qū)動器和一個串轉(zhuǎn)并接收器傳輸數(shù)據(jù),其最高速率可達2.38 GHz/s,非常適合高分辨率CCD數(shù)據(jù)實時處理以及其他高速控制信號的傳輸[5]。
高分辨率CCD數(shù)字相機通過Camera Link接口的連接,實現(xiàn)多位高速并行的數(shù)據(jù)線轉(zhuǎn)換為串行數(shù)據(jù)線輸出。同時,通過接收芯片DS90CR288A實現(xiàn)對CCD相機輸出的串行數(shù)據(jù)還原為原始的并行數(shù)據(jù)輸出,并提供了相應(yīng)的CCD相機通信信號和有效控制信號。對DS90CR288A解碼輸出的CCD相機數(shù)據(jù)輸入至FPGA,實現(xiàn)實時處理。
3 實時數(shù)據(jù)處理模塊
3.1 感興趣區(qū)域提取算法
實時處理模塊主要對輸入至FPGA的CCD圖像數(shù)據(jù)進行處理。CCD相機數(shù)據(jù)的時鐘輸出速率為2 MHz×40 MHz,以兩路并行格式輸出,兩路數(shù)據(jù)像元分辨率大小為2 048×1 024,數(shù)據(jù)分辨率為10 bit。為有利于數(shù)據(jù)進一步處理,在FPGA內(nèi)構(gòu)造FIFO實現(xiàn)對兩路并行數(shù)據(jù)的實時合成。合成后的數(shù)據(jù)分辨率為10 bit,頻率為80 MHz,像元分辨率大小為2 048×2 048。
在實際觀測中,需要實時提取感興趣區(qū)域。設(shè)原始圖像分辨率大小為M×N,感興趣區(qū)域分辨率大小為m×n。由于CCD原始數(shù)據(jù)分辨率遠大于感興趣區(qū)域數(shù)據(jù)分辨率,提出了一種感興趣區(qū)域提取算法。算法設(shè)計思路如下:
(1)通過UART接收當前波門位置信息(Rstart,Rwidth,Cstart,Cwidth),同時波門位置信息實時寫入FPGA。其中,Rstart、Rwidth分別表示在像素時鐘的作用下,原始圖像對應(yīng)的行起始地址和行寬;Cstart、Cwidth分別表示在像素時鐘的作用下,列起始地址和列寬。
(2)在FPGA中構(gòu)造4個專用寄存器分別用來動態(tài)存儲上述波門位置信息(Rstart,Rwidth,Cstart,Cwidth)。
(3)在像素時鐘的控制下,在FPGA內(nèi)構(gòu)造兩個計數(shù)器分別對每行、每列像素個數(shù)進行計數(shù)。Pi、Qj分別表示當前行、列計數(shù)值。
(4)構(gòu)造波門判別函數(shù)模型,如判別函數(shù)為真,即當前計數(shù)值在波門信息范圍內(nèi)時,對于圖像數(shù)據(jù)予以保留,否則予以舍棄。判別函數(shù)如式(2)所示。
當一幀圖像數(shù)據(jù)接收完畢時,即完成了對當前幀圖像的感興趣區(qū)域數(shù)據(jù)提取。當下一幀數(shù)據(jù)輸入且波門位置改變時,則返回(1),重復(fù)上述過程即可。
3.2 高速緩存的設(shè)計
在實時抽取后,保留下的數(shù)據(jù)分辨率大小與高清晰模擬視頻有效數(shù)據(jù)分辨率相同。但兩者在速率和幀頻上都不相等(相機數(shù)據(jù)速率為80 MHz,幀頻為變量,高清晰視頻數(shù)據(jù)格式選擇速率為74.25 MHz,幀頻為30幀/s,每幀分為奇場和偶場的格式),因此需要為變頻的CCD圖像感興趣區(qū)域和恒速的視頻編碼之間構(gòu)造一個適應(yīng)通道——高速緩存結(jié)構(gòu)。常用的緩存結(jié)構(gòu)主要有以下三種形式[6]:
(1)FIFO結(jié)構(gòu):能夠達到很高的傳輸速度和效率,且由于省去了地址線而有利于PCB 板布線。缺點是只能順序讀寫數(shù)據(jù),因而顯得比較呆板。
(2)雙口RAM結(jié)構(gòu): 具有兩套獨立的數(shù)據(jù)、地址和控制總線,能達到很高的傳輸速度,并且具有隨機存取的優(yōu)點。缺點是大容量的高速雙口RAM 硬件復(fù)雜度高,價格昂貴。
(3)SRAM乒乓緩存結(jié)構(gòu):可隨機存取,同時較大容量的高速SRAM容易得到且價格適中。缺點是切換控制電路比較復(fù)雜。
綜合考慮以上三種高速緩存方案,在本設(shè)計單元中,選用SRAM乒乓緩存方案。具體設(shè)計流程如下:在第一個緩沖周期,將輸入數(shù)據(jù)流緩存到第一片SRAM中;在第二個緩沖周期,通過控制信號的切換,將輸入的數(shù)據(jù)流緩存到第二片SRAM中,并將第一片SRAM緩存的第一個周期的數(shù)據(jù)通過控制送入下一處理單元(視頻編碼單元);在第三個緩沖周期,通過控制權(quán)的再次切換,將輸入的數(shù)據(jù)流緩存到第一片SRAM,并將第二片SRAM緩存的第二個周期的數(shù)據(jù)通過控制權(quán)的切換,送到下一處理單元。如此循環(huán),周而復(fù)始,很好地完成對數(shù)據(jù)流的無縫緩沖和處理。
4 實時顯示模塊
4.1 基于FPGA的高清晰視頻數(shù)據(jù)打包
由于從數(shù)據(jù)實時處理單元SRAM 讀出的是純粹圖像數(shù)據(jù), 因此首先要將讀出數(shù)據(jù)打包為符合SMPTE274 標準的1080i 高清晰視頻格式,最終實現(xiàn)高清晰的模擬視頻顯示。
首先簡單介紹符合SMPTE274標準的1080i高清晰模擬視頻格式[7]。圖3給出了高清晰視頻數(shù)據(jù)包格式。其中,每個EAV 和SAV 定時基準信號由4 個字的序列組成,格式如下:FF、00、FF、XY(數(shù)值以16進制表示,F(xiàn)F、00留供定時基準信號用) 。頭三個是固定前綴,第四個字包含定義第二場標識、場消隱狀態(tài)和行消隱狀態(tài)的信息。每行有效數(shù)據(jù)像素為1 920個像素,行消隱期為272個像素。
對數(shù)據(jù)進行打包實際就是用FPGA產(chǎn)生包頭信息、消隱期的填充數(shù)據(jù)以及Y分量的數(shù)據(jù)和Cb、Cr分量的數(shù)據(jù)復(fù)合,再進一步將視頻數(shù)據(jù)和包頭信息、填充數(shù)據(jù)合并,最終產(chǎn)生符合上述定義格式標準的數(shù)據(jù)包。在具體實現(xiàn)過程中,F(xiàn)PGA要設(shè)計兩個計數(shù)器,一個用來進行行計數(shù),另一個用來對每行的像素進行計數(shù)。根據(jù)兩個計數(shù)器的值,在相應(yīng)的地方寫上包頭信息,在消隱期填上填充數(shù)據(jù),而在有效行的有效像素期,F(xiàn)PGA 的輸出來自SRAM 輸出的原始相機數(shù)據(jù)。這樣,在FPGA 里的視頻數(shù)據(jù)復(fù)合成模塊,用74.25 MHz 的時鐘將Y分量和Cb、Cr分量按格式要求的4:2:2格式復(fù)合成高清晰視頻數(shù)據(jù)流,如圖3所示。
4.2 基于FPGA的視頻編碼芯片控制和實現(xiàn)
在完成對數(shù)據(jù)的打包后,需要對視頻芯片內(nèi)部寄存器進行配置并最終轉(zhuǎn)換為模擬視頻顯示。ADV7300A支持I2C總線通信協(xié)議。傳統(tǒng)的工作方式通常使用單片機實現(xiàn)對I2C總線接口的控制。然而,為減少設(shè)計資源并提高FPGA的使用效率,設(shè)計了基于FPGA的I2C總線控制器。
I2C總線控制器主要包括以下幾個單元:數(shù)據(jù)緩存單元、移位寄存器單元、I2C總線傳輸控制單元和分頻單元。其中,數(shù)據(jù)緩存單元實現(xiàn)對如初始化ADV7300的數(shù)據(jù)進行緩存,這里緩存單元即通過FPGA內(nèi)部的RAM存儲即可。
移位寄存器單元實現(xiàn)數(shù)據(jù)的并-串轉(zhuǎn)換。由于FPGA內(nèi)部的緩存單元的數(shù)據(jù)位寬為8 bit,而I2C總線上傳輸?shù)奈粚挒? bit,所以要進行并串轉(zhuǎn)換,且需滿足數(shù)據(jù)高位在前,低位在后。通過構(gòu)造移位寄存器,可在時序控制邏輯模塊的控制下根據(jù)讀寫使能信號對數(shù)據(jù)進行正確處理。
I2C總線傳輸控制單元是設(shè)計的核心,根據(jù)I2C總線傳輸協(xié)議,整個傳輸過程可以分為空閑、開始、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、停止5個狀態(tài)。當I2C總線處于空閑狀態(tài)且驅(qū)動信號為高電平時開始運作I2C模塊, 并根據(jù)讀/寫判斷進入下一狀態(tài),即進行傳輸數(shù)據(jù)或接收數(shù)據(jù)。當數(shù)據(jù)傳輸完畢, 跳入停止狀態(tài)。因此,在FPGA內(nèi)設(shè)計有限狀態(tài)機的結(jié)構(gòu)實現(xiàn)對I2C總線的傳輸時序控制,其狀態(tài)轉(zhuǎn)移如圖4所示。
分頻單元則根據(jù)I2C總線傳輸速率,通過對FPGA的全局時鐘進行分頻,以滿足I2C總線的傳輸速率要求。
通過在FPGA內(nèi)實現(xiàn)基于I2C總線控制器的設(shè)計,很好地完成了FPGA對視頻編碼芯片ADV7300內(nèi)部寄存器的配置和讀寫,最終實現(xiàn)高清晰模擬視頻顯示。目前,該設(shè)計已通過驗證,并成功應(yīng)用于某航空攝影測量工程,具有很高的工程應(yīng)用價值。
參考文獻
[1] 陳蘇婷,吳欽章,楊世洪.航空攝影測量用高清晰視頻編碼顯示系統(tǒng)設(shè)計[J].半導(dǎo)體光電,2007,28(4):596-600.
[2] 陳蘇婷,楊世洪.基于IB-IWT實時圖像壓縮的FPGA設(shè)計與實現(xiàn)[J].信息與控制,2009,38(1):145-149.
[3] 高文武,賀賽先.基于GPS的CCD相機同步控制器[J]. 武漢大學(xué)學(xué)報,2004,29(8):744-746.
[4] 宋杰,何友,唐小明.雷達視頻回波信號的實時采集、顯示與存儲系統(tǒng)[J].數(shù)據(jù)采集與處理,2006,21(1):90294.
[5] 王明富,楊世洪,吳欽章.大面陣CCD圖像實時顯示系統(tǒng)的設(shè)計[J].光學(xué)精密工程,2010,18(9):2053-2059.
[6] 李武森,遲澤英,陳文建.高速DSP圖像處理系統(tǒng)中的乒乓緩存結(jié)構(gòu)研究[J].光電子技術(shù)與信息,2005,18(3):76279.
[7] Analog Devices,Inc.ADV7300A datasheet[EB/OL].http//www.analog.com.2005.
[8] 何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.