蘇寧,趙利
(桂林電子科技大學 信息與通信學院,桂林541004)
蘇寧(研究生),研究方向為嵌入式系統開發;趙利(教授),研究方向為移動通信及網絡。
引 言
數字視頻通信系統較傳統模擬視頻通信系統而言,具有抗干擾、抗噪聲能力強、便于計算機處理等優點。隨著數字技術的發展、特別是高效的音視頻壓縮技術的發展,數字視頻通信系統需要較大帶寬和設備復雜的問題得到了很好的解決。由于計算機與大規模集成電路的快速發展,高效能的嵌入式系統不斷涌現,從成本和技術上為原有模擬視頻傳輸系統的改造提供了基礎。針對采用模擬技術體制的某微波視頻傳輸系統,存在占用帶寬寬、鄰道干擾嚴重、圖像質量差等問題,需對該系統進行數字化改造。
在保留原系統射頻模塊和主要功能不變的基礎上,以基于Linux的Cortex-A8嵌入式平臺為核心,完成音視頻數字化采集、壓縮處理以及收發處理功能,實現了高幀率、高分辨率的音視頻采集、壓縮/解壓及微波傳輸的數字視頻無線通信系統。采用mmap視頻采集、多線程、CP-FSK調制解調和USB轉UART 等關鍵技術,系統具有硬件電路簡單、成本低、易開發、高速傳輸、實時性好等優點,具有重要的工程設計參考價值。
①RF通道:發送端中頻頻率為60MHz,接收端中頻頻率為38 MHz,中頻帶寬為8 MHz。
②數字調制:調制方式為CP-FSK,中心頻率為中頻60或38 MHz,頻偏為±2 MHz,調制速率為4 Mbps。
③音視頻:音頻編碼格式為LPCM,視頻編碼格式為H.264,視頻分辨率為640×480,視頻幀率為25fps。
在以Linux為操作系統的Cortex-A8嵌入式平臺上,采用USB攝像頭和麥克風分別實現視頻和音頻的數字化采集,同時進行本地視頻回放。對采集所得的視頻數據進行H.264壓縮處理,并與音頻進行音視頻組幀發送。經組幀的音視頻數據通過USB 轉UART 接口傳送至CPFSK 調制模塊。USB 轉UART 接口采用能實現高速異步通信的XR21V1410 芯片實現,CP-FSK 調制模塊采用體積小、低功耗和控制靈活的AD9959DDS芯片實現。微波系統的中頻和射頻電路保持不變,實現一個傳輸速率達到4 Mbps的數字音視頻微波發送端,發送端的方案框圖如圖1所示。

圖1 發送端方案框圖
三星公司的S5PV210處理器具有高性能的圖像處理器SGX540,支持USB2.0 接口,有豐富的接口、完善的BSP、齊全的開發文檔,最高可支持1080p@30fps硬件解碼視頻流暢播放,格式可為MPEG4、H.263、H.264等[1],因此高清視頻的采集與壓縮可以采用S5PV210處理器。
異步串行通信相比于同步串行通信,具有實現簡單、使用方便和成本低等優點。單純地使用開發平臺上的UART 接口無法滿足系統對傳輸速率的設計要求,可以通過USB轉UART 方式來提高串口傳輸速率。采用單片XR21V1410實現USB轉UART,傳輸速率最高可達4 Mbps,且該芯片體積小、硬件電路設計簡單。
為了抑制帶外輻射、避免領道干擾,同時易于實現,選用頻帶利用率高、帶外衰減快的CP-FSK 調制方式。為了滿足高達4 Mbps的高速CP-FSK 的技術要求,采用DDS技術來實現CP-FSK 全數字調制。ADI公司的AD9959 DDS芯片具有功耗低、體積小、控制靈活、成本低等優點,可以執行高達16階的頻率、相位或幅度調制(FSK、PSK、ASK),很容易實現信號全數字調制,成為系統實現CPFSK 全數字調制的一個選擇。
原有系統中,中頻及射頻電路保持不變。采用由SAW 和補償放大器組成的鄰道濾波器抑制鄰道干擾;采用中頻CP-FSK 解調方式,中心頻率為38 MHz,頻偏±2 MHz,實現速度為4 Mbps的FSK 解調;解調電路采用集成PPL的單片NE564芯片實現;異步串行通信接收采用基于XR21V1410芯片的USB 轉UART 接口實現;音視頻的接收和解碼采用以S5PV210 芯片為主處理器的Linux嵌入式平臺來實現,并完成音視頻的本地回放。接收端的框圖如圖2所示。
XR21V1410有自己的內部時鐘,可精確產生任何波特率,提供大容量FIFO,可實現速率高達12Mbps的異步串行數據通信[1]。圖3為芯片內部結構框圖。

