駱才華,葉玉堂 ,劉 霖,劉娟秀,賈宏宇,王 平,別俊峰,徐文濤,郝 霞
(電子科技大學光電信息學院,成都610054)
隨著人類進入數字信息時代,急需一種將前人保存在紙張上的珍貴財富直接轉換為數字信息的設備,于是線陣CCD 大幅面掃描儀孕育而生。但是,由于其跨越光學設計、機械加工、軟件工程、圖像算法等多個學科,迄今為止,全部關鍵核心技術仍然只被丹麥Contex、日本Graphtec 等少數國外研究團隊掌握,國內所使用的線陣CCD 的大幅面掃描儀全部進口,迄今為止處于空白狀態[1-2]。
線陣CCD 大幅面掃描儀的各個系統中,數字圖像數據的傳輸以其數據量大、傳輸精度要求高等特點,成為了研發中的一大技術難點[3]。高速USB 接口具有通用性強、成本低、軟件開發周期短等優勢,成為了線陣CCD 大幅面掃描儀圖像傳輸的首選。高速USB 接口的批量傳輸方式(BULK方式)更是以支持錯誤重傳等有優勢滿足了線陣CCD 大幅面掃描儀傳輸數據量大、精度高等要求[4]。但是,由于前端線陣CCD 傳感器產生穩定的海量數據以及高速USB 批量傳輸方式傳輸優先級低,不能保證傳輸延遲時間的特點,導致了線陣CCD 大幅面掃描儀在數據傳送中出現數據丟失,造成圖像失真,如圖1。
圖1 是USB 傳輸模塊傳輸0 ~255 連續數據時,計算機軟件采集到的圖像。圖1 中圖像平移的起始點如圖2。圖2(a)中標識線上方的第一行是圖像發生平移的起始位置。該行左邊邊界和上面每行的邊界是重合的如圖2(b)。其右邊邊界和上方邊界相比左移了4 個像素,如圖2(c)。由于圖像數據是按從左往右的順序顯示的,那么左邊邊界不變,右邊邊界左移說明:在圖2(a)中標識線上方的一行中,圖像數據至少丟失了4 個像素。

圖1 傳輸圖像數據時出現圖像失真

圖2 圖像失真起始位置
1.1.1 USB 批量傳輸的優先級低
USB 協議規定了高速USB 有4 種傳輸方式:控制傳輸、中斷傳輸、同步傳輸、批量傳輸。這4 種傳輸方式中,批量傳輸以其支持錯誤重傳機制,保證了大數據量的可靠傳輸,被大量應用在打印機、掃描儀中[5]。但是,批量傳輸方式本身也有其缺點:為了使發送的大量數據不阻塞總線,USB 協議賦予了批量傳輸最低的優先級。它會為其他3 種類型的傳輸做延遲,并且理論上延遲時間是無限的,只有當有可用的總線帶寬時,批傳送才發生[6]。與此同時,我們的計算機系統中使用了大量USB 外設,如鼠標、鍵盤等等。這些外設工作于各種傳輸模式上,直接跟批量傳輸設備競爭USB 總線資源,它們對用總線的使用情況將直接影響線陣CCD 大幅面掃描儀的傳輸帶寬,造成了線陣CCD 大幅面掃描儀數據傳輸過程出現了大的停滯,如圖3 所示。
圖3 是線陣CCD 大幅面掃描儀向運行在實驗用計算機(intel core i3 M330@2.13 GHz 處理器)上的數據采集程序傳送圖像數據時,測得的關鍵控制信號波形:full_n。當full_n=0 時,USB 接口芯片上的FIFO 處于滿狀態,USB 傳輸出現停滯。圖3 中,在兩次密集的批量傳輸之間USB 接口出現了長時間的停滯full_n_L。并且這個長時間的停滯時間是隨機的,如圖4 所示。

圖3 full_n 實際波形圖
圖4 是full_n_L 時間折線圖。橫坐標表示按時間先后出現的full_n_L 的序號,縱坐標表示full_n_L持續時間(單位:μs),full_n_L 持續時間隨機波動。
1.1.2 協議開銷占用USB 總線時間
USB 的批量傳輸方式,是一種可靠的單向傳輸。采用握手協議正是其可靠性的體現,完成一次握手操作的過程叫做事務(Transaction)。一個事務由:令牌包、數據包、握手包構成,它們的流程如圖5所示。一個事務中的各種數據占用USB 總線時間的分布如圖6 所示。協議開銷tProtocol_Overhead,是指事務中的令牌包,握手包以及數據包內除數據凈負荷區以外的數據占用數據總線傳輸時間;數據位的填充位占用總線開銷tBitStuffTime,它直接跟數據包中的有效數據量相關;主機控制器申請訪問開銷tHost_Delay,它與USB 主機控制器及計算機操作系統有關;數據傳輸時間tData,跟每個數據包中數據凈負荷區的大小有關。tService_Overhead為完成一次數據傳輸需要的服務開銷(不含有效數據),tBulk_Transaction為完成一個完整事務所消耗的總線時間[7-8]。

