由于受到無線傳輸帶寬的限制, 無人機對地面目標偵察獲得的高分辨率視頻圖像必須經(jīng)過有效壓縮才能實時傳輸給地面接收處理系統(tǒng)?,F(xiàn)有的視頻壓縮標準有H.261、H. 262、H . 263 及MPEG-1、MPEG-2、MPEG-4 等。
其中MPEG-4 由于采用基于對象的壓縮編碼方法, 較之以往各標準的基于幀的壓縮編碼方法, 其時間和空間冗余更低, 在保持解碼質(zhì)量的同時提高了壓縮率。MPEG-4 還具有更好的交互性能及更強的抗誤碼性能 , 較之以往的壓縮標準, 更適合無線信道的傳輸。
視頻壓縮算法比較復(fù)雜, 加之無人機有效載荷的重量和體積限制, 難以實現(xiàn)對機載視頻圖像的實時壓縮編碼,通常只能低分辨率圖像實時壓縮。本文基于TI 公司最新推出的媒體處理器TMS320DM642 設(shè)計并實現(xiàn)了機載圖像實時壓縮編碼與處理系統(tǒng), 實現(xiàn)了對最高分辨率為D1分辨率機載視頻圖像的分辨率和壓縮比可調(diào)的MPEG-4實時壓縮處理及恒定碼流的輸出。
1 設(shè)計要求
整個壓縮處理系統(tǒng)完成對機載高分辨率攝像機輸出的PA L 制式模擬視頻信號進行實時采集、壓縮與傳輸。
為了便于地面接收處理系統(tǒng)實時地分析圖像, 須將無人機拍攝圖像的時間及空間位置等附加信息和壓縮圖像數(shù)據(jù)實時地打包。MPEG-4 為不等長壓縮編碼, 為便于無線傳輸, 需將MPEG-4 數(shù)據(jù)包流進行編幀, 形成256 KB/ s的恒定基帶碼流, 實時傳輸給無線信道子系統(tǒng)供調(diào)制發(fā)射。系統(tǒng)還需根據(jù)控制命令動態(tài)地改變圖像的分辨率及壓縮比。
2 系統(tǒng)硬件設(shè)計
2. 1 TMS320DM642 芯片的特點
DM642 屬于TMS320C64x 系列DSPs。Veloci T I 結(jié)構(gòu)使C6000 DSPs 在視頻和圖像處理中得到廣泛應(yīng)用。
CPU 的VLIW 結(jié)構(gòu)由多個并行運行的執(zhí)行單元組成, 這些單元在單個周期內(nèi)可執(zhí)行多種指令。并行是C6000 獲得高性能的關(guān)鍵。C64x 在C6000 的基礎(chǔ)上有一些重要的改進。除了有更高的時鐘頻率外, C64x 從以前的VelociTI 結(jié)構(gòu)擴展到Veloci TI. 2 結(jié)構(gòu), 包含了許多新的指令,增加了額外的數(shù)據(jù)通道, 寄存器的數(shù)量也增加了一倍。這些擴展使得CPU 可以在一個時鐘周期內(nèi)處理更多的數(shù)據(jù), 從而獲得更高的運算性能。
DM642 芯片集成了各種片內(nèi)外設(shè), 使得開發(fā)視頻和圖像領(lǐng)域的應(yīng)用更為方便。它帶有3 個可配置的視頻端口, 提供與視頻輸入、視頻輸出以及碼流輸入的無縫接口。
這些視頻端口支持許多格式的視頻輸入/ 輸出。利用DM642 開發(fā)視頻編碼器, 其視頻輸入部分只需要一塊視頻采集芯片即可, 如AD 公司的A DV7181, 無需外加邏輯控制電路和FIFO 緩存, 使硬件系統(tǒng)更為簡單和穩(wěn)定。
DM642 集成的64 位的無縫外部存儲器接口( EMIF) , 能夠?qū)崿F(xiàn)與外部同步和異步存儲器或外設(shè)的無縫連接。
DM642 的其他外設(shè)包括: 10 Mbps/ 100 Mbps 的以太網(wǎng)口( EMAC) 、多通道音頻串口(McASP) 、主機接口( HPI) 、多通道緩沖串口( McBSP) 以及PCI 接口等。
2. 2 系統(tǒng)硬件組成
機載圖像實時壓縮與處理系統(tǒng)以TMS320DM642 高性能通用DSP 芯片為核心, 由視頻輸入采集模塊、圖像壓縮處理模塊、外部存儲模塊及傳輸控制接口模塊組成。其硬件系統(tǒng)框圖如圖1 所示。
圖1 機載視頻圖像實時壓縮處理系統(tǒng)硬件框圖
圖像采集模塊對輸入模擬視頻信號進行同步捕獲、采集和視頻解碼。視頻解碼器輸出的數(shù)據(jù)格式為YUV4: 2:2。視頻解碼數(shù)據(jù)通過DMA 通道向DM642 VPORT 通道緩沖單元發(fā)送數(shù)據(jù), 當采集完一幀數(shù)據(jù)時產(chǎn)生DMA 中斷。圖像壓縮處理模塊根據(jù)接收到的控制命令將視頻解碼數(shù)據(jù)進行實時壓縮數(shù)理后緩存到存儲模塊中。存儲模塊采用32 MB 64 位的SDRAM, 實現(xiàn)程序和數(shù)據(jù)的存儲。
傳輸控制接口模塊將緩存在SDRAM 中的待傳輸碼流以256 KB/ s 的恒定速率8 位并行傳輸至輸出端口, 并接收地面發(fā)送的控制命令。該模塊由FIFO 芯片和CPLD 組成, FIFO 半空時向DSP 發(fā)送中斷信號。
2. 3 系統(tǒng)工作流程
系統(tǒng)由初始化模塊、采集模塊、壓縮模塊、打包編幀模塊、存儲模塊和傳輸模塊組成。其工作流程如圖2 所示。
圖2 機載圖像將壓縮處理子系統(tǒng)軟件工作流程
初始化模塊完成對程序從Flash 中導(dǎo)入內(nèi)存、DSP各端口及解碼芯片工作模式的設(shè)置及全局數(shù)據(jù)的申請及初始化, 并啟動對視頻端口狀態(tài)的查詢。當定時檢測到視頻端口緩沖區(qū)中有數(shù)據(jù)時, 將端口緩沖區(qū)中的原始數(shù)據(jù)根據(jù)接收的控制命令進行指定大小大抽取, 輸出YUV4: 2: 0格式的圖像數(shù)據(jù)緩存到外圍存儲模塊中。壓縮模塊將采集的圖像數(shù)據(jù)進行MPEG-4 壓縮。打包、編幀模塊將壓縮后的MPEG-4 編碼數(shù)據(jù)進行實時打包, 并對打包后的數(shù)據(jù)進行連續(xù)的實時編幀。當數(shù)據(jù)包緩沖區(qū)中無數(shù)據(jù)時,便在傳輸幀中插入空數(shù)據(jù)。編幀完的數(shù)據(jù)64 位并行緩存到外圍SDRAM 中。在FIFO 中斷服務(wù)程序中, 啟動一次DMA 傳輸, 將緩存在SDRAM 中的幀數(shù)據(jù)流傳輸?shù)紽IFO 中, 實現(xiàn)256 KB/ s 的恒定速率的數(shù)據(jù)傳輸。
需要注意的是原始圖像和壓縮碼流在DSP 中的存儲。視頻端口、編碼程序都要訪問原始圖像, 例如在某一時刻,編碼程序訪問當前幀圖像, 而視頻端口正在輸入下一幀圖像, 為了避免訪問沖突, 原始圖像在DSP 中采用三緩沖區(qū)進行管理。壓縮碼流由編碼程序?qū)懭耄?根據(jù)FIFO 狀態(tài)恒定碼率輸出, 所以采用環(huán)式存儲管理協(xié)調(diào)讀寫的步調(diào)。
2. 4 內(nèi)存分配
DM642 片內(nèi)只有256 KB 的存儲空間, 因此當前幀、參考幀和當前幀的重建幀都必須放至片外存儲器, 壓縮碼流若被主機讀取, 也放至片外。其他數(shù)據(jù)如程序代碼、全局變量、VLC碼表、各編碼模塊產(chǎn)生的中間數(shù)據(jù)等均可放至片內(nèi)。
由于CPU 訪問片外的速度通常要比訪問片內(nèi)慢幾十倍, 片外數(shù)據(jù)的傳輸通常成為程序運行時的瓶頸, 即使代碼效率很高, 流水線也會因為等待數(shù)據(jù)而被嚴重阻塞。解決這一問題的有效方法是用EDMA 傳送數(shù)據(jù)。程序是逐個宏塊進行編碼時, 在編碼當前宏塊的同時, EDMA 將下一個宏塊的數(shù)據(jù)、用到的參考幀數(shù)據(jù)由片外傳送至片內(nèi);當前宏塊做完成運動補償后, EDMA 將重建后的宏塊由片內(nèi)傳送至片外。這樣CPU 只對片內(nèi)數(shù)據(jù)進行操作, 使得流水線可以順利進行, 而壓縮碼流按逐個碼字有時間間隔地寫入, 可由CPU 直接寫至片外。
3 基于DM642 的軟件優(yōu)化技術(shù)
為了提高代碼的執(zhí)行效率, 必須充分利用C64x CPU的VL IW 和流水線結(jié)構(gòu)對其進行優(yōu)化, 使程序無沖突地并行執(zhí)行[ 6] 。MPEG 4 編碼程序中包含大量的循環(huán)體, 例如計算量化、DCT、半像素插值、運動補償和構(gòu)建重建幀等。這些循環(huán)體代碼并不復(fù)雜, 且執(zhí)行次數(shù)頻繁, 占據(jù)了編碼的絕大部分時間, 因此循環(huán)體的優(yōu)化是重點。本文所采取的代碼優(yōu)化為C 語言優(yōu)化和編寫線性匯編兩個步驟,主要從消除數(shù)據(jù)相關(guān)性、數(shù)據(jù)打包和循環(huán)體的軟件流水3個方面進行優(yōu)化。
3. 1 針對C語言的優(yōu)化
C 代碼的優(yōu)化主要依靠開發(fā)環(huán)境CCS 的編譯器完成, 編程者需要合理選擇編譯選項, 并利用特定的關(guān)鍵字和指令向編譯器提供優(yōu)化信息 。例如關(guān)鍵字rest rict 用來消除數(shù)據(jù)間的相關(guān)性, 編譯器從而可以安排語句的并行執(zhí)行 ; 內(nèi)聯(lián)函數(shù)_ nasser t 有助于數(shù)據(jù)的打包處理; 宏指令# pragma MU ST _IT ERAT E 告訴編譯器有關(guān)循環(huán)迭代次數(shù)的信息, 編碼器會根據(jù)這一信息進行軟件流水。
3. 2 用線性匯編改寫關(guān)鍵代碼
線性匯編是TMS320C6000 特有的一種編程語言, 介于高級語言和匯編語言之間。它可以指定指令用到的寄存器和功能單元, 更易于對數(shù)據(jù)的打包處理。
線性匯編代碼的并行處理和軟件流水由匯編優(yōu)化器完成, 編程者需要熟悉C64x DSP 的CPU 結(jié)構(gòu)和指令集, 認真設(shè)計代碼并充分利用編譯器的反饋信息合理修改代碼, 才能寫出高質(zhì)量的線性匯編。本設(shè)計中程序主框架采用C 語言編寫, 其它各關(guān)鍵部分的代碼采用線性匯編實現(xiàn)。
4 結(jié)果分析
本壓縮系統(tǒng)在對標準Foreman 序列、地面人群及道路車輛等視頻序列進行壓縮測試。對D1 分辨率視頻序列能夠?qū)崿F(xiàn)25 幀/ 秒實時的壓縮編碼, 壓縮碼率為1. 8 Mb/ s, 解碼圖像視覺效果良好, 經(jīng)編幀后輸出250KB/ s 恒定基帶碼流。在圖像傳輸中沒有出現(xiàn)數(shù)據(jù)擁塞和丟失現(xiàn)象。有效滿足了高清晰機載圖像幀察的目的。
5 結(jié)束語
本文以TMS320DM642 芯片為中心, 詳細介紹了機載圖像實時壓縮系統(tǒng)的設(shè)計及MPEG 4 實時編碼器的優(yōu)化。系統(tǒng)經(jīng)測試實現(xiàn)了高分辨率圖像的實時壓縮和實時編幀傳輸, 滿足了系統(tǒng)設(shè)計需求。本文采用MPEG 4Simlpe Profile 算法, 在算法方面還有一定的研究空間。