基于腦電的駕駛疲勞檢測系統設計與實現,包括原理圖、電路圖等
前 言
交通事故是當前世界各國所面臨的嚴重社會問題之一,已被公認為當今世界危害人類生命安全的第一大公害,每年因交通事故的原因至少使50萬人死亡.歐美各國的交通事故統計分析表明,交通事故中80%~90%是人的因素造成的。根據美國國家公路交通安全署的統計,在美國的公路上,每年由于司機在駕駛過程中跌入睡眠狀態而導致大約10萬起交通事故,約有1500起直接導致人員死亡,7.1萬起導致人員傷害。在歐洲的情況也大致相同,如在德國境內的高速公路上25%導致人員傷亡的交通事故,都是由疲勞駕駛引起的。根據中國交通部的統計,我國48%的車禍由駕駛員疲勞駕駛引起,直接經濟損失達數十萬美元。有關汽車駕駛員的疲勞檢測問題,隨著高速公路的發展和車速的提高,目前已成為汽車安全研究的重要一環。
國外的許多國家都比較重視疲勞駕駛檢測的研究工作。尤以美國的研究發展較快,目前具有代表性的有:美國研制的打瞌睡駕駛員偵探系統,方向盤監視裝置,日本研制的DAS2000型路面警告系統,日本研制的電子“清醒帶”。對于國內,我國的疲勞駕駛檢測系統研究起步較晚,目前比較成型的系統很少。對于目前來說,不論國內國外,雖然研究的成果較多,但是還未見到一種方法是被大家所公認的。就現在而言,基于腦電波的疲勞駕駛檢測系統被國際上視作為未來該領域的發展趨勢。
腦電信號是一種微弱的生物信號,并且極易受到干擾?;?a class="contentlabel" href="http://www.j9360.com/news/listbylabel/label/腦電">腦電的疲勞駕駛檢測系統的設計思想為:首先要通過腦電采集電路采集腦電信號,再對其進行小波去噪處理,去掉腦電偽跡和高頻噪聲,最后通過處理分析腦電信號,從而給出駕駛人員的疲勞程度。系統的基本設計思想如下圖所示:
整個系統由模擬部分和數字部分組成。
模擬部分主要由信號放大電路,濾波電路,光電耦合電路以及AD6783模數轉換器構成。
數字部分主要由SPI接口控制器(ADC接口),時鐘管理器,小波去噪模塊和分析處理模塊共同組成。
第一章:模擬部分
前端信號采集電路完整實現了基于腦電的疲勞檢測系統,總體放大倍數為A=100×70×1.1×2=15400,腦電信號電壓為5μV—100μV,經全部采集電路放大濾波后,信號電壓范圍為-1.54V~+1.54V ,經電壓抬升后輸入AD信號范圍為0.71V~3.79V,外部采用12V直流供電,內部選用7805產生5V電壓。詳細情況如下:
一、腦電信號采集放大部分:
(1)前置放大電路:前置放大電路是整個腦電采集儀器設計的關鍵,它決定了整個放大電路的共模抑制比、輸入阻抗和噪聲水平。
腦電測量過程中的共模干擾特別大,腦電信號的放大一般采用差動放大電路結構。前置放大電路對集成運算放大器的要求有:高輸入阻抗;高共模抑制比;低噪聲、低漂移;低輸入失調電壓;足夠大的放大倍數及低功耗。本課題中采用AD公司的高性能儀用放大器AD620來實現前置放大。此運放有較高的技術參數,非常適合用于生理信號放大及在電池供電條件下工作的醫療儀器的應用系統。本次電路設計中,放大倍數為100倍,增益反饋電阻選為499歐姆。AD620的放大倍數G由增益電阻決定,增益
:
其中為增益反饋電阻。
二級放大電路:因前置放大后的信號仍然處于比較低的電壓水平上,現采用AD620設計二級放大電路,以進一步保證高共模抑制比、低噪聲、低漂移等電路性能,放大倍數選擇為70倍,增益反饋電阻取為715歐姆。
低通濾波電路:低通濾波采用二階巴特沃斯濾波器,采用OP07運放,截止頻率為100赫茲。
由電路,得到傳遞函數:
只有小于3時,即分母中S的一次項系數大于零,電路才能穩定工作,而不產生自激振蕩。
截止頻率為:
(4)50赫茲陷波電路:如下圖,采用典型的二階有源帶阻濾波器。
這是一種典型的二階有源帶阻濾波器,其傳遞函數為:
,式中A是運放增益。
這個電路的特點是所用器件少,調試方便。如果陷波深度不夠,可采取級聯方式提高干擾抑制能力。總的來說,50Hz工頻陷波電路在系統中起到一個很重要的作用。即使在工頻信號淹沒腦電信號的條件下,通過濾除5OHz的干擾信號,也可以得到比較理想的腦電信號。所以工頻陷波電路是生物電信號采集中不可缺少的環節。本電路通過50Hz陷波器的引入,成功的去除了50Hz工頻干擾。
高通濾波電路:人體中存在極化電位,這些電信號是直流信號,因此需要設計高通濾波器將這些直流濾除。采用一個簡單的一階有源RC高通濾波電路,截止頻率為0.1Hz,增益為2。電路如下:
電壓抬升電路:腦電信號是雙極性型號,由于AD轉換器對輸入信號的電壓要求為正,故在AD轉換之前,通過電壓抬升電路,把信號的幅度調整為正,同時通過適當調整電壓值浮動范圍,確保與之后的模數轉換電路匹配。電路中采用了可穩定地提供4.5V的基準電壓的電壓基準源MAX6107。電路如下:
在反向比例運算電路中,同向輸入端通過電阻接地,此為補償電阻,以保證集成運放輸入級差分放大電路的對稱性,須滿足
。
由電路得:
。
差分比例電路中,在參數對稱前提下,電路實現了對輸入差模信號的比例運算,最后得:
二、模數轉換部分:
AD轉換電路——光耦隔離電路
(1)AD轉換電路:采用16位采樣速率可調的A/D轉換芯片,不但保證了A/D轉換的精度,而且可以滿足并更改需要的A/D的轉換速率。
AD7683是AD公司生產的一種低功耗高精度16位高速串行A/D轉換器,它適用于儀器儀表、便攜式探測器及各種電池供電的應用場合。采用AD7683和MAX6107設計的A/D轉換電路圖如下:
(2)光耦隔離電路:在腦電采集電路與FPGA開發板之間,采用光耦隔離電路做接口,把兩者隔離開,防止FPGA開發板上的高頻數字信號對腦電采集電路的干擾。同時,光耦隔離電路還有電壓轉換的作用,由于AD轉換芯片的工作電壓為5V,其輸出的數字信號電壓也可達5V,而FPGA芯片的管腳電壓為3.3V。光耦隔離兩端采用不同的上拉電壓以實現兩者的匹配。
6N136是一個高速光耦芯片,其工作速度可達1Mbit/s,帶寬為2MHz。圖中,U14、U15和U16分別對DCLK、DOUT和CS進行隔離,U17對電源控制信號POWER進行隔離。
第二章:數字部分
- SPI控制模塊的實現
我們采用16位串行A/D轉換器AD7683,其工作時序如下圖所示:
DCLOCK為AD7683時鐘控制信號,由FPGA產生。CS為AD7683選通信號,低電平有效,由FPGA產生。一次A/D轉換至少需要22個時鐘周期,至多為24個時鐘周期。Dout為AD7683轉換輸出信號為串行總線,與FPGA相接,為FPGA提供數據。
依據該時序要求,我們設計了SPI控制器。SPI控制器主要由有限狀態機實現。狀態機轉換邏輯,如下圖所示:
依據狀態機邏輯轉換圖,我們設計程序,經過modelsim仿真得到如下圖:
此設計符合AD7683的時序邏輯。
- 時鐘管理器
依據腦電信號的特點,我們的采樣平率為256Hz,我們采用33MHz的系統時鐘,對其進行11分頻,得到3MHz在對其進行相應的分頻后,分別得到6.144KHz(SPI控制器工作頻率), 4.608KHz(第一級小波工作頻率,FFT工作頻率), 2.304KHz(第二級小波工作頻率), 1.152KHz(第三級小波工作頻率), 576Hz(第四級小波工作頻率)。
時鐘管理器示意圖如下所示:
- 小波去噪模塊的實現
離散小波的基本原理
小波變換是一種信號的時間—尺度(時間—頻率)分析方法,它具有多分辨率分析(Multi-resolutionAnalysis)的特點,而且在時頻兩域都具有表征信號局部特征的能力,是一種窗口大小固定不變,但其形狀可改變,時間窗和頻率窗都可以改變的時頻局部化分析方法。即在低頻部分具有較高的頻率分辨率和較低的時間分辨率,在高頻部分具有較高的時間分辨率和較低的頻率分辨率,很適合于探測正常信號中夾帶的瞬態反?,F象并展示其成分,所以被譽為分析信號的顯微鏡。
依據腦電信號自身特性,我們選擇DB4小波,圖為小波變換的示意圖:
離散小波變換的整體設計思想
采用四級小波分解,每一級的小波系數由FIFO進行暫存,協同去噪模塊進行讀取,去噪,以及去噪后的合成工作,整個離散小波變換采用流水結構,其中小波分解和小波合成兩個模塊可達到262MHz,小波去噪模塊可達到167MHz,整個離散小波模塊可以達到167MHz。
MALLAT算法
MALLAT算法是由法國科學家于1988年提出的一種離散小波變換(DWT)的快速算法。該算法的地位相當于快速福利葉變換在經典傅里葉分析中的地位,已成為各種硬件實現的直接理論依據。MALLAT算法中的核心是濾波模塊,由濾波模塊實現小波的分解與合成,下圖給出MALLT算法的小波分解示意圖:
小波去噪模塊核心設計
補碼運算器
AD采樣輸出的為數據的原碼,我們需要將其變換為補碼。
對于正數而言,它的原碼等于它的補碼;對于負數而言,它的補碼是對其原碼除符號位之外進行取反后加一處理。因此,補碼器的設計示意圖如下:
DA算法及其濾波器的實現
DA算法是distributed arithmetic算法的簡稱。中文譯為分布式算法。小波濾波器的實現采用分布式算法實現。分布式算法作為一項數字信號處理算法,廣泛應用于計算乘積和運算,與傳統的乘積和結構相比,DA算法具有并行處理的高效性特點。若采用分布式算法實現小波濾波器,則它在FPGA中的工作速度只與輸入數據的寬度B有關,與濾波器的階數N無關,階數只影響FPGA資源的使用量。
在高速環境下,往往使用DA算法封裝成一個乘法器代替DSP進行使用,從而實現濾波器的設計工作,但是這樣過于耗費資源。我們通過分析卷積原理,優化了濾波器實現結構,這樣不僅節省了大量的資源,而且在速度上也完全可以滿足實時高速要求。具體優化為:
(1)使用串并轉換結構,從而達到復用乘法器的目的,可以指數倍的節省硬件資源。
基于這種結構的濾波器無論是多少階的濾波器都只使用一個DA乘法器。
(2)多位并行查找表結構,速度大大提高。
濾波器實現結構示意圖如下:
依據該濾波器結構,編寫程序,經過modelsim仿真得到如下圖:
下面給出MATLAB仿真
注意:此時的濾波器已經實現了下兩點抽取,因此x_out顯示的為MATLAB中y輸出的偶數點。
經MATLAB驗證,濾波器設計無誤。
下兩點采樣器
依據MALLAT算法,我們要對每一級輸出的數據進行下兩點采樣處理,因此我們設計的下兩點采樣器示意圖如下:
異步FIFO(1024點)
異步FIFO在整個系統中,擔當系統暫存的作用,因此要保證數據的丟失概率足夠的低,因而需要設計一個高可靠的,高速率的異步FIFO需要解決以下問題:
(1)同步異步信號,使觸發器避免亞穩態的產生。我們采用了兩措施解決這一問題:
a).對寫地址/讀地址采用格雷碼。
b).采用觸發器來同步輸入信號。
(2)產生正確的滿/空標志信號。我們通過設置額外狀態位的辦法來準確判斷滿/空狀態。
判斷滿/空標志的公式:
Empty=(讀指針=寫指針);
Full=(讀指針最高位/=寫指針最高位)and (讀指針其它位=寫指針其它位);
243點中值選取器
243點中值選取器的基本作用就是選取hi_d1小波系數中的中間值,之后對中間值進行簡單運算處理,從而得到小波去噪的門限值,以便進行之后的小波去噪運算。
在計算機應用當中,中值算法已經相當成熟,高效。但對于FPGA來講,還沒有發現一種既節省資源又可以執行效率高的中值算法。因此我們采取了諸多嘗試,首先我們嘗試著修改計算機中的冒泡法以便可以移植到FPGA中應用,但是我們發現假如將冒泡法利用在FPGA上會出現以下情況:
(1)無法綜合或者很難綜合,極易產生錯誤
(2)嚴重耗費資源,延時不佳,若243點中值采用冒泡算法占用資源量是一般FPGA所吃不消的。
后來我們又嘗試過幾種算法,例如基于三點中值選取器的全流水結構的243點中值選取器,資源占用雖然有所改善,但是耗費資源依然嚴重,需要耗費10000多個以上LUT,一般的FPGA仍然很難吃消。
而后,我們通過分析基于三點中值選取器的結構的全流水結構,發現了3點中值選取器利用率過低,所以經過重新設計我們采用了一種新的設計結構:一種基于復用9點中值選取器的全流水的243點中值選取器,該種結構較基于三點中值選取器的全流水結構可以節約94%的LUT資源,并且時鐘頻率仍然保持在175MHz以上。
其核心思想為:將大量數據進行分段處理,做到少量多次,并且使用流水結構達到實時處理關鍵要求。
分析以上結構,如果我們將第三級的3點中值選取器更換為9點中值選取器,那么它將可以實現729點的中值選取功能,而若使用基于三點中值選取器的全流水結構來實現729點中值選取的功能那么其資源耗費可想而知。如下圖所示為兩者資源耗費的關系圖例:
3點中值選取器
3點中值選取器的基本功能是完成對于三個輸入數據完成尋找其中值的功能,設計流程圖如下圖所示:
9點中值選取器
9點中值選取器的構造是基于3點中值選取器的全流水結構,其結構示意圖如下圖所示:
根據結構示意圖,編寫程序,經modelsim仿真,得到如下圖:
我輸入的數據1-486,則算出的中值為122和365,這與邏輯分析相同,設計正確無誤。
去噪分析器
去噪分析器的基本功能是完成hi_d4與去噪門限的比較,如果hi_d4大于去噪門限就認為是噪聲,則此點被置零,如果hi_d4小于去噪門限則保持不變輸出。設計流程圖如下圖所示:
小波分解模塊的實現
依據MALLAT算法,小波分解模塊主要是實現對于腦電信號的各個頻譜分量的分解工作,而MALLAT算法實現的關鍵在于小波濾波器。下圖為小波分解模塊的結構示意圖:
數據經補碼器流入小波分解高通濾波器(HI_D)和小波分解低通濾波器(LO_D)濾波后經下兩點采樣后完成一級小波分解運算,小波的高通系數被寄存在FIFO當中等待合成運算。小波的低通系數繼續流入下一級小波分解模塊,對信號進一步分解。
以上是通用的小波分解算法,其優點是適用于各種信號的分解,但是我們通過分析本次課題設計的目的可知:腦電信號的頻率范圍是從1Hz~250Hz,而我們所關心的只有10~13Hz和18~22Hz的頻帶信息,即我們只關心腦電信號50Hz以下的頻帶信息,其余的頻帶信息在本次課題設計中是無用的,因此我們依據小波分解的概念,提出了更為節省資源的小波分解模塊的實現方法;下圖為應用于腦電疲勞檢測的小波分解模塊的結構示意圖:
該種結構節約了兩個小波高通濾波器(HI_D)和兩個1024點的FIFO,節約資源不可忽視。
小波合成模塊的實現
小波合成模塊主要是為了實現在小波去噪之后的各級小波系數的合成工作。根據MALLAT算法,小波合成的實現依然要依靠小波合成高通濾波器(HI_R)和小波合成低通濾波器(LO_R)。下圖為小波合成模塊的結構示意圖:
以上是通用的小波合成算法,其優點是適用于各種信號的合成,但是我們通過分析本次課題設計的目的可知:腦電信號的頻率范圍是從1Hz~250Hz,而我們所關心的只有10~13Hz和18~22Hz的頻帶信息,即我們只關心腦電信號50Hz以下的頻帶信息,其余的頻帶信息在本次課題設計中是無用的,因此我們依據小波合成的概念,提出了更為節省資源的小波合成模塊的實現方法;下圖為應用于腦電疲勞檢測的小波合成模塊的結構示意圖:
以上節約了兩個FIFO,節約資源不可忽視。
- 分析處理模塊的實現
腦電信號與疲勞檢測的基本理論
腦電信號與人體疲勞的關系
近年來學者對腦電的研究表明,18~22 Hz及更高頻率的腦電主要是大腦思維活動活躍的體現,所以當駕駛員處于疲勞狀態時,大腦的思維活動會降低,從而β波及高頻腦電會減少,而腦電的α波會增多;當從疲勞轉為瞌睡或睡眠狀態時,占主導的腦電頻率會逐步降低為2~4Hz的δ波。
經過學者的分析,如果使用10~13 Hz和18~22 Hz兩個頻帶的平均功率譜比值作為疲勞駕駛腦電的一個指標是可行的。
設信號在頻帶h的平均功率譜密度為
式中:
疲勞狀態下,無論駕駛員處于何種動作狀態下,R值都比精力充沛時R值要高。
處理分析模塊的整體結構及其功能
分析處理模塊主要完成對信號的分析處理工作,從而最終給出腦電的駕駛疲勞系數。其結構示意圖如下圖所示:
經小波去噪模塊后的數據,逐個進入FIFO進行寄存,同時讀時能計數器自動加1,當FIFO中寄存了256個數據時,此時讀時能寄存器計數值也為256,此時發出讀時能信號給FIFO同時發出開始信號給FFT,數據將以CLK_fft的時鐘節拍下從FIFO中讀出進入FFT模塊,FFT開始進行快速傅里葉計算,之后將結果進行數據輸出,同時帶有地址信息,選擇乘法器選擇地址信息為10-13,18-22點的數據進行乘法運算之后進行加法運算并分別輸出為10-13Hz的實數加和結果(RE_13),10-13Hz的虛數加和結果(IM_13),18-22Hz的實數加和結果(RE_18)和18-22Hz的虛數加和結果。將RE_13和IM_13做加和運算作為除法器的被除數,將RE_18和IM_18做加和運算作為除法器的除數,最后完成兩者的除法運算,給出疲勞系數(即除法器的商和余數)。
FFT core的調用
我們調用的為256點的FFT的CORE,采用流水結構,輸入輸出位寬為17位,使用縮放因子,設置截位處理為項下截取,順序輸出,選擇使用BLOCK RAM,未進行任何特殊優化。
FFT主要完成的功能就是對信號進行時頻域變換,從而可以對其進行頻譜能量的相關計算。在本次課題設計當中我們主要關心的為10-13Hz 和18-22Hz的腦電頻譜成分,對應到FFT上約為10-13點和18-22點的X(K)。
選擇乘法器
選擇乘法器的基本工作就是根據地址信息,選擇性的選取數據進行乘法運算,該乘法運算調用了DSP48E模塊,并將乘法結果輸出到加法器當中進行累加運算。從而得到實部乘積和虛部乘積。其結構示意圖如下所示:
加法器
加法器的基本功能就是完成加法運算。
除法器
對于所有的FPGA綜合軟件都可以綜合“+,-,*”三種算術運算,但是不能綜合除法運算,即使在計算機中所有的除法運算也是通過乘法運算間接完成的,因此在FPGA當中設計除法器是一個難點。
常用的除法算法主要有兩種,一種為線性收斂,另一種為二次收斂方案。
我們采用線性熟練的除法算法,即restoring(還原)除法,首先調整分母并加載分子到余數寄存器中,然后從余數中減去調整的分母并將結果存在余數寄存器中,如果新的余數為正,我們就將商加1,否則商不變并且還需要通過加上分母來還原從前的余數值。我們采用狀態機對其進行實現。
疲勞判決的預警裝置
依據文獻所給出的如下數據:
數據表明:疲勞狀態下,無論是處于靜坐、平穩駕駛還是換擋操作下,腦電α和β波的R值(3·00~4·00)都比精力充沛時的R值(1·00~1·50)要高,說明腦電α和β波的R值能較好地反映出疲勞時的腦電特性.而腦電α波和δ波在疲勞狀態下的R值(0·40~1·30)與精力充沛狀態下的R值(0·10~0·70)相比,就相差較小,有交叉區間,不能明確區分兩種狀態.這是因為δ波頻率為2~4Hz,容易受到身體移動等干擾的影響.因此,用腦電α和β波頻帶的平均功率譜密度比值R作為疲勞的腦電特征量是比較合適的.
依據以上數據與結論,我們設計了一種簡單的預警裝置。
第三章:開發總結及其擴展方向
一.開發總結
(1)系統分為模擬采集和數字處理兩個部分:
模擬采集部分主要完成了對于腦電信號的提取放大和去噪的基本任務并通過串行轉換器AD7683將AD轉換后的腦電信號傳送給FPGA當中。
數字處理部分主要完成了對于腦電信號的小波分解,去噪,合成的基本步驟從而實現了小波去噪功能,得到較為純凈的腦電信號,之后對腦電信號進行分析處理,主要完成了FFT運算,得到10-13Hz,18-22Hz的頻帶信息,并對其進行功率運算,最后利用除法器取其比值從而得到基于腦電的疲勞駕駛系數,做出了預警處理,提高了駕駛人員的駕駛安全系數。
(2) 系統的最高頻率為167MHz左右,總資源使用率為10256個slice(占總資源數的14%),4個block ram(占總資源數的2%),16個DSP48ES(占總資源數的21%),小波分解與合成的速率在262MHz左右。系統工作速率的主要瓶頸在于243點中值選取器,代碼及算法優化后,可望進一步提高小波去噪的整體工作頻率。
(3)對于基于腦電信號的疲勞檢測我們現在仍然處于探索階段,因此還不能完確把握24個電極疲勞系數的融合方法,從而給出一個更為精確,科學的駕駛疲勞系數,但以初步完成了對于駕駛疲勞的測定,對今后的設計有很大的參考價值。
(4)如果繼續優化代碼和系統結構將系統使用資源降到最低,那么我們可以使用FPGA的低端產品進行開發,從而大大降低了開發成本。
(5)本系統通過有線形式對腦電進行采集,這對于一個駕駛中的人來講是極其不方便的,因此對于腦電采集我們可以采取無線方式。
二.創新點總結
(1)DA濾波器的結構改進,硬件資源成指數倍的節約。主要對一下兩方面做出了改進優化:
a).使用串并轉換結構,從而達到復用乘法器的目的,可以指數倍的節省硬件資源。
基于這種結構的濾波器無論是多少階的濾波器都只使用一個DA乘法器。
b). 多位并行查找表結構,速度大大提高。
(2)243點的中值選取器的創新結構(基于復用9點中值選取器的全流水結構),硬件資源節省都在90%以上,而且效率保持在很高的一個水平,約為167MHz。該結構的優勢相對于3點中值選取器的全流水結構的優勢在于其點數越多所能節約的硬件資源會越多,經理論計算甚至可以節約資源達到98%左右。
(3)依據腦電信號的自身特點,我們提出了小波分解與合成的更為節省資源的結構,使得將腦電信號的小波去噪模塊移植到低端FPGA上成為可能。在本次課程設計當中,我們只需要10-13Hz和18-22Hz的頻帶信息,因此在小波分解時可以舍去其高頻信號的濾波,而直接判定其為零,這樣可以大大節約硬件資源。
(4)首次在FPGA實現了基于腦電的駕駛疲勞檢測的整個系統。對于今后FPGA在腦電信號的應用與開發領域起到了一定的參考作用。
三.擴展方向
(1)本次開發所設計的小波去噪模塊是具有通用性的,不僅可以用于腦電信號的去噪,還可以應用在心電信號,肌電信號,地震信號,雷達信號,通信信號及其他各種相關類似信號的去噪工作上。
(2)單對腦電信號而言經過小波去噪后,可以應用于腦機接口技術的開發,大腦病變信號的醫療檢測,以及腦電信號在假肢上的應用等。
評論