<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于Nios的掌紋鑒別系統(tǒng)設(shè)計與實現(xiàn)

          基于Nios的掌紋鑒別系統(tǒng)設(shè)計與實現(xiàn)

          作者: 時間:2006-05-10 來源:網(wǎng)絡(luò) 收藏
          引 言
          在信息化的當今世界,信息安全不管是對企業(yè)還是個人都越來越重要。生物特征鑒別在信息安全身份認證領(lǐng)域占據(jù)著重要地位[1]。傳統(tǒng)的指紋已經(jīng)商用化,但由于指紋特征十分細小,對于采集圖像設(shè)備的分辨率要求很高.導致設(shè)備成本居高不下。另外,大約有4%的人由于指紋磨損而提取不出指紋特征(如一些老年人和體力勞動者)[2],所以人們把目光投向了分辨率要求不高有可能實現(xiàn)低成本與大范圍應(yīng)用的鑒別領(lǐng)域。
          識別和鑒別是1998年才出現(xiàn)的新興生物特征識別技術(shù),經(jīng)過幾年的研究已經(jīng)達到了商用的要求(在低分辨率條件下識別率高于99%[1])。鑒別的適用范圍廣泛,從特定領(lǐng)域來說,可以廣泛應(yīng)用在銀行、法院、刑偵、監(jiān)獄等需要保密性要求比較高的部門,從大眾領(lǐng)域來說,住宅小區(qū)和生產(chǎn)車間是重要的應(yīng)用場臺。上述應(yīng)用場臺除了要求本身算法的可靠性外,還要求識別設(shè)備小型化,便攜化以及可升級性.所以擺脫PC的束縛,在嵌人式系統(tǒng)上實現(xiàn)掌紋鑒別更加具有實際應(yīng)用價值,也勢必會將掌紋鑒別推向更廣闊的應(yīng)用領(lǐng)域,然而在當前還沒有嵌入式掌紋問世。
          Nlos是Altera公司推出的一款采用流水線技術(shù)、單指令流的32位RISC軟核處理器,并針對Altera公司的可編程邏輯器件和片上可編程系統(tǒng)的思想做了相應(yīng)優(yōu)化[3,4]AlIera公司提供的SoPC Builder不僅可以創(chuàng)建和配置用戶的Ni0s,還可以添加自定義用戶指令。這使得可以很容易的與用戶邏輯結(jié)合,構(gòu)成功能更加強大的SoC系統(tǒng)。本文提出了基于軟核處理器的掌紋設(shè)計方案,并最終實際完成了該系統(tǒng)。

          1 系統(tǒng)結(jié)構(gòu)及功能概述
          從邏輯功能來看,作為一個完整的掌紋鑒別系統(tǒng)應(yīng)該具備以下兩個基本功能:鑒別和注冊。鑒別功能即根據(jù)用戶的lD和采集到的掌紋圖像判定用戶身份是否與聲明的ID相符。如果當前用戶是合法的,則記錄本次登錄,如果當前用戶是不合法的,則向系統(tǒng)管理員報告。注冊功能即將新用戶的掌紋特征添加到掌紋特征庫,并給此用戶一個新的ID。
          為了實現(xiàn)鑒別和注冊功能,將系統(tǒng)分為以下幾個模塊:圖像采集模塊、鑒別處理模塊、輸入輸出模塊和通信模塊。其中,鑒別處理模塊是整個系統(tǒng)的核心,它既要完成掌紋鑒別算法的運算,還要對其它的模塊進行控制和監(jiān)測。系統(tǒng)的結(jié)構(gòu)框圖如圖l所示


          圖像采集模塊主要包括攝像頭和外擴SRAM。由于手掌凹凸不平及受壓力不同時,導致的形變較大,所以采集掌紋圖像,一般不使用像采集指紋時使用的掃描設(shè)備。而如果采用數(shù)碼相機,系統(tǒng)的體積和成本必然上升,喪失了莫優(yōu)越性。筆者采用OmniVvision公司的OV7649攝像頭作為圖像采集設(shè)備,OV7649是30萬像素的CMOS數(shù)字攝像頭,體積極小,價格便宜,分辨率足以達到掌紋鑒別的要求。因為OV7649輸出為8位數(shù)據(jù)寬度,所以SRAM采用了與OV7649的數(shù)據(jù)寬度相同的IDT7lV424,用來作為存儲掌紋圖像的緩沖區(qū)。
          鑒別處理模塊采用的FPGA選擇Altera公司的APEX20K200F,配置了256KB的SRAM及1MB的Flash,另外我們還添置了32MB的SDRAM. SRAM和SDRAM用來為Ni0s運行程序和存儲相關(guān)數(shù)據(jù),F(xiàn)lash用來存儲提取好的掌紋樣本特征。選擇軟核CPU作為核心處理模塊主要考慮到它為設(shè)計帶來了高的集成度和靈活性,這樣再對設(shè)計方案作更改時比較方便,而且核心算法如果用Nios的用戶指令實現(xiàn),那么運算速度將會得到很大提高。AIIera也提供了一些免費的IP核,包括常用的UART、SRAM、F1ash和SDRAM控制器。這樣在S0PCBuilder里很容易定制好自己需要的Nios處理器,假如想更改其中的某些部分只需在S0PC Builder里重新配置即可。實踐證明,選擇Nios軟核處理器給后續(xù)的工作帶來很多便利。
          輸入輸出模塊和通信模塊結(jié)構(gòu)相對簡單.前者包括一些按鍵和1塊162的漢字LCD,用來提示用戶操作和顯示系統(tǒng)相關(guān)信息,后者采用的是西門子的slml00-tcp無線通信模塊。這樣可保證系統(tǒng)的報告直接可以發(fā)到系統(tǒng)管理員的手機上.同時也為連接1naternaet提供了條件,這樣系統(tǒng)的擴展性就得以增強了。

          2 系統(tǒng)的硬件設(shè)計
          系統(tǒng)硬件結(jié)構(gòu)如圖2所示.可以看到在l片F(xiàn)PGA中包含了Nios處理器、SRAM控制器、SDRAM控制器、Flash控制器、uART以及攝像頭和外擴SRAM控制器、2維DCT變換的用戶邏輯模塊。這正體現(xiàn)了Nios的優(yōu)勢,將很多資源集中在FPGA中為設(shè)計PCB帶來了便利,而且對系統(tǒng)的更改也變得非常容易,只要重新在FPGA中添加不同的模塊就可以了。筆者分別設(shè)計了2塊PCB,分別是圖像采集板和無線通信模塊,工作的重點主要在以下兩個方面。
          (1)Nios與OV7649的工作協(xié)調(diào)機制
          OV7649控制信號線使用的是oMniVisn公司的SCCB總線。SCCB總線包括SIO_C和SIO_D兩條信號線,分別代表時鐘和串行數(shù)據(jù)I/O,無論是傳輸控制命令還是讀寫數(shù)據(jù),都是由不同的時序來區(qū)分不同的操作。筆者并沒有用Nios直接與OV7649相連.而是獨立用VHDL編寫了一個控制模塊。這樣做的原因主要有兩方面:第一,OV7649輸出的像素同步時鐘頻率為24MHz,同時以30幀/s的速率輸出分辨率為640480的圖像數(shù)據(jù),如此高的數(shù)據(jù)率直接用Nios提取其中一幀圖像是不好實現(xiàn)的,因此必須編寫提取圖像寫入外擴sRAM的VHDL模塊,直接用FPGA將掌紋圖像數(shù)據(jù)寫入外擴SRAM;第二,Nios只占用了FPGA資源的三分之一左右,完全可以利用剩下的資源,這樣編寫C代碼的時候就不必考慮SCCB總線的時序。對于Nios來說,圖像采集只需發(fā)啟動和配置命令就可以實現(xiàn).然后等待控制模塊的完成信號返回,直接到外擴SRAM取數(shù)據(jù)即可。
          攝像頭控制模塊首先對攝像頭進行初始化配置。初始設(shè)定為 自動增益控制、自動白平衡、VGA格式(640 x80)、30幀/s、YuV 4:2:2數(shù)字視頻信號輸出、設(shè)置默認的圖像對比度、亮度及飽和度。然后接收OV7649產(chǎn)生的數(shù)字視頻信號、控制信號和狀態(tài)信號,即把幀同步信號VREF、行同步信號HREF、復位信號RST、像素時鐘信號PCLK等引腳連接到FPGA,根據(jù)這些信號將數(shù)據(jù)寫入外擴SRAM。圖3和圖4是OV7649輸出的各種同步信號的時序圖。
          (2)外擴SRAM的讀寫控制
          如前所述,開發(fā)板上配有256KB的SRAM和IMB的Flash。因為提取的每幀掌紋圖像至少為320402=150KB.同時圖像處理的相關(guān)代碼和掌紋樣本庫也有相當?shù)娜萘?,所以還需要外擴1MB的SRAM作為存儲采集圖像的緩沖區(qū)。為了和攝像頭的數(shù)據(jù)寬度匹配,外擴的SRAM選用了IDT7lV424,作為FPGA從OV7649輸出視頻中提取一幀圖像的存儲器。這2片SRAM必須達到以下要求 在采集圖像時為FPGA中的攝像頭控制模塊迅速將圖像數(shù)據(jù)寫入,其余時間則將資源釋放,被Ni0s統(tǒng)一管理。為此,一方面根據(jù)輸出視頻數(shù)據(jù)的高速時鐘信號利用FPGA的資源編寫了VHDL模塊;另一方面,根據(jù)SOPC Builder提供的配置文件修改.寫出了控制IDT71424的IP,并將其集成到SOPC Builder中。





          3 系統(tǒng)的軟件設(shè)計
          (1)軟件開發(fā)環(huán)境與用戶指令

          Nios的軟件開發(fā)環(huán)境叫做Nios SDK SHELL,它提供了一個基于命令行婁似于Nnix的界面,用戶在此環(huán)境下可以和Nios進行通信。我們需要先將編寫好的.c文件用nios-builder命令生成srec文件。這個過程是由Nlos SDKSHELL調(diào)用GNUpro編譯器來完成,GNUpro負責完成C代碼和相關(guān)的頭文件及庫函數(shù)的編譯、鏈接等工作。編譯通過后就可以用nios-run命令將生成的.srec文件通過串口下載到N1os上運行。在SOPC Builder中配置好Nios后,會得到為用戶生成的CPU_SDK文件夾,其中有個名為excalibur.h的頭文件,它包括Nios所有資源的地址映射和一些庫函數(shù)。

           


          用戶指令是Nios的最大特點之一,也是硬核處理器無法提供給用戶的。使用好用戶指令可以給系統(tǒng)速度帶來極大的提升。掌紋鑒別算法有很多種,對掌紋特征提取通常包括提取掌紋幾何特征、變換域特征和代數(shù)統(tǒng)計特征三大婁。在本系統(tǒng)的設(shè)計過程中,對算法的選擇主要是從如何發(fā)揮Nios的優(yōu)勢出發(fā),爭取能在系統(tǒng)的實時性、可靠性及軟硬件結(jié)合三方面拽到一個平衡點。對掌垃圖像進行DCT變換是這個處理過程中運算量最大的部分,同時這也恰恰是利用用戶指令的機會。2維DCT的處理模塊是在1維DCT的基礎(chǔ)上加以改善得到的,并且在SOPC Builder中添加為用戶指令。用戶指令的引人為系統(tǒng)速度帶來極大的提升。首先在SOPC Builder配置Nios時,分別使用MSEP和MuL兩種乘法,運行C代碼實現(xiàn),然后又用2維DCT的用戶指令來做相同圖像的處理對比.下文會有具體的測試數(shù)據(jù)。
          (2)代碼流程分析
          參照圖5所示,現(xiàn)在開始分析流程圖中各操作的具體步驟。



          用nr_installuserisr(na_button_pio_irq,palm_isr,(int)pi0)函數(shù)來建立一個用戶中斷服務(wù),對按鍵中斷響應(yīng)進入中斷服務(wù)程序palm_isr.然后向攝像頭控制模塊發(fā)送指令,需要用的函數(shù)有
          vold mitSCCBMPodule()
          void WriteSCCB(unsigned char id_addr,unsigned char sub addr,unsigend char data);
          unsigned char ReadSCCB(unsigned char id_addr,un-signed char sub_addr)
          void EndSCCBModule();
          首先用initSCCBModule函數(shù)對攝像頭控制模塊初始化,然后用WriteSCCB函數(shù)寫入需要的攝像頭配置.EndSCCBModule表示結(jié)束配置,還可以用RemdSCCB來讀取攝像頭的寄存器配置,檢查與吸入的配置是否相同。檢測到攝像頭控制模塊的完成信號,就可以從外擴SRAM讀取數(shù)據(jù)了。接著對圖像數(shù)據(jù)做一些預處理,包括提取圖像的Y分量并找到掌紋的感興趣區(qū)域。然后提取掌紋特征,這部分的運算量主要集中在DCT變換,需要使用用戶指令nm_det_2.在用戶指令執(zhí)行完畢后,既是對特征的處理,并將處理結(jié)果顯示。對于提取的掌紋特征如果需要寫入Flash儲存起來,那就需要調(diào)用
          int nr_flash erase sector(unsigned short*flash base,unsigned short*sector address)
          int nr_flash write(unsigned short*lash base unsigned short*address,unsigned short value)
          無線通信模塊需要與Nios的串口連接,用AT命令來控制打電話、發(fā)短信和訪問Internet。需要調(diào)用的串口控制函數(shù)是voidnr txstring(char*s)和int nr_rxchar(vpid)這兩個函數(shù)就是發(fā)送AT命令和接收無線模塊返回的狀態(tài)信息。

          4 測試與分析
          實驗主要分為兩個部分:正確鑒別率測試(如表1所列)和鑒別時間測試(如表2所列)。

           



          從表1的數(shù)據(jù)來分析,可以看出在樣本數(shù)不大的范圍內(nèi)隨著閾值為130時得到了96.7%的正確鑒別率.對于在Nios平臺下的掌紋鑒別來說這個結(jié)果是完全可以接受的,但是此時對擴展測試集有3.3%的錯誤接受率。筆者取的擴展測試集規(guī)模與樣本數(shù)相同,假設(shè)將此系統(tǒng)用于住宅小區(qū)門禁系統(tǒng),這就意味著此小區(qū)區(qū)外的31名人員中有1個可能能夠進人該小區(qū)。為了保證安全性筆者將閾值減小至100,系統(tǒng)對擴展測試集的鑒別效果相當好,樣本之外的掌紋不會錯識為樣本庫中的掌紋,付出的代價就是正確鑒別率下降為93.5%。眾所周知,嵌入式處理器的運算能力有限,所以對特征提取時間比較關(guān)注,這也是系統(tǒng)能否邁向?qū)嵱没年P(guān)鍵之一。表2是系統(tǒng)實時性的測試,從中可以看出在配置Nios時選用不同的乘法器(MSTEP是Nios的標準乘法器,MUL是Nios的全硬件乘法器)運算時間有所縮短,而使用用戶指令對運算的加速效果相當明顯,以上數(shù)據(jù)是使用函數(shù)hr_timer_milliseconds測試得到的。

          結(jié) 語
          本文所設(shè)計的“基于Nios的掌紋鑒別系統(tǒng)”,雖然這只能算是一個掌紋鑒別系統(tǒng)的雛形,但是完全可以完整地實現(xiàn)掌紋鑒別功能。由于本設(shè)計基于Nios軟核處理器,因此具有安裝簡單,使用方便的特點,用戶使用并不需要任何特殊的技能或培訓。另外,整個掌紋的采集與處理過程也將非常舒適與快速,增大了產(chǎn)品的適用范圍。在設(shè)計過程中,將整個系統(tǒng)分為核心處理子系統(tǒng)、圖像采集和存儲子系統(tǒng)、通信子系統(tǒng)、顯示子系統(tǒng)和供電子系統(tǒng),盡量做到這些子系統(tǒng)可以進行獨立或者部分獨立的調(diào)試。由于采用這種設(shè)計思路,系統(tǒng)從硬件結(jié)構(gòu)上相當靈活,因此該設(shè)計完全可以針對不同的具體應(yīng)用場合加以定制和優(yōu)化。各個子系統(tǒng)在硬件結(jié)構(gòu)上是模塊化的,而所有這些子系統(tǒng)的控制器全部集成在一片F(xiàn)PGA中,高集成度帶來的不僅是成本下降,還有便利性和靈活性。Nios軟核處理器的引入不僅使整個系統(tǒng)做到了真正的軟硬件可裁減.更加把這種新的設(shè)計理念帶入到嵌入式系統(tǒng)開發(fā)中。
          基于Nios的系統(tǒng)設(shè)計是傳統(tǒng)嵌入式設(shè)計和FPGA設(shè)計的綜合,而凸現(xiàn)Nios軟核處理器的特性幾乎全部需要HDL的支持??墒褂肐P的數(shù)量和HDL的造詣將直接決定系統(tǒng)的品質(zhì)。在本設(shè)計中將兩者相結(jié)臺,對高速信號的處理和算法涉及到的大量運算采用VHDL來實現(xiàn),而系統(tǒng)的總體控制及資源管理由Nios負責。在Ni0s為我們找到了高集成度與模塊化設(shè)計理想結(jié)合的問時,本設(shè)計方案也給Nios提供了最佳的應(yīng)用場合。



          關(guān)鍵詞: Nios 掌紋 鑒別系統(tǒng)

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();