圖3 XR21V1410內部結構框圖
電路設計需注意:
①芯片的工作電壓為2.97~3.63V,所以引腳VCC接3.3V 電源,如果沒有合適的電源,需多加一個電源電路;
②引腳USBD+和USBD-與開發板的USB 接口連接;
③RX和TX為UART 的異步串行收發引腳;
④可以加一個ESD 保護電路,保護USBD+和USBD-這兩條高速數據免受靜電放電和其他瞬變的影響;
⑤Lowpower引腳接一個外部上拉電阻,兩個GND引腳接地,同時SDA、SCL、GPIO0~GPIO5引腳懸空。
CP-FSK 調制電路選用ADI公司的AD9959DDS芯片,該芯片是一款4通道、內部時鐘頻率高達500 MHz的直接數字頻率合成器芯片。每個通道均可提供獨立的頻率、相位和幅度控制,這種靈活性可用于校正信號之間由濾波、放大等模擬處理或PCB 布局失配而引起的不平衡問 題[2-3]。CP-FSK 調 制 器 采 用 微 控 制 器 與AD9959構 成的硬件電路實現,其中Atmel公司的微控制器ATmega32用于DDS的配置,通過合理的設計,實現以60 MHz為中心、±2 MHz的兩個副載波頻率之間的高速切換,并保持碼元間相位的連續。此外,DDS的輸出是高速D/A 轉換后的信號,含有較多高次諧波分量,需外接低通濾波器(LPF)剔除信號中的雜波和噪聲。
CP-FSK 調制器的硬件結構框圖如圖4所示。

圖4 CP-FSK調制器的硬件結構圖
其中,P0~P3用于控制調制方式的選擇,IO_UPDATA 為寄存器刷新線,SCLK 為串口同步信號,MARST_RESET 為復位信號。
CP-FSK 信號的解調方式有很多種,內部有電壓比較器、有與TTL電平相匹配的輸入/輸出端、集成了鎖相環的NE564芯片是一種很好的選擇方案。芯片NE564 由輸入限幅器、鑒相器、壓控振蕩器、放大器、直流恢復電路和施密特觸發器6部分組成[4]。圖5為CP-FSK 解調電路。從射頻電路接收到的FSK 信號經聲表濾波器(SAW)和補償放大電路(ERA)處理后,接入NE564芯片的6引腳進行解調處理。

圖5 CP-FSK解調電路
中心頻率為38 MHz的CP-FSK 解調電路的電路參數取值,關鍵要確定4、5引腳和12、13引腳處的電容值,其他外圍器件大小的變化不大,影響比較小。計算方法如下:壓控振蕩器的固有頻率與接在12、13 端的定時電容CT=C6+C7有關:

中心頻率f0為38MHz,可得CT=11.96pF,則可以選擇6.8pF和20pF的可調電容來調節VCO的中心頻率。通過可變電容調節VCO的頻率到所需要的中心頻率。
對于影響環路濾波器的接在4、5引腳上的C3、C4容值的選擇,可以根據芯片資料推導出計算方法如下:當規定環路的增益k=0.5,芯片供電電壓為5V,且調節2引腳電位器使其對應電流I2為200μA后,可計算電容來調節中心頻率。此時,4、5引腳的電容大小,可用下式計算得到:

其計算值為4.67pF。
軟件系統包括:應用程序、庫、操作系統和驅動程序,其層次關系略——編者注。系統在應用層可以實現視頻圖像的采集、壓縮/解壓和顯示,聲音采集和播放,視頻格式轉換和串口發送接收等應用。使用到的庫有進行H.264視頻編解碼的編解碼庫等,系統采用的內核版本為Linux-3.0.8,驅動程序有USB 攝像頭驅動、音頻驅動、7寸LCD彩色觸屏驅動和USB轉UART 接口驅動等。
3.2.1 視頻采集模塊設計
V4L2是Linux中關于視頻設備的內核驅動。在Linux系統中,視頻設備以設備文件的形式存在于/dev目錄下,視頻的采集可以通過對視頻設備文件進行讀寫等操作來實現。根據V4L2 接口編寫視頻圖像采集程序,主要包括打開設備文件、取得設備功能信息、設置圖像格式、向驅動申請幀緩沖、申請物理內存、采集圖像數據、停止采集和關閉設備等[5]。流程圖略——編者注,具體操作如下:
①打開視頻設備文件,獲取攝像頭基本信息,并設置采集視頻的格式等參數。
②向驅動申請幀緩沖,并將申請到的幀緩沖映射到用戶空間。
③將申請到的幀緩沖全部放入隊列,并啟動視頻采集。
④開始視頻采集,把采集到的視頻數據幀緩沖從buf中出隊列,獲得視頻數據,處理完畢后,將空的緩沖再次放入隊列,循環往復采集連續的視頻數據。
⑤停止視頻的采集和關閉視頻設備。
3.2.2 視頻硬件編解碼
S5PV210處理器采用了強大的信號處理擴展集,為H.264等媒體編解碼提供加速。根據S5PV210處理器的用戶手冊,H.264編碼的具體步驟、流程圖略——編者注。
解碼部分的步驟與編碼大致相同,具體步驟、流程圖略——編者注。
3.2.3 音頻采集
脈沖編碼調制PCM 是對語音信號進行采樣,并對每個采樣值進行量化編碼。在Linux-3.0.8中,已經存在音頻驅動,可以很方便地對音頻文件進行讀寫操作,從而進行音頻應用程序的開發。使用系統的設備文件接口為“/dev/dsp”,聲 音 采 集 的流程步驟大致如下:①打開設備文件;②配置參數,包括采樣頻率、量化位數和聲道數目等;③采集聲音;④停止采集并關閉設備。流程圖如圖6所示。
具體編程時,用ioctl()函數進行參數調用和配置生效,采集函數使用read(),播放函數使用write()。