圖5 USB 事務流程

圖6 一個事務的USB 總線時間分配

根據式(2),總線上兩次數據傳輸tData間必然存在一個時間間隙用于傳輸服務開銷tService_Overhead,而tService_Overhead中的tHost_Delay是造成高速USB 批量傳輸方式多個事務間出現隨機時間間隔的主要原因,該參數跟計算機操作系統環境和USB 總線控制控制器有關。圖3 中除full_n_L 以外,full_n 的波形還出現了很多持續時間很短并且持續時間隨機變化的低電平“毛刺”,它們很好的體現了tService_Overhead的存在。
線陣CCD 大幅面掃描儀的數據采集系統由機械走紙機構和線陣CCD 傳感器組成。為了避免機械走紙機構和線陣CCD 傳感器運行速度不匹配引起的圖像拉伸或壓縮失真的出現,它們的工作必須保持協調一致。同時,為了保證紙張在機械走紙機構上運動的穩定性,走紙機構通常以勻速方式運動[9]。鑒于以上兩種原因,這就要求線陣CCD 傳感器以固定的掃描速度工作即以固定的行頻工作。線陣CCD 大幅面掃描儀數據采集系統的工作方式決定了它數據輸出的連續性[10]。同時,線陣CCD 大幅面掃描儀產生的數據量特別大。設線陣CCD 大幅面掃描儀水平分辨率P(DPI),掃描寬度W(mm),與走紙機構匹配的行頻f(Hz),l 為每個像素點的量化寬度,數據采集速度S(bit/s)

在掃描紙張為A0(841 mm×1 189 mm)幅面時,W=841 mm,P=600 DPI,f=1 200 Hz,l=8 bit,數據采集速度S 高達195.84 Mbit/s。
根據上述分析,線陣CCD 大幅面掃描儀前端數據采集具有數據量大、數據以特定頻率穩定輸出的特性。然而,后端的USB 數據傳輸卻具有隨機和間歇性。采集和傳輸系統的特點明顯存在矛盾,如果不在上述兩個系統間添加高效、高精度的緩存機制,前端數據很可能無法被及時傳輸。后邊新采集的數據會覆蓋沒來得及傳輸的數據,造成原始圖像數據的丟失、圖像的失真。這個時候,無論前端線陣CCD 傳感器驅動多么精確,后期處理算法多么優越,圖像質量還是得不到保障。根據以上原因,筆者提出了基于寫優先FIFO 結構的SRAM 緩存法。
由上述對線陣CCD 大幅面掃描儀USB 傳輸中圖像失真機理的分析可知,圖像數據丟失產生的根本原因是:USB 批量傳輸方式實時性不高、易受系統中其它USB 設備工作狀態影響以及批量傳輸協議中數據傳輸的服務開銷太大,進而導致在傳輸過程中出現了時間間歇full_n_L。同時,在full_n_L 時間內,線陣CCD 傳感器仍以極高的速率往傳輸系統的緩存中寫入,由于該緩存容量有限造成數據溢出最終導致了USB 圖像傳輸的失真。因此,只要在USB 圖像數據傳輸系統前端添加一種數據緩存機制,保證full_n_L時間段內系統能夠將線陣CCD 傳感器產生的數據NBlock充分緩存,就可以避免圖像失真[11]。
設full_n_L 持續的時間內,線陣CCD 傳感器積壓的數據量的最大、最小值表示為NBlock_max、NBlock_min,數據采集速度表示為S(bit/s),傳輸停頓最大值表示為tmax,傳輸停頓最小值表示為tmin。根據式(1)

基于寫優先FIFO 結構的SRAM 緩存法緩存器容量Nbuffer應該比在full_n_L 內積壓的最大的數據量還大。

