黃兆靖,劉 宇,田增山,王 寧
(重慶郵電大學(xué)光纖通信技術(shù)重點實驗室,重慶 400065)
以太網(wǎng)數(shù)字影像遙測編碼器的設(shè)計與實現(xiàn)
黃兆靖,劉 宇,田增山,王 寧
(重慶郵電大學(xué)光纖通信技術(shù)重點實驗室,重慶 400065)
以太網(wǎng)數(shù)字影像遙測編碼器在航天航空試驗中具有重要的作用。針對編碼器的軟件存在幀結(jié)構(gòu)多樣性、實時性高、連續(xù)數(shù)據(jù)等特點,選用OMAP3530高端ARM微控制器和FPGA組合硬件平臺,以Linux作為操作系統(tǒng),進(jìn)行編碼器系統(tǒng)架構(gòu)設(shè)計、軟件設(shè)計和軟件實現(xiàn)。通過實驗室和用戶現(xiàn)場測試驗證了軟件設(shè)計的正確性、完整性和可靠性。
遙測編碼器;微控制器;IRIG-106遙測;PCM幀格式;線程
遙測技術(shù)是一種將對象參量的近距離測量值傳輸?shù)竭h(yuǎn)距離測量站以實現(xiàn)遠(yuǎn)距離測量的技術(shù),該技術(shù)主要用于集中檢測分散的或難以接近的被測對象,如被測對象距離遙遠(yuǎn)、所處環(huán)境惡劣、或處于高速運動狀態(tài)。遙測技術(shù)廣泛應(yīng)用于航天領(lǐng)域[1],這種遠(yuǎn)程測量的能力是地面測量站獲取遠(yuǎn)距離環(huán)境參數(shù)的重要部分。中國現(xiàn)行的遙測標(biāo)準(zhǔn)GJB21.2A是參考國際通用遙測標(biāo)準(zhǔn)IRIG-106制定的,其中使用的遙測碼(Pulse Code Modulation,PCM)具有抗干擾能力強、靈活性強、精度高、動態(tài)范圍大等特點。在傳統(tǒng)設(shè)計中,PCM遙測編碼器常通過硬件電路實現(xiàn),使得設(shè)計一旦完成,幀格式、輸出格式及波特率都很難改變。同時,傳統(tǒng)設(shè)計的局限性也在于近距離測量值的獲取往往是通過傳感器實現(xiàn)的[1-2]。
針對現(xiàn)有遙測編碼器存在的問題,本文設(shè)計了一種基于Linux操作系統(tǒng)下的以太網(wǎng)數(shù)字影像遙測編碼器系統(tǒng)。通過UDP(User Datagram Protocol)實現(xiàn)多路影像數(shù)據(jù)傳輸;采用高端的微控制器ARM(Advanced RISC Machines)和FPGA(Field-Programmable Gate Array)的架構(gòu)實現(xiàn)PCM幀的可編程;通過上位機(jī)對PCM幀格式進(jìn)行設(shè)置,遙測輸出速率0~20 Mbit/s逐比特可調(diào),NRZ-L(不歸零電平碼)、BIΦ-L(曼徹斯特碼)、RNRZ-L(隨機(jī)不歸零碼)三種碼型輸出可選。
本系統(tǒng)是應(yīng)用于某型號的飛機(jī)上的多路影像數(shù)據(jù)實時網(wǎng)絡(luò)傳輸。系統(tǒng)網(wǎng)絡(luò)架構(gòu)如圖1所示。
圖1 網(wǎng)絡(luò)架構(gòu)圖
依賴系統(tǒng)框架,以太網(wǎng)數(shù)字影像編碼器有如下功能要求:能對1~4路影像同時進(jìn)行編碼;對輸入的數(shù)據(jù)包大小可調(diào);具有時間同步功能;數(shù)字影像編碼器參數(shù)可調(diào)。
按功能需求,本方案的系統(tǒng)以ARM為主控單元,選型為OMAP3530[3],在其上完成與前端采集器的控制信息交互、UDP數(shù)據(jù)傳輸、PCM幀格式及輸出參數(shù)配置、PCM成幀。FPGA是PCM碼型變換和控制輸出速率的主要單元,USB(Universal Serial Bus)是完成ARM與FPGA之間的主要傳輸通道[4]。
按照功能需求,本方案的軟件設(shè)計包括數(shù)據(jù)通信、處理、控制輸出、參數(shù)配置等基本功能,同時為用戶提供操作接口。系統(tǒng)實現(xiàn)的具體功能包括:
1)通信接口,負(fù)責(zé)數(shù)據(jù)的發(fā)送與接收。它不進(jìn)行數(shù)據(jù)處理,僅僅將接收到的數(shù)據(jù)轉(zhuǎn)發(fā)給其他軟件模塊處理或者按照設(shè)備間通信協(xié)議要求發(fā)送數(shù)據(jù)出去。
2)數(shù)據(jù)處理,完成數(shù)據(jù)組幀以及將所組幀按照需求碼型進(jìn)行變換。設(shè)備在開機(jī)狀態(tài)下數(shù)據(jù)的處理是持續(xù)進(jìn)行的,針對FPGA適于處理較高復(fù)雜度,大容量數(shù)據(jù)的特點,數(shù)據(jù)編碼中的碼型變換在FPGA中實現(xiàn)。
3)參數(shù)配置,為用戶提供操作接口。設(shè)備開機(jī)后按照上一次參數(shù)配置或者通過PC機(jī)實時配置等,完成對設(shè)備工作狀態(tài)的設(shè)定,并對用戶配置信息做出恰當(dāng)?shù)姆磻?yīng)。
4)時間碼模塊,負(fù)責(zé)從串口接收時間碼信息。
5)輸出響應(yīng),接收并響應(yīng)外部信號,輸出PCM幀。按照數(shù)據(jù)輸出速率控制數(shù)據(jù)的輸出,同時保證無論有無網(wǎng)絡(luò)數(shù)據(jù)的情況都能無間隙輸出。
本系統(tǒng)軟件由通信接口、數(shù)據(jù)處理、參數(shù)配置、時間碼接收和輸出控制5個模塊組成,它們相互協(xié)作完成系統(tǒng)功能。軟件結(jié)構(gòu)如圖2所示。
圖2 軟件結(jié)構(gòu)圖
數(shù)據(jù)處理是整個軟件的核心模塊,通信接口數(shù)據(jù)、參數(shù)配置以及時間碼接收通過它在軟件中結(jié)合起來,形成完成的所需PCM幀。數(shù)據(jù)處理模塊把數(shù)據(jù)輸入的三部分模塊融合成一個整體,協(xié)調(diào)實現(xiàn)系統(tǒng)功能。參數(shù)配置用于接收用戶的各種配置命令并處理,提供人機(jī)交互的接口。數(shù)據(jù)通信接口提供了軟件與前端各類視頻采集器的網(wǎng)絡(luò)接口,它負(fù)責(zé)與視頻采集器交互以及接收視頻數(shù)據(jù)并將數(shù)據(jù)交付于數(shù)據(jù)處理模塊處理,同時可以將數(shù)據(jù)發(fā)送在該局域網(wǎng)內(nèi)的所有設(shè)備。時間碼模塊是為數(shù)據(jù)打入時間標(biāo)簽所提供的,時間碼來自于IRIG-B碼所解調(diào)出的時間信息,為數(shù)據(jù)在時間上的正確性提供驗證依據(jù)。輸出控制模塊在整個軟件系統(tǒng)中提供輸出控制接口。輸出控制模塊接收并響應(yīng)從GPIO口提供的外部信號,并將數(shù)據(jù)處理模塊生成的數(shù)據(jù)發(fā)送給FPGA。
系統(tǒng)采用嵌入式Linux操作系統(tǒng)來實現(xiàn)。Linux操作系統(tǒng)具有功能強大、安全性高、穩(wěn)定性好等特點。軟件主進(jìn)程流程圖3所示。
圖3 主進(jìn)程流程圖
本軟件啟動了Linux環(huán)境下的一個主進(jìn)程。主進(jìn)程在完成系統(tǒng)環(huán)境初始化后啟動5個線程。系統(tǒng)環(huán)境初始化中兩個重要的部分是輸出配置文件和XML文件解析。輸出配置文件確定各個輸出端口的輸出狀態(tài),XML文件提供用戶所定義的PCM幀格式。
主進(jìn)程啟動了5個線程來實現(xiàn)系統(tǒng)功能,分別是通信接口線程、數(shù)據(jù)處理線程、輸出響應(yīng)線程、時間碼線程和參數(shù)配置線程。
通信接口線程實現(xiàn)通信接口模塊功能。當(dāng)線程啟動后要開始向局域網(wǎng)中的設(shè)備以廣播形式定時發(fā)送心跳信息。編碼器設(shè)備在前端設(shè)備即采集器設(shè)備交換握手信息后就開始接收數(shù)據(jù)幀,同時監(jiān)控采集設(shè)備是否正常。
時間碼線程實現(xiàn)時間碼模塊功能。時間碼信息是由IRIG-B時間碼信號解碼獲得。模塊在接收到時間碼信號后將其轉(zhuǎn)換成成幀所需時間碼,保存在全局結(jié)構(gòu)體變量中供數(shù)據(jù)處理線程使用。時間碼的主要作用是在影像數(shù)據(jù)打上時間標(biāo)簽。
數(shù)據(jù)處理模塊數(shù)據(jù)處理線程和數(shù)據(jù)的碼型轉(zhuǎn)換。數(shù)據(jù)處理線程主要實現(xiàn)PCM幀的組幀,將網(wǎng)絡(luò)視頻數(shù)據(jù)和時間碼按照PCM幀格式組幀。其中,數(shù)據(jù)的碼型變換在FPGA中實現(xiàn),ARM和FPGA的通過USB進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸控制由輸出響應(yīng)線程實現(xiàn)。
參數(shù)配置線程實現(xiàn)參數(shù)配置模塊功能。參數(shù)從串口接收并解析,解析之后保存到輸出配置文件和XML文件中便于下次開機(jī)使用。
在圖2中清晰地介紹了本系統(tǒng)的軟件結(jié)構(gòu)圖。同時在系統(tǒng)流程中也可知數(shù)據(jù)處理部分需要分成兩個步驟完成:首先,ARM中的數(shù)據(jù)處理線程完成組幀;其次,在FPGA中完成碼型變換。除此之外,軟件各部分都可以在ARM中通過線程來實現(xiàn)。
本系統(tǒng)在開機(jī)后要對USB加載驅(qū)動、加載本機(jī)IP和網(wǎng)關(guān)以及自動運行執(zhí)行程序。USB是微控制器ARM向FPGA輸出數(shù)據(jù)的接口。IP地址與網(wǎng)關(guān)的設(shè)定為系統(tǒng)與網(wǎng)絡(luò)中設(shè)備通信提供支持。圖4為開機(jī)初始化的腳本文件。
圖4 開機(jī)初始化腳本文件(截圖)
本系統(tǒng)采用管道的方法實現(xiàn)線程通信。在主進(jìn)程中,通過int pipe_fd[2]定義管道,通過pipe(pipe_fd)打開管道。打開管道后,通過pthread_create()函數(shù)開啟5個線程。下面對5個線程的實現(xiàn)分別進(jìn)行介紹。
通信接口線程負(fù)責(zé)系統(tǒng)與局域網(wǎng)中設(shè)備的通信。通信接口的具體功能實現(xiàn)分成3個部分:廣播心跳包、與前端設(shè)備握手、接收數(shù)據(jù)幀。
通過使用定時器中斷向局域網(wǎng)定時廣播“心跳”幀,表征設(shè)備的健康狀態(tài),需要使用定時器中斷實現(xiàn)。由于設(shè)備需要在局域網(wǎng)內(nèi)廣播,在配置網(wǎng)絡(luò)時除了設(shè)置IP地址以外還要設(shè)置網(wǎng)關(guān),即初始化腳本中的“route add default gw XXX.XXX.XXX.XXX”,才能實現(xiàn)全網(wǎng)段廣播。線程流程圖如圖5所示。
圖5 通信接口線程流程圖
時間碼通過從時間碼解析設(shè)備獲得,由串口引入。時間碼設(shè)備的解析精度只能到秒級,獲得更高精度的時間標(biāo)簽需要在控制端使用gettimeofday(&ustime,NULL)獲得毫秒級,該函數(shù)在系統(tǒng)函數(shù)頭文件time.h中定義。時間碼每1 s更新一次,其余時間中時間碼線程掛起。
在數(shù)據(jù)處理線程中,將網(wǎng)絡(luò)接口中獲得的視頻數(shù)據(jù)按照所需的幀格式組成PCM幀。PCM的幀結(jié)構(gòu)按照IRIG-106遙測標(biāo)準(zhǔn)[5]確定,相關(guān)信息存儲在XML文件中。于此同時,需要為PCM幀打上時間標(biāo)簽,時間標(biāo)簽在PCM幀頭(幀同步字之后),占8 byte。需要確定的參數(shù)為:子幀字?jǐn)?shù)、碼字長、子幀數(shù)、填充字、參數(shù)結(jié)構(gòu)體、波特率、子幀ID字、碼型、同步字、同步字掩碼。
系統(tǒng)所需要的PCM幀結(jié)構(gòu)有子幀,理論上應(yīng)該通過二維數(shù)組實現(xiàn),而對數(shù)組元素的訪問實際就是對數(shù)組元素對應(yīng)的偏移地址的訪問。數(shù)組每多一維,訪問其變量就要多做一次乘法,編譯后生成的中間代碼就更長,效率自然也低。因此,為了提高成幀算法的效率,在實現(xiàn)時將二維數(shù)組降為一維數(shù)組。
線程中調(diào)用成幀函數(shù)framing()實現(xiàn)PCM成幀。數(shù)據(jù)處理線程只處理網(wǎng)絡(luò)數(shù)據(jù)即視頻數(shù)據(jù),填充字成幀即空幀在輸出控制線程中實現(xiàn)。流程如圖6所示。
圖6 數(shù)據(jù)處理流程圖
參數(shù)配置線程是用于實現(xiàn)上位機(jī)對系統(tǒng)狀態(tài)的設(shè)置。設(shè)置包括PCM幀格式和數(shù)字信號、模擬信號輸出狀態(tài),其中PCM幀格式從XML文件中獲得。解析XML文件調(diào)用libxml.lib庫文件中parser.h和tree.h的函數(shù)實現(xiàn),同時在程序的Makefile里添加libxml.lib。由于系統(tǒng)開機(jī)時需要運行上次運行狀態(tài),各種配置狀態(tài)都以文件形式保存,流程如圖7所示。使用串口接收字符串時,所接收字符串長度大于串口一次接收的字符數(shù),需要循環(huán)接收。
圖7 參數(shù)配置流程圖
輸出響應(yīng)線程是接收FPGA提供的信號保證并響應(yīng)輸出。本方案選用颶風(fēng)的EP3C25E144I7N的FPGA,F(xiàn)IFO緩存設(shè)定為最大值。
由于輸出PCM數(shù)據(jù)流不能有間隙,即FPGA內(nèi)FIFO內(nèi)不能為空,ARM及時響應(yīng)FPGA提供的GPIO信號就非常重要。按照設(shè)計需求,將輸出響應(yīng)線程設(shè)置為最高優(yōu)先級,同時,提高線程內(nèi)程序效率來保證輸出響應(yīng)。
在輸出端,PCM幀需按照設(shè)定的波特率輸出,并且無論有無網(wǎng)絡(luò)數(shù)據(jù)的情況都無間隙。所以在無網(wǎng)絡(luò)數(shù)據(jù)時需要調(diào)用成幀函數(shù)framing()實現(xiàn)填充字成幀。線程對外部事件的實時響應(yīng)受時間片的影響,在不能減少線程數(shù)量的情況下,只有將FIFO的容量開為最大值來保證外部信號的頻率使線程及時響應(yīng)同時輸出無間隙。輸出控制的流程圖如圖8所示。
線程中最耗時的部分在數(shù)據(jù)的輸出。數(shù)據(jù)通過USB傳輸,提高USB傳輸速率能提高響應(yīng)的實時性,更改USB的傳輸速率通過更改Linux內(nèi)核中USB的最大傳輸參數(shù)來實現(xiàn)[6]。分析所使用Linux內(nèi)核版本2.6.32的./drivers/usb內(nèi) buffer.c和 usb-skeleton.c,將宏定義 MAX_TRANSFER改為4 kbyte,生成新的usb-skeleton.ko。
圖8 輸出控制線程流程圖
本系統(tǒng)編碼器的軟件測試需要驗證軟件設(shè)計的正確性以及穩(wěn)定性。主要分為兩部分:各線程功能測試和系統(tǒng)功能測試。
在各線程功能測試中,經(jīng)過反復(fù)測試,每當(dāng)FIFO數(shù)據(jù)量減少了總的存取量的1/8時,F(xiàn)PGA向ARM提供事件輸入信號,保證輸出響應(yīng)線程能保證無間隙輸出。在測試過程中,參數(shù)配置線程偶爾會出現(xiàn)錯誤。分析現(xiàn)象可知,線程中串口為阻塞狀態(tài),由外部電路的干擾,串口會接收到1~2個字符而造成錯誤。因此,將串口最小接收字符數(shù)設(shè)為2,newtio.c_cc[VMIN]=2保證不會因外部干擾解除阻塞,造成錯誤。同時,用于配置的串口線在放置時也要遠(yuǎn)離電源線和信號線。
軟件系統(tǒng)測試中需要用到Windows XP系統(tǒng)的PC機(jī)3臺,以及多臺采集設(shè)備。PC機(jī)A安裝配置程序XMLControl.exe,用串口與設(shè)備相連;PC機(jī)B安裝PCM遙測解碼板卡和PCM解碼軟件,與設(shè)備的TTL輸出相連;PC機(jī)C需安裝視頻解碼軟件,用于接收PC機(jī)B的UDP數(shù)據(jù)和解視頻數(shù)據(jù)幀。反復(fù)測試,保證PCM幀字長8/16位可調(diào),幀長16~1 024 byte可調(diào),副幀數(shù)1~256可調(diào),碼型NRZ-L,BIΦ-L,RNRZ-L 可選。
在實驗室環(huán)境下,使用模擬視頻發(fā)送程序。在用戶環(huán)境使用4個攝像頭將視頻采集后通過UDP協(xié)議實時傳輸給編碼器。系統(tǒng)測試平臺如圖9所示,編碼器與1臺視頻采集設(shè)備相連,進(jìn)行握手后將視頻流成幀編碼,同時編碼器通過TTL信號線與安裝有PCM解調(diào)板卡的計算機(jī)相連,顯示器上顯示的是PCM解調(diào)軟件。圖9中所示,PCM信號與解調(diào)板卡已同步。圖10所示,PCM解調(diào)板卡收到一路采集設(shè)備的視頻數(shù)據(jù)。PCM碼速率為10 Mbit/s,視頻流速率約為2 Mbit/s。視頻采集設(shè)備最多為4路。解碼設(shè)備通過UDP協(xié)議將解碼后的數(shù)據(jù)流傳送給后端的視頻播放軟件。視頻采集前端發(fā)送的數(shù)據(jù)量與播放軟件接收到的數(shù)據(jù)相同,采集的視頻能實時播放且顯示的時間標(biāo)簽與時間碼儀器時間同步。圖11為測試結(jié)果效果圖,說明該編碼器從數(shù)據(jù)接收、編碼、傳輸、輸出均滿足設(shè)計要求。通過10 h的持續(xù)測試,證明本系統(tǒng)軟件的穩(wěn)定性。
本文設(shè)計了一種以太網(wǎng)數(shù)字影像遙測編碼器的軟件系統(tǒng),該系統(tǒng)具有接收UDP網(wǎng)絡(luò)的影像數(shù)據(jù),并且完成遙測IRIG106標(biāo)準(zhǔn)的PCM編碼,現(xiàn)實NRZ-L,BIΦ-L和RNRZ-L三種編碼方式。該系統(tǒng)實時性高、穩(wěn)定性好,在航空航天領(lǐng)域所需要的實時視頻傳輸系統(tǒng)中具有較高的應(yīng)用前景。
圖11 編解碼后視頻回放效果圖(截圖)
:
[1]霍培峰.試飛測試技術(shù)[M].西安:中國飛行試驗研究室,1990.
[2]霍培峰,郭小兵.國外航空遙測發(fā)展[J].遙測遙控,2003,24(6):1-5.
[3]Texas Instruments.OMAP35X technical reference manual[EB/OL].[2011-12-09].http://www.ti.com.cn/cn/lit/ds/sprs507f/sprs507f.pdf.
[4]楊志坤,曾博,湯國文.基于FPGA的嵌入式系統(tǒng)USB接口設(shè)計[J].電子設(shè)計工程,2010,18(1):30-34.
[5]《遙測技術(shù)》編輯部.美國遙測標(biāo)準(zhǔn)和測試方法[M].北京:《遙測技術(shù)》編輯部,1982.
[6]劉輝,向濤,張杰.基于Linux下TDM模塊的USB主機(jī)端驅(qū)動的開發(fā)[J].電視技術(shù),2011,35(19):51-53.
劉 宇(1972— ),教授,博士生,主研慣性傳感系統(tǒng)及信號處理;
田增山(1968— ),教授,博士生,主研個人通信、衛(wèi)星導(dǎo)航、無線定位、信號檢測與處理、語音視頻處理;
王 寧(1987— ),碩士生,主研集成電路。
Design and Implementation of Ethernet Digital Image Telemetry Encoder
HUANG Zhaojing,LIU Yu,TIAN Zengshan,WANG Ning
(Institute of Optical Communication Technology,Chongqing University of Posts and Telecommunications,Chongqing 400065,China)
The Ethernet digital image telemetry encoder plays an important role in aerospace test.According to its characteristics of various of frames structure,high real-time and continuous data,this article puts forward a scheme which used the combination hardware platforms of high-performance ARM microcontroller OMAP3530 and FPGA,with Linux operating system,to design the software architecture of encoder and the detailed design and implementation of software.Through the laboratory and field environment test,the software of the system is verified the integrity and reliability.
telemetry encoder;microcontroller;telemetry irig-106;PCM frame format;thread
TN762;P715.7
A
【本文獻(xiàn)信息】黃兆靖,劉宇,田增山,等.以太網(wǎng)數(shù)字影像遙測編碼器的設(shè)計與實現(xiàn)[J].電視技術(shù),2013,37(3).
重慶市科技攻關(guān)項目(國際合作類)(2011GZ0017)
黃兆靖(1987— ),碩士生,主研集成電路;
責(zé)任編輯:魏雨博
2012-07-29