星載干涉成像光譜儀高速數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
摘要:在工業(yè)及航空航天測控領(lǐng)域,實(shí)時(shí)數(shù)據(jù)采集存儲是一個(gè)基本而且重要的環(huán)節(jié)。如何提高數(shù) 據(jù)采集存儲的實(shí)時(shí)性一直是技術(shù)人員所關(guān)心的問題。結(jié)合32位高速數(shù)據(jù)采集板7300A在星栽干涉 成像光譜儀高速數(shù)據(jù)采集記錄系統(tǒng)的應(yīng)用, 闡述了在WindowsNT下用vc6.0實(shí)現(xiàn)高速數(shù)據(jù)采集、存 儲與實(shí)時(shí)顯示過程。在實(shí)現(xiàn)過程中采用了多線程、定時(shí)器、雙緩存和同步對象等技術(shù),有效保證了光 譜數(shù)據(jù)采集、存儲與顯示的穩(wěn)定性、實(shí)時(shí)性,用高速數(shù)字采集卡實(shí)現(xiàn)了高速數(shù)字圖像采集卡的功能。
0 引言 成像光譜技術(shù)能獲得被測目標(biāo)的空間和光譜信 息,在航空航天遙感、軍事偵察、環(huán)境監(jiān)測、資源勘測 等領(lǐng)域具有重要的應(yīng)用價(jià)值。從原理上成像光譜技術(shù) 可分為色散型和干涉型兩大類。由于色散型成像光譜 儀存在著能量低等原理性缺陷,從而使其分辨率和信 噪比都難以提高。而干涉型成像光譜儀在原理上具有 高光譜分辨率和高能量通過率等優(yōu)點(diǎn)。在相同條件 下,與典型的色散型成像光譜儀相比,進(jìn)入干涉成像 光譜儀的能量要高200倍左右,而光譜分辨率一般也 要高兩個(gè)數(shù)量級以上。這就要求干涉成像光譜儀的后 續(xù)采集處理系統(tǒng)動態(tài)范圍大、位數(shù)高,一般采用12比 特或更多比特量化,結(jié)果使得數(shù)據(jù)量急劇上升,對數(shù) 據(jù)的采集記錄造成了很大的壓力。而如何解決干涉成 像光譜儀大量數(shù)據(jù)的實(shí)時(shí)存儲問題,對于干涉成像光 譜儀來說是非常重要的。此外,由于數(shù)據(jù)采集量大而 又要求采集與顯示實(shí)時(shí)同步進(jìn)行,如何解決兩者的時(shí) 間爭用問題,以及兩者間的數(shù)據(jù)共享問題,對于數(shù)據(jù) 采集記錄系統(tǒng)實(shí)時(shí)性的解決都是非常關(guān)鍵的。
1 系統(tǒng)組成 干涉成像光譜儀輸出14路信號,1路時(shí)鐘,1路 幀同步,12路數(shù)據(jù)信號,沒有行同步。時(shí)鐘頻率為 8.987 MHz. 占空比范圍為45—55% ,幀頻固定為 68.38 Hz。高電平為正程,持續(xù)512x255個(gè)時(shí)鐘,低電 平為逆程(回掃段),持續(xù)128個(gè)時(shí)鐘。在幀同步為高 電平時(shí),數(shù)據(jù)信號傳送圖像信息,而在低電平時(shí),數(shù)據(jù) 信號傳送輔助參數(shù)。輔助參數(shù)放在對應(yīng)圖像數(shù)據(jù)的前 一逆程。由于干涉成像光譜儀傳來的光譜圖像信號是 低壓差分信號(LVDS),所以需要電平轉(zhuǎn)換卡把成該 信號轉(zhuǎn)換為1] 電平并傳給7300A 卡進(jìn)行采集,工 控機(jī)的圖像采集處理軟件對7300A卡采集的數(shù)據(jù)進(jìn) 行實(shí)時(shí)存儲、顯示等其他相關(guān)操作,每幀圖像輸出的 數(shù)據(jù)時(shí)序如圖1所示。 Read cl。ck _ ’ ’ 5 1 。 2 2 5 ; 6 = — 1 3 1 。 0 7 — 2 。 — 。 。 f1 ‘2 :; 。u — 一 : × ‘ : - J egatlve lram e Frame svnc Image data Auxiliarv data D(rD ll 圖l 數(shù)據(jù)輸出時(shí)序圖
2 數(shù)據(jù)采集 為了實(shí)現(xiàn)對干涉成像光譜儀傳來的光譜數(shù)據(jù)的 實(shí)時(shí)高速采集,選用臺灣凌華公司出品的PCI一7300A 數(shù)字I/O采集卡。它具有許多良好的特性:32位PCI 總線,32個(gè)數(shù)字輸A/輸出通道,高達(dá)80 MB/s的傳 輸速率(32 bit input/output@20 MHz),64 KB 的FI— FO,總線主控DMA方式,100針SCSI—II型的連接 器,完善的開發(fā)支持軟件【l1。 在開始數(shù)據(jù)采集時(shí),首先對采集卡進(jìn)行初始化配 置,然后開始數(shù)據(jù)采集,同時(shí)啟動一個(gè)工作線程來監(jiān) 視用戶緩沖區(qū)(用戶設(shè)置緩沖區(qū)的大小后,由采集卡 的驅(qū)動程序創(chuàng)建)的使用情況,以便及時(shí)進(jìn)行數(shù)據(jù)存 儲,最后啟動定時(shí)器控制實(shí)時(shí)顯示。其具體實(shí)現(xiàn)如下: Card=Register Card(PCI_7300A_RevB,0);//注冊卡 DI_ 7300B_ Config(Card,16,TRIG_EXT_STROBE, P7300_ W AIT_ TRG, P7300_ TERM _ ON, P7300_ DIREQ_NEG I P7300_DIACK_NEG I 7300_ DITRIG_ POS,1,0); ,/7300A卡的初始化配置。 DI ContMultiBuferStart(card,0,1);,/啟動緩存 DI_ AsyncMultiBufferNextReady(card,&Next Ready,&BufferId);//判斷緩存準(zhǔn)備好信號 m _ Timer ID=Set Timer(1,SCAN_INTERVAL, NIⅡL);,/定時(shí)開啟實(shí)時(shí)顯示
3 數(shù)據(jù)存儲 針對PCI 7300A采集卡高速采集的特點(diǎn),在凌華 公司的驅(qū)動程序包PCI DASK中,提供了專門用于實(shí) 現(xiàn)高速數(shù)據(jù)采集的連續(xù)多緩沖區(qū)操作的一組函數(shù)。通 過這組函數(shù),可以按照循環(huán)緩沖區(qū)的原理,非常方便 地實(shí)現(xiàn)對數(shù)據(jù)的連續(xù)、實(shí)時(shí)和大容量采集【21。 為了通過使用PCI 7300A高速數(shù)據(jù)采集卡和PCI DASK的雙緩沖區(qū)模式,達(dá)到實(shí)時(shí)數(shù)據(jù)存儲速率不低 于32 MB/s的目標(biāo),需使用非常規(guī)的方法。而且工作 在雙緩沖區(qū)模式時(shí),如果在第二個(gè)半緩沖區(qū)被寫滿之 前,不能完成對第一個(gè)半緩沖區(qū)中數(shù)據(jù)的處理,則會 出現(xiàn)第一個(gè)緩沖區(qū)中未處理完的數(shù)據(jù)被新數(shù)據(jù)覆蓋 的情況,最終導(dǎo)致所采集到的數(shù)據(jù)不可用。通過使用 SCSI硬盤控制器和高轉(zhuǎn)速的SCSI硬盤來解決,其硬 件結(jié)構(gòu)如圖2所示。目前,15000轉(zhuǎn)/分的SCSI硬盤, 總線數(shù)據(jù)傳輸速率80 120 MB/s,持續(xù)數(shù)據(jù)傳輸速率 大于50 MB/s,SCSI硬盤在標(biāo)識硬盤扇區(qū)時(shí)使用了線 性的概念,即硬盤只有線性的第1扇區(qū)、第2扇區(qū), ⋯ , 第n扇區(qū),該線性編排方式的優(yōu)點(diǎn)是訪問延時(shí)最 小,可加速硬盤存取速率,尤其在大容量持續(xù)數(shù)據(jù)存 儲時(shí).這種編排方式的優(yōu)點(diǎn)更加明顯。 Industrial computer EMS memory H c a ig plu h s rin pee g d c d a r a c p ing carddta I lI conStCroSl Ic ard Hr l haSrCdS d[isk 圖2 高速硬盤記錄系統(tǒng)結(jié)構(gòu)圖 Fig.2 High speed HD record system structure chart 借助于Adaptec公司所提供的ASPI(Advanced SCSI Programming Interface)中的函數(shù)[3-51,直接對SC— SI控制卡進(jìn)行操作,繞過Windows傳統(tǒng)的文件系統(tǒng), 以原始數(shù)據(jù)塊(RAW DATABLOCK)的格式,對SCSI 硬盤進(jìn)行讀/寫訪問。使用ASPI控制SCSI硬盤寫數(shù) 據(jù)的流程(如圖3所示),使用ASPI函數(shù)發(fā)出一條寫 數(shù)據(jù)指令,指令包括:主適配器號、SCSI硬盤標(biāo)識號、 邏輯單元號及寫入的位置和長度。ASPI管理器將收 到的函數(shù)指令轉(zhuǎn)換為ASPI指令傳送給ASPI驅(qū)動, ASPI驅(qū)動將ASPI指令及參數(shù)轉(zhuǎn)換為適當(dāng)?shù)腟CSI指 令,并把此指令送給SCSI控制器,該控制器依照指令 在其硬盤上執(zhí)行寫數(shù)據(jù)操作。具體步驟如下: [nput data ASP【 m anager ASP【 SCSI 卜、J High speed controller卜 SCSI HD 圖3 用ASPI函數(shù)寫高速SCSI硬盤的流程 Fig.3 Chart of writing SCSI HD witIl ASPI function
(1)建立指令 所有ASPI指令都使用一個(gè)SCSI請求塊(SRB) 的數(shù)據(jù)結(jié)構(gòu),SRB包含了SCSI指令描述塊(DDB), SCSI標(biāo)準(zhǔn)規(guī)格的指令和參數(shù)均封裝在DDB中。
(2)指令發(fā)送 在SRB被正確初始化后,就可簡單地把它的地 址傳遞給ASPI管理器,ASPI管理器將處理實(shí)際SCSI 指令的所有階段和數(shù)據(jù)傳輸。ASPI管理器使指令的 實(shí)際執(zhí)行同請求一個(gè)功能調(diào)用一樣簡單,通常只是把 SRB放在一個(gè)隊(duì)列中,且立即返回調(diào)用值,甚至在指 令開始執(zhí)行之前。這就允許應(yīng)用程序在一個(gè)指令還在 執(zhí)行的時(shí)候,就為下一條指令做好準(zhǔn)備。ASPI管理器 在后臺處理執(zhí)行這些指令過程中的所有細(xì)節(jié),然后在 指令完全執(zhí)行后,更新SRB中的狀態(tài)字段。
(3)等待指令完成 應(yīng)用程序需等待SRB完成,再執(zhí)行下一步動作。 因ASPI管理器可能在一個(gè)SRB完成之前返回。故應(yīng) 用程序一定不能分配SRB或依賴于任何SRB返回?cái)?shù) 據(jù)。保證這一點(diǎn)最簡單的方法就是這支一個(gè)循環(huán),等 待SRB狀態(tài)字段指示SRB已經(jīng)完成。但該方式浪費(fèi) 了寶貴的CPU時(shí)間。對于性能要求很高的系統(tǒng),ASPI 提供了另外一種等待的方法,即對在SRB中指明的 例行程序的一次回調(diào),當(dāng)ASPI管理器處理完SRB,它 將調(diào)用指定的例行程序。這個(gè)回調(diào)程序能夠檢查SRB 的狀態(tài)字段,并能立即執(zhí)行另外一個(gè)SRB。
(4)回調(diào)及容錯(cuò)處理 應(yīng)用程序在回調(diào)程序中,首先檢查SRB的狀態(tài) 字段,做出相應(yīng)的處理,對可能遇到的錯(cuò)誤能容錯(cuò)處 理。 在使用ASPI函數(shù)時(shí),還應(yīng)注意:(1)使DDB控制 字段中的連接標(biāo)志有效, 指出該DDB是一系列連接 指令的一部分. 避免出現(xiàn)SCSI總線的重新選擇階段 使目標(biāo)硬盤可持續(xù)連接在總線上,實(shí)時(shí)記錄數(shù)據(jù)。(2) 應(yīng)準(zhǔn)備多個(gè)SRB,把它們放人前臺的對列,只要前面 的指令完成,就用一個(gè)回調(diào)程序發(fā)送下一個(gè)要執(zhí)行的 SRB給后臺的ASPI管理器。(3)在內(nèi)存中開辟2個(gè)適 當(dāng)大小的數(shù)據(jù)緩沖區(qū),以乒乓方式將數(shù)據(jù)從采集卡送 人硬盤,數(shù)據(jù)的傳輸以中斷和DMA的方式進(jìn)行。 能直接存取SCSI硬盤后,就可以跳過Windows 的文件系統(tǒng),把每一組數(shù)據(jù)存放到硬盤中的指定位 置。經(jīng)過實(shí)測,采用Adaptec 29320一R SCSt適配卡和 Scagatc ST336753LW 硬盤(15000轉(zhuǎn)/min、持續(xù)傳輸速 率為65 MB/s的SCSI硬盤),經(jīng)ASPI函數(shù)直接控制 硬盤記錄數(shù)據(jù),記錄速度可達(dá)43—56 MB/s。配合數(shù)據(jù) 采集卡,以20 MB/s的速度持續(xù)記錄,并連續(xù)記錄30 GB,實(shí)測沒有出現(xiàn)差錯(cuò)。
4 實(shí)時(shí)顯示 如果能夠?qū)崟r(shí)觀察到干涉成像光譜儀數(shù)據(jù)采集 系統(tǒng)采集到的光譜信號,對于了解系統(tǒng)的工作狀態(tài)、 及時(shí)做出相應(yīng)的調(diào)整,將是非常有實(shí)際意義的,這就 需要把采集與顯示同步進(jìn)行。對于搶占式多任務(wù)操作 系統(tǒng)Windows來說,利用多線程技術(shù),把采集與顯示 放到不同的線程中實(shí)現(xiàn)。只須解決兩者間的協(xié)調(diào)同 步,就可以滿足采集與顯示的實(shí)時(shí)同步。在本采集程 序中,采集程序放在工作線程,顯示程序則放在主線 程中,兩者通過全局?jǐn)?shù)據(jù)對象進(jìn)行數(shù)據(jù)的共享。從共 享數(shù)據(jù)緩沖區(qū)中取數(shù)據(jù)的操作由定時(shí)器來控制實(shí)現(xiàn) 使用定時(shí)器計(jì)時(shí).最重要的一個(gè)函數(shù)是SetTimer.Set. Timer會從系統(tǒng)中獲取一個(gè)計(jì)時(shí)器時(shí)間。調(diào)用Set. Timer還必須提供一個(gè)參數(shù)。用以設(shè)置定時(shí)器的時(shí)間 間隔。每隔一段時(shí)間間隔。計(jì)時(shí)器便傳送WM_TIMER 消息給應(yīng)用程序。在程序中。創(chuàng)建一個(gè)可激活的圖像 實(shí)時(shí)顯示窗口,窗口激活后用該函數(shù)設(shè)定計(jì)時(shí)器的時(shí) 間常數(shù)。窗口創(chuàng)建后, 以此窗口句柄創(chuàng)建處理 W M _ TtMER消息的函數(shù),每隔一定的時(shí)間(比如0.1 s)圖像顯示一次。經(jīng)實(shí)驗(yàn)測定,每隔0.02 s顯示一次, 綜合性能最佳,雖然沒有達(dá)到實(shí)時(shí)顯示的效果(70 幀/s),但滿足視覺需要。另外有原始數(shù)據(jù)記錄可供調(diào) 用,因此認(rèn)為基本滿足實(shí)時(shí)顯示的要求。 在顯示過程中,采用BMP方式。我們采集到的光 譜數(shù)據(jù)是12位的數(shù)據(jù),現(xiàn)在BMP方式也可以16位 顯示,但這需要專門的硬件與之配合,成本過高。于是 采用8位的BMP方式,即只顯示高8位的光譜數(shù)據(jù), 通過內(nèi)存中寫像素點(diǎn)的方式實(shí)現(xiàn)。首先自己填寫 BMP頭。然后在內(nèi)存中寫像素點(diǎn),其代碼主要如下: for(i=0;i<512;i++) f ::舶ad((void*)(Tmp),512,1,hFile);//一次 讀一行256個(gè)點(diǎn)的數(shù)據(jù).256*2 data=Tmp; for(j=0;j<256;j++)//取2個(gè)字節(jié)進(jìn)行運(yùn)算, 2個(gè)字節(jié)剛好是1個(gè)點(diǎn)的數(shù)據(jù)16 bit(低12 bit有效)。 fdatal=data[O]>>4;低字節(jié)右移4位 data2,=data[1]<<4;高字節(jié)左移4位 data3=datalIdata2:高字節(jié)低4位與低 字節(jié)高4位合成一個(gè)字節(jié),即取12 bit的高8位 ptr【k+0]=data3;合成BMP圖像,3個(gè) p仃值對應(yīng)3個(gè)顏色分量 ptr[k+l】=data3; ptr[k+2]=data3; k=k+3; data+=2;} }
5 應(yīng)用及結(jié)論 干涉成像光譜儀光譜信號采集記錄系統(tǒng)研制完 成后,可作為地面檢測測量系統(tǒng)的組成部分。進(jìn)行過 長期的地面聯(lián)調(diào)試驗(yàn)和多次機(jī)載飛行試驗(yàn),成功地完 成了飛行試驗(yàn)任務(wù),獲取了高質(zhì)量的光譜圖像。用干 涉成像光譜儀高速數(shù)據(jù)采集系統(tǒng)采集到的光譜圖像 經(jīng)復(fù)原計(jì)算合成的彩色遙感圖像,如圖4所示【6]。