實際應用中發現:由于tmax受與線陣CCD 大幅面掃描儀配套的計算機的軟硬件環境影響巨大,在某些條件下tmax達到了10 ms,NBlock_max高達1 958.4 kbit。所以,為了避免圖像失真選擇緩存器的容量應遠大于計算結果。根據實際情況,項目組選擇了32 Mbit 的SRAM 作為緩存器。
基于寫優先FIFO 結構的SRAM 緩存法流程圖如圖7 所示。行使能信號以固定頻率驅動線陣CCD傳感器工作,線陣CCD 傳感器產生的海量數據由仲裁器寫入到SRAM 中,同時,仲裁器在兩次行使能的間歇,將讀出SRAM 的數據并寫入到FIFO 中。USB接口芯片會隨時檢測FIFO 的空標志位(rdempty),一旦非空就將FIFO 的數據傳輸給計算機采圖程序。仲裁器在對SRAM 的操作過程中,賦予了寫操作更高的優先級。仲裁器的工作流程如圖8 所示,只要線陣CCD 傳感器開始工作,必須暫停一切對SRAM 的其它操作,將其產生的一行數據(20. 4 kbyte)寫到SRAM 中[12]。當線陣CCD 傳感器暫停工作的時,檢測FIFO 的空、滿,一旦為非滿狀態時將SRAM 中數據高速讀出到FIFO 直到FIFO 被寫滿為止,否則在這段時間暫停對SRAM 的操作。

圖7 基于寫優先FIFO 結構的SRAM 緩存系統框圖

圖8 仲裁器工作流程圖
經過基于寫優先FIFO 結構的SRAM 緩存后,圖像失真的現象得到了解決。在600 DPI 的分辨率下,圖像傳輸穩定、未見圖像失真。圖9 為大幅面掃描儀整機,圖10(a)、圖10(b)分別為采用新方法前后的對比圖。圖10(a)中間位置,圖像數據發生丟失,出現了圖像左移的情況。圖10(b)中圖像完整,真實還原了圖紙的本來面貌。

圖9 線陣CCD 大幅面掃描儀

圖10 大幅面掃描儀掃描圖像處理前后對比圖
通過對線陣CCD 大幅面掃描儀USB 傳輸中圖像失真原因的深入分析,并結合線陣CCD 大幅面掃描儀特點,提出了基于寫優先FIFO 結構的SRAM緩存法,通過大量實驗驗證了該方法的可行性,解決了國內首臺線陣CCD 大幅面掃描儀USB 傳輸中的圖像失真問題。
測試結果表明:在600 DPI 的分辨率下,圖像傳輸穩定、采圖軟件采集到的圖像真實。項目組制作的線陣CCD 大幅面掃描儀在600 DPI 的分辨率下,行頻達到1 200 Hz,USB 接口平均傳輸速度為256 Mbit/s,紙張掃描速度為5.08 cm/s,掃描一張A0 圖紙需要約23 s。
[1] Kumpulainen T,Latokartano J,Vihinen J,et al. Scanner Test Pattern for Evaluation of Beam Manipulation Accuracy[C]//Assembly and Manufacturing(ISAM),2011 IEEE International Symposium on,2011,1-5.
[2] Fan Naiqiagn, Wang Guohui, Lu Yarong. Design and Implementation of Computerized Logging Ground Data Acquisition System Based on USB[J]. Instrument Technique and Sensor,2009,1(1):59-61.
[3] John Keithley L Difuntorum,Kristine Mari U Matutina,Al Jerome Mervyn Z Tong. A USB 2. 0 Processor Controller for an ARM7TDM-S Processor Implemented in FPGA[C]//TENCON 2011—2011 IEEE Region 10 Conference,2011:689-692.
[4] Zhang Ting,Jiang Li,Li Nan,et al. A Measurement and Control System Based on USB Bus for Prosthetic Hand[C]//International Conference on Mechatronics and Automation,2011:1321-1325.
[5] Hajime Masaoka,Toshihiro Ohigashi,Tohru Kondo,et al.Supporting USB Devices for the Global Migration[C]//10th Annual International Symposium on Applications and the Internet,2011:153-156.
[6] Alessandro Depari,Alessandra Flammini,Daniele Marioli,et al.USB Sensor Network for Industrial Applications[J].IEEE Transactions on Instrumentation and Measurement,2008,57(7):20-31.
[7] Cypress Semiconductor.EZ-USB FX2 Manual Technical Reference[S].San Jose,California:Cypress Semiconductor Press,2001:95-116.
[8] Compaq,HP,Intel,et al. USB 2. 0 Specification[EB/OL].http://www.usb.org,2000:63-65.
[9] Stache N C,Stollenwerk A,Gedicke J,et al.Automatic Calibration of a Scanner-Based Laser Welding System[J]. Journal of Laser Applications,2009,21:10-15.
[10] 岑家生,王青梅,羅暉,等.基于線陣CCD 的降水粒子探測高速數據采集系統[J].激光與紅外,2012,42(6):674-675.
[11] 李曉坤,劉百玉,歐陽嫻,等.基于FPGA 和SRAM 的智能點膠機控制系統設計[J].儀器儀表學報,2009,30(7):1379-1381.
[12] 武星星,劉金國.三線陣立體測繪相機時間系統優化與實時監測[J].光學精密工程,2012,20(5):1022-1030.