圖6 聲音采集流程圖
3.2.4 音視頻數據發送與接收處理
(1)數據的組幀與分段
音視頻組幀方式采用聲音+視頻的方式,每個音視頻幀的前端放聲音,后面加入視頻數據。為了便于進行音視頻數據的串口收發和接收后對音視頻數據的后續操作,傳輸前需對音視頻幀數據分段處理。采用每次串口發送512字節的數據長度進行分段。每次串口發送的數據幀中有3個字節的幀頭和3個字節的幀尾,2個字節的數據長度表示數據幀實際發送的數據長度(最多可為504字節),數據幀合計共512個字節。具體的示意圖如圖7所示。

圖7 組幀與分段示意圖
另外,在對音視頻幀數據進行分段時需要考慮兩種情況:一是數據能整除劃分;二是數據不能整除劃分。整除劃分的可以直接發送,不能整除的音視頻幀需要在音視頻幀的最后一段數據塊N 補夠相對應的數據,湊夠504個字節數據后方可傳輸。
(2)UART接口的收發
串口在嵌入式系統中有廣泛的應用。串口屬于字符設備,同其他設備一樣,在Linux系統中以設備文件的形式存在,可以利用文件操作調用,包括常用的open()、close()、read()、write()等,比如以讀寫方式打開串口(int fd=open("/dev/ttyUSB0",O_RDWR);)。
最基本的設置串口包括波特率、校驗位和停止位設置,主要是設置structtermios結構體的各成員值。read()、write()用來實現串口的收發數據功能。實現串口收、發的基本流程圖略——編者注。
基于XR21V1410芯片的USB轉UART 接口驅動屬于Linux 的 字 符 設 備。Linux-3.0.8 內 核 版 本 無XR21V1410芯片的驅動,需要從芯片廠商提供的源碼進行驅動移植。驅動移植和制作新鏡像可以進行如下操作:
①把下載所得的適合該版本內核的驅動放到/Linux-3.0.8/driver/usb/serial/下;
②修改/Linux-3.0.8/driver/usb/serial/下的Kconfig和Makefile文件;
③切換到Linux-3.0.8 主目錄下,在終端執行命令cp mini210_linux_defconfig.config;
④Linux-3.0.8主目錄下,在終端執行命令make menuconfig,在圖形界面中找到需要選中的名稱進行配置;
⑤在終端執行命令make zImage;
⑥ 編 譯 完 成 后,進 入 到/Linux-3.0.8/arch/arm/boot/下即可看到新生成的zImage文件,這就是剛編譯好的鏡像。
結 語
該數字微波視頻傳輸系統選用Linux操作系統以及Cortex-A8內核的處理器S5PV210,利用其內部集成的H.264硬件編/解碼器,極大地提高視頻編碼效率。在分辨率為640×480、幀率為25fps的情況下,系統聯調測試結果表明,音視頻的無線微波傳輸可靠、圖像清晰流暢、實時性良好,達到了系統設計要求。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
[1]EXAR company.XR21V1410 1-CH FULL-SPEED USB UART datasheet[EB/OL].[2015-02].http://www.exar.com/connectivity/uart-and-bridging-solutions/usb-uarts/xr21v1410/.
[2]陳嘉佳,潘志浩,王天麟.一種基于DDS 芯片AD9959 的高精度信號發生器[J].自動化儀表,2007(4):24-28.
[3]孫文友,宋祖勛,段鵬.基于DDS技術的2CPFSK 調制器的實現[J].通信技術,2006(S1).
[4]盧盛杰,宋剛.單片集成鎖相環NE564在通信中的應用[J].黑龍江通信報,1995(3).
[5]王建新,張凱,王秀.基于S3C2440的視頻采集及傳輸系統設計[J].電子器件,2013,36(3):367-370.