李雪陽,史 剛,焦 騰,梁福來,王健琪*
(1.空軍軍醫(yī)大學(xué)軍事生物醫(yī)學(xué)工程學(xué)系,西安 710032;2.西安電子科技大學(xué)生命科學(xué)學(xué)院,西安 710126)
生物雷達(dá)技術(shù)是一種新概念的生命體參數(shù)信號非接觸探測技術(shù),旨在通過雷達(dá)探測的方式,實現(xiàn)一種不用電極等介質(zhì)接觸人體,在一定距離內(nèi)、相隔一定介質(zhì)、對人體無約束的情況下,探測目標(biāo)人體的體征,如呼吸、心跳等生理參數(shù)信號[1]。生物雷達(dá)技術(shù)通過不斷的發(fā)展在很多領(lǐng)域有著良好的應(yīng)用,如自然災(zāi)害救援、生命體征(如心率等)的非接觸式監(jiān)測、生命體目標(biāo)定位、人體目標(biāo)的運(yùn)動狀態(tài)識別[2]、人體語音信號探測[3]、醫(yī)療臨床監(jiān)測[4]等。但是現(xiàn)有的生物雷達(dá)系統(tǒng)存在一定不足,如單個生物雷達(dá)的探測區(qū)域有限,而多個生物雷達(dá)同時探測時數(shù)據(jù)之間無法互通互連統(tǒng)一進(jìn)行處理。張自啟等[5]對生物雷達(dá)探測時的遮蔽效應(yīng)進(jìn)行了研究,表明采用多個生物雷達(dá)同時進(jìn)行探測可以有效改善生物雷達(dá)探測時遮蔽效應(yīng)的影響。
目前,已有團(tuán)隊對分布式生物雷達(dá)系統(tǒng)進(jìn)行了研究。魯汶大學(xué)的Mercuri等[6]設(shè)計并實現(xiàn)了一種室內(nèi)無線實時人體健康狀態(tài)監(jiān)測系統(tǒng),該系統(tǒng)基于雙模雷達(dá)對室內(nèi)的人體進(jìn)行跌倒檢測和定位,且不需要人體上配有射頻識別設(shè)備。明治大學(xué)的Shingu等[7]討論了在室內(nèi)環(huán)境下使用多發(fā)多收的超寬帶雷達(dá)對人體的探測,并進(jìn)行了仿真研究。Tian等[8]設(shè)計了用于語音通話識別的無線生物雷達(dá)網(wǎng)絡(luò)系統(tǒng),采用35.5 GHz生物雷達(dá)作為雷達(dá)終端,并向人體發(fā)射無線電波,從回波中提取語音信號。但國內(nèi)外均少見針對人體生命體征的分布式生物雷達(dá)實時探測研究。
本文提出了一種無線分布式生物雷達(dá)系統(tǒng),其在單生物雷達(dá)技術(shù)基礎(chǔ)上,采用多個生物雷達(dá)同時進(jìn)行組網(wǎng)探測,生物雷達(dá)終端位置靈活可變,探測方位、角度可根據(jù)需求實時變化,可同時采集多個生物雷達(dá)的數(shù)據(jù)并進(jìn)行處理,以獲得針對某一個區(qū)域多角度的探測,從而擴(kuò)大系統(tǒng)的探測范圍,提高探測效率。
無線分布式生物雷達(dá)系統(tǒng)由生物雷達(dá)模塊、無線控制終端模塊、無線網(wǎng)絡(luò)通信模塊、分布式生物雷達(dá)系統(tǒng)軟件4個部分組成。
生物雷達(dá)模塊采用本課題組研制的JC123-5.0UA2連續(xù)波生物雷達(dá),輸入電壓5 V,輸出兩路直流信號,分別為呼吸和心跳信號。JC123-5.0 UA2連續(xù)波生物雷達(dá)體積小巧、質(zhì)量輕,軸向探測距離可達(dá)10 m,水平探測方位角度可達(dá)±40°,具有一定的穿透能力,是無線分布式雷達(dá)系統(tǒng)前端的良好選擇。
無線控制終端模塊是連接生物雷達(dá)前端和無線通信模塊的重要環(huán)節(jié),主要包括供電電路、AD轉(zhuǎn)換電路、濾波電路以及與無線模塊連接的串口電路等,可對雷達(dá)傳輸?shù)闹绷餍盘栠M(jìn)行AD轉(zhuǎn)換,并在分布式生物雷達(dá)系統(tǒng)軟件的控制下進(jìn)行數(shù)據(jù)打包及與ZigBee無線模塊通信。
本系統(tǒng)的無線網(wǎng)絡(luò)由基于ZigBee技術(shù)的無線網(wǎng)絡(luò)通信模塊實現(xiàn)。該模塊體積小、功耗低、傳輸速度快、網(wǎng)絡(luò)穩(wěn)定,具有方便快捷的自組網(wǎng)功能,上電后即可快速地建立起一個全聯(lián)通的無線網(wǎng)絡(luò)。Zig-Bee技術(shù)與Wi-Fi、藍(lán)牙技術(shù)相比,具有協(xié)議簡單、功耗低、傳送距離遠(yuǎn)等優(yōu)點(diǎn),是無線分布式生物雷達(dá)系統(tǒng)網(wǎng)絡(luò)通信技術(shù)的良好選擇[9]。最終實現(xiàn)的無線分布式生物雷達(dá)系統(tǒng)終端硬件節(jié)點(diǎn)如圖1所示。
圖1 無線分布式生物雷達(dá)系統(tǒng)終端硬件節(jié)點(diǎn)
分布式生物雷達(dá)系統(tǒng)軟件是無線分布式生物雷達(dá)系統(tǒng)的重要組成部分,是配置系統(tǒng)參數(shù)、控制系統(tǒng)監(jiān)測、展示監(jiān)測結(jié)果的平臺。其中,配置的系統(tǒng)參數(shù)包括當(dāng)前探測條件所需終端節(jié)點(diǎn)的個數(shù)、錨節(jié)點(diǎn)的個數(shù)、與無線通信模塊通信時的波特率等;系統(tǒng)監(jiān)測的控制包括對探測目標(biāo)的呼吸頻率及心跳頻率進(jìn)行監(jiān)測和計時;監(jiān)測結(jié)果的展示包括探測目標(biāo)呼吸頻率、心跳頻率的實時波形動態(tài)顯示和實時信號頻率分析、處理與顯示。本文主要論述分布式生物雷達(dá)系統(tǒng)軟件(以下簡稱“系統(tǒng)軟件”)的設(shè)計與實現(xiàn)。
分布式生物雷達(dá)系統(tǒng)軟件是控制整個監(jiān)測系統(tǒng),處理、展示監(jiān)測數(shù)據(jù)的軟件。根據(jù)系統(tǒng)功能,提出的設(shè)計需求如下:
(1)良好的可擴(kuò)展性??筛鶕?jù)探測需求靈活更改系統(tǒng)配置,如終端節(jié)點(diǎn)的個數(shù)、錨節(jié)點(diǎn)的個數(shù)等。
(2)實時控制終端節(jié)點(diǎn)的開始、停止,進(jìn)行監(jiān)測計時。
(3)數(shù)據(jù)的分析、處理和顯示。對各個終端節(jié)點(diǎn)的采集數(shù)據(jù)進(jìn)行分析、處理,進(jìn)行實時顯示。
(4)原始數(shù)據(jù)存儲。將各個終端節(jié)點(diǎn)的原始數(shù)據(jù)進(jìn)行存儲,以便后續(xù)研究。
根據(jù)以上需求,系統(tǒng)軟件的總體層次結(jié)構(gòu)如圖2所示,分為數(shù)據(jù)通信層、數(shù)據(jù)處理層、數(shù)據(jù)分析層和用戶界面顯示層。
圖2 軟件結(jié)構(gòu)圖
(1)數(shù)據(jù)通信層。串口是計算機(jī)與外設(shè)之間連接的基本通路,串口通信一般遵從RS232、RS485等通信協(xié)議,統(tǒng)一通信協(xié)議的硬件接口即可與計算機(jī)建立通信,進(jìn)行數(shù)據(jù)互通。無線分布式生物雷達(dá)系統(tǒng)終端硬件節(jié)點(diǎn)中使用的無線網(wǎng)絡(luò)通信模塊(即DL-LN33 ZigBee無線通信模塊)為晶體管-晶體管邏輯(transistor-transistor logic,TTL)電路,其輸出經(jīng)過CP2102模塊轉(zhuǎn)換即可實現(xiàn)與計算機(jī)的通信。CP2102是一款直插式USB、通用異步收發(fā)傳輸器(universal asynchronous receiver/transmitter,UART)轉(zhuǎn)換模塊,其 USB 端直接接入計算機(jī)USB插口,在計算機(jī)上安裝相應(yīng)驅(qū)動后,該USB端口即模擬為一個新的RS232串口,可在CP2102模塊中將RS232信號轉(zhuǎn)換為TTL信號,從而能與DL-LN33 ZigBee無線通信模塊進(jìn)行通信。
數(shù)據(jù)通信層主要對通信鏈路進(jìn)行操作,從通信鏈路向無線網(wǎng)絡(luò)中各個終端節(jié)點(diǎn)模塊發(fā)送命令,并接收采集的數(shù)據(jù)。系統(tǒng)軟件數(shù)據(jù)通信層需要實現(xiàn)的主要功能如下:
①串口的初始化。應(yīng)用程序啟動時,進(jìn)入連接子菜單。在連接窗口打開時,系統(tǒng)軟件自動檢測當(dāng)前與終端模塊物理連接的端口,用戶也可在此處對串口進(jìn)行屬性設(shè)置(如波特率等),設(shè)置完成后點(diǎn)擊“連接”即可建立與終端無線模塊的通信。
②命令發(fā)送。初始化子菜單中,系統(tǒng)軟件發(fā)送采集命令,并遍歷所有網(wǎng)絡(luò)中的節(jié)點(diǎn)以及錨節(jié)點(diǎn)來獲取每個終端節(jié)點(diǎn)間的接收信號強(qiáng)度指示(received signal strength indication,RSSI)信號衰減數(shù)據(jù)。同時,將命令發(fā)送函數(shù)設(shè)定為每25 ms發(fā)送一次以獲取某2個節(jié)點(diǎn)間的RSSI信號衰減數(shù)據(jù),共采集100次,為無線網(wǎng)絡(luò)定位提供原始數(shù)據(jù)。正式開始監(jiān)測時,用戶點(diǎn)擊“開始監(jiān)測”按鍵,系統(tǒng)軟件即向各個終端節(jié)點(diǎn)分別發(fā)送一次開始監(jiān)測指令,停止監(jiān)測時同樣遍歷一次,即實現(xiàn)了對監(jiān)測的控制功能。
③數(shù)據(jù)接收。數(shù)據(jù)接收根據(jù)工作狀態(tài)分為RSSI數(shù)據(jù)接收和監(jiān)測數(shù)據(jù)接收2種不同的模式,一般默認(rèn)為RSSI接收模式。在RSSI數(shù)據(jù)接收模式下,串口注冊的接收事件在接收到1個字節(jié)時即被觸發(fā),但接收線程會休眠5 min,5 min后所有節(jié)點(diǎn)的RSSI數(shù)據(jù)在緩沖區(qū)中接收完成,此時將所有采集數(shù)據(jù)一并從緩沖區(qū)中取出并傳遞給數(shù)據(jù)處理層進(jìn)行處理,同時清空緩沖區(qū)。在系統(tǒng)開始監(jiān)測后,RSSI接收模式會轉(zhuǎn)變?yōu)楸O(jiān)測數(shù)據(jù)接收模式,此時接收事件仍在接收到1個字節(jié)時觸發(fā),但休眠時間縮短為30 s,30 s后即開啟數(shù)據(jù)處理線程,從緩沖區(qū)中實時取出所接收的采集數(shù)據(jù)進(jìn)行實時處理。此時緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)為隊列結(jié)構(gòu),設(shè)置為先進(jìn)先出模式,以確保監(jiān)測數(shù)據(jù)的不間斷接收和實時處理。
(2)數(shù)據(jù)處理層。數(shù)據(jù)處理層功能分為2個模式,分別為初始化模式和監(jiān)測模式。在初始化模式下,從數(shù)據(jù)通信層接收緩存中一次性取出所有數(shù)據(jù)進(jìn)行數(shù)據(jù)包的分割、RSSI數(shù)據(jù)提取及最后RSSI數(shù)據(jù)的存儲和寫入。在監(jiān)測模式下,每隔30 s對接收緩存中的數(shù)據(jù)進(jìn)行處理、分析并清空。
(3)數(shù)據(jù)分析層。根據(jù)系統(tǒng)實時性的要求,在進(jìn)行監(jiān)測數(shù)據(jù)采集時需要實時對數(shù)據(jù)進(jìn)行處理、分析,以便對監(jiān)測對象和區(qū)域進(jìn)行直觀的展示。數(shù)據(jù)經(jīng)過數(shù)據(jù)處理層傳遞到各個雷達(dá)對象后,系統(tǒng)軟件對呼吸和心跳數(shù)據(jù)進(jìn)行信號處理分析、頻率提取等過程。
(4)用戶界面顯示層。.NET框架因提供了大量的類庫使得方便快捷地進(jìn)行Windows窗體設(shè)計成為可能,其可視化的界面設(shè)計方式大大提高了界面設(shè)計效率,且控件庫內(nèi)豐富的控件類型降低了設(shè)計的難度?;谝陨霞夹g(shù),根據(jù)系統(tǒng)軟件的實際需求,本課題組設(shè)計了直觀、友好、操作簡便的人機(jī)交互界面,如圖3所示。
圖3 分布式生物雷達(dá)系統(tǒng)軟件用戶界面
用戶界面主要分為3個部分:目標(biāo)參數(shù)顯示區(qū)、控制區(qū)和菜單欄。其中目標(biāo)參數(shù)顯示區(qū)按照系統(tǒng)軟件初始化時設(shè)定的當(dāng)次監(jiān)測所使用的終端節(jié)點(diǎn)個數(shù)n劃分為n個顯示區(qū)域。每個區(qū)域擁有2個顯示窗格,分別顯示呼吸和心跳信號;2個文本顯示框顯示經(jīng)過處理分析后提取的信號頻率數(shù)據(jù)。
面向?qū)ο缶幊淌浅S玫木幊桃?guī)范,其對象可以是研究的具體事物,如數(shù)字、物體等,也可以是抽象的計劃、事件。對象中包括對象的描述、對象的方法、對象的操作等內(nèi)容,將這些內(nèi)容封裝在一起即稱為對象。類是面向?qū)ο缶幊趟枷氲幕A(chǔ)實現(xiàn),是一種對象的集合。終端節(jié)點(diǎn)是無線分布式生物雷達(dá)系統(tǒng)的基本組成部分。為了在系統(tǒng)軟件中對各個終端節(jié)點(diǎn)進(jìn)行更好的管理,在數(shù)據(jù)處理的同時體現(xiàn)系統(tǒng)軟件良好的可擴(kuò)展性,本課題組設(shè)計了終端節(jié)點(diǎn)類以實現(xiàn)所需功能。在添加終端節(jié)點(diǎn)時,系統(tǒng)軟件即可自動生成配置系統(tǒng)參數(shù)時所需要的個數(shù)的對象實體,各個對象實體對對應(yīng)的數(shù)據(jù)及方法可以同時操作,相互獨(dú)立、互不干擾,大大地提升了系統(tǒng)軟件的靈活性。終端節(jié)點(diǎn)類的結(jié)構(gòu)如圖4所示。
圖4 終端節(jié)點(diǎn)類的結(jié)構(gòu)圖
雷達(dá)類的成員包括基本數(shù)據(jù)成員和基本方法?;緮?shù)據(jù)成員包括終端節(jié)點(diǎn)編號、該節(jié)點(diǎn)到其他節(jié)點(diǎn)以及錨節(jié)點(diǎn)的RSSI數(shù)據(jù)、該節(jié)點(diǎn)采集到的呼吸/心跳數(shù)據(jù)、用于快速傅里葉變換(fastFouriertransformation,F(xiàn)FT)處理和分析的呼吸/心跳隊列、采樣頻率、經(jīng)過分析后得出的體動頻率等數(shù)據(jù)?;痉椒òǎ海?)構(gòu)造函數(shù)。通過調(diào)用構(gòu)造函數(shù)對雷達(dá)對象基本數(shù)據(jù)成員進(jìn)行初始化,包括設(shè)置終端節(jié)點(diǎn)編號、初始化采集數(shù)中存儲的數(shù)組成員和隊列成員及調(diào)用濾波器實例化函數(shù)對所需要的濾波器進(jìn)行實例化。(2)濾波器初始化方法。調(diào)用Math.Net類庫對所需的濾波器進(jìn)行初始化。(3)隊列更新。包括數(shù)據(jù)隊列、顯示隊列、FFT隊列的數(shù)據(jù)更新。(4)FFT算法分析方法。包括N點(diǎn)FFT與頻域累計FFT算法實現(xiàn)程序。(5)頻率提取方法。從FFT隊列中提取呼吸和心跳頻率。
無線網(wǎng)絡(luò)通信模塊將終端節(jié)點(diǎn)采集到的數(shù)據(jù)傳送到系統(tǒng)軟件進(jìn)行處理,模塊采用的ZigBee協(xié)議包含自動重傳以及循環(huán)冗余校驗碼(cyclic redundancy check,CRC)校驗,確保數(shù)據(jù)包傳輸準(zhǔn)確,系統(tǒng)軟件從串口讀取數(shù)據(jù)并進(jìn)行分析。C#語言的.NET環(huán)境的強(qiáng)大類庫提供的串口類包含了很多針對串口的操作,在系統(tǒng)初始化時,實例化串口對象即可設(shè)置相應(yīng)的串口參數(shù)并調(diào)用對應(yīng)方法進(jìn)行操作。數(shù)據(jù)處理及存儲由串口類配合設(shè)計的數(shù)據(jù)處理類以及數(shù)據(jù)存儲類進(jìn)行。具體的類成員方法結(jié)構(gòu)框圖如圖5所示。
圖5 DataProcess類、DataSave類以及SerialPort類結(jié)構(gòu)框圖
串口類對象實例化時,觸發(fā)初始化接收事件的字節(jié)數(shù)為1,同時掛載數(shù)據(jù)接收事件,當(dāng)接收到的數(shù)據(jù)大于1個字節(jié)時,即觸發(fā)該事件并開啟新線程,執(zhí)行數(shù)據(jù)處理類的Process方法對接收到的數(shù)據(jù)進(jìn)行處理,處理時調(diào)用數(shù)據(jù)存儲類下的對應(yīng)方法進(jìn)行數(shù)據(jù)文件的創(chuàng)建、寫入等操作。處理線程啟動后,根據(jù)設(shè)置的處理模式進(jìn)入RSSI數(shù)據(jù)處理模式或呼吸、心跳數(shù)據(jù)處理模式。在RSSI數(shù)據(jù)處理模式下,串口類將所有RSSI數(shù)據(jù)一次性傳入,根據(jù)RSSI數(shù)據(jù)包格式(如圖6所示),將RSSI數(shù)據(jù)存入第k個雷達(dá)對象的RSSI數(shù)組的第m個隊列中,即為k節(jié)點(diǎn)和m節(jié)點(diǎn)之間的RSSI數(shù)據(jù)。
圖6 RSSI數(shù)據(jù)包格式及轉(zhuǎn)義字符說明
在呼吸、心跳數(shù)據(jù)處理模式下,Process線程每間隔一定時間后被喚醒,喚醒后采用.NET框架自帶的鏈表數(shù)據(jù)格式將串口緩沖區(qū)的數(shù)據(jù)進(jìn)行提取處理,根據(jù)轉(zhuǎn)義原則將數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行反轉(zhuǎn)義,然后再提取所有包頭、包尾位置,判定對應(yīng)包頭、包尾間數(shù)據(jù)組成的數(shù)據(jù)包長度是否正確。若該長度和數(shù)據(jù)包內(nèi)信息長度不相等,則將此包丟棄,以確保接收到的數(shù)據(jù)為正確的數(shù)據(jù)包。根據(jù)數(shù)據(jù)包格式將呼吸、心跳數(shù)據(jù)分別提取出來。由于數(shù)據(jù)包將一個數(shù)據(jù)分成了2個字節(jié)進(jìn)行傳送,設(shè)該次采集數(shù)據(jù)為a、b、c、d,則相對應(yīng)的呼吸數(shù)據(jù)r和心跳數(shù)據(jù)h的計算公式為
公式(1)、(2)將數(shù)據(jù)還原為實際采集到的電壓值,即為雷達(dá)傳感器所采集到的原始電壓數(shù)據(jù)。一個數(shù)據(jù)包包含14組呼吸和心跳數(shù)據(jù),在解析完一個數(shù)據(jù)包后,調(diào)用DataSave類的RadarSave方法將數(shù)據(jù)存入txt文件中。DataSave類初始化時開啟2個文件流和寫入流。文件流在硬盤中創(chuàng)建txt文件,命名為“雷達(dá)ID-Respiratory(Heartrate)-月-日-時-分”。寫入流分別將對應(yīng)的呼吸和心跳原始數(shù)據(jù)寫入文件。至此完成了數(shù)據(jù)從串口接收處理并最終存儲在文件中的過程。
無線網(wǎng)絡(luò)環(huán)境下數(shù)據(jù)的傳輸不可避免地會受到噪聲的影響,所以需要對接收到的數(shù)據(jù)進(jìn)行濾波處理。而抑制噪聲的同時,為了獲得呼吸、心跳頻率則需要在頻域?qū)π盘枖?shù)據(jù)進(jìn)行分析處理。
(1)信號預(yù)處理。張楊等[10]提出對非接觸生命檢測信號的濾波預(yù)處理方法,本文采用其算法對采集到的原始數(shù)據(jù)進(jìn)行預(yù)處理。在MATLAB環(huán)境下使用FIRtool工具進(jìn)行FIR線性濾波器的設(shè)計,采用120階漢明窗0.1 Hz高通濾波器和120階漢明窗0.5 Hz低通濾波器對呼吸信號進(jìn)行濾波處理,采用120階漢明窗0.5 Hz高通濾波器對心跳信號進(jìn)行濾波處理。
在C#語言的.NET環(huán)境下進(jìn)行數(shù)字信號處理與MATLAB環(huán)境下進(jìn)行數(shù)字信號處理相比,其復(fù)雜程度增加,而在Math.Net類庫的幫助下可以大大提高設(shè)計效率。Math.Net類庫是一個強(qiáng)大的、開源的、C#語言的.NET環(huán)境下的數(shù)學(xué)運(yùn)算類庫,囊括了統(tǒng)計、計算、數(shù)字信號濾波、幾何等運(yùn)算功能,并且在持續(xù)地更新,為數(shù)學(xué)運(yùn)算提供了強(qiáng)有力的輔助工具。同時,其使用方法也較為簡單,在C#語言的.NET環(huán)境下配置Math.Net工具箱,使用時添加相對應(yīng)的命名空間即可。Math.Net類庫實現(xiàn)漢明窗濾波器的方法如下:
①根據(jù)MATLAB設(shè)計的濾波器屬性采樣頻率Fs、截止頻率以及階數(shù)調(diào)用FirCoefficients方法計算濾波器系數(shù);
②漢明窗長度設(shè)置為濾波器系數(shù)長度;
③計算采用的漢明窗FIR濾波器系數(shù)=漢明窗系數(shù)×濾波器系數(shù);
④調(diào)用濾波器生成方法,根據(jù)最后生成的濾波器系數(shù)生成對應(yīng)的濾波器。
(2)頻域分析。倪安勝等[11]對基于FFT頻域累積的非接觸生命信號檢測進(jìn)行了研究,對可變點(diǎn)數(shù)FFT頻域累積算法與固定點(diǎn)數(shù)FFT頻域累積算法在非接觸生命信號檢測中的效果進(jìn)行了分析,發(fā)現(xiàn)這2種分析方法對提高生命信號頻譜信噪比有著很好的效果。本系統(tǒng)在C#語言的.NET環(huán)境下實現(xiàn)了這2種算法,并進(jìn)行了頻域分析??勺凕c(diǎn)數(shù)FFT頻域累積算法如下:
其中,X(k)為經(jīng)過算法處理后的頻域信號序列,x(n)為原始信號序列,N為采樣點(diǎn)個數(shù)。根據(jù)FFT自身的性能,在一定的采樣頻率條件下,增加序列長度就可以達(dá)到頻率分量累積的效果,從而提高信噪比??勺凕c(diǎn)數(shù)FFT分析法可按照不同情況改變FFT的采樣點(diǎn)數(shù),從而達(dá)到更好的FFT分析效果。固定點(diǎn)數(shù)FFT頻域累積算法如下:
其中,N=M×L,M為累積次數(shù),L為單次FFT點(diǎn)數(shù),xm(l)是長度為N的待處理序列。
Math.Net類庫中Numeric.IntergralTransforms命名的空間下提供了大量FFT的相關(guān)函數(shù)供頻域分析使用。本系統(tǒng)軟件提供可變點(diǎn)數(shù)FFT和固定點(diǎn)數(shù)FFT 2種算法對經(jīng)過預(yù)處理后的信號進(jìn)行頻域分析。FFTreal為Math.Net提供的實信號FFT方法可以方便地實現(xiàn)數(shù)字信號的FFT??勺凕c(diǎn)數(shù)FFT頻域累積算法根據(jù)所選FFT點(diǎn)數(shù)的不同對信號序列進(jìn)行FFT,固定點(diǎn)數(shù)FFT頻域累積算法對信號按照L個FFT進(jìn)行變換。經(jīng)過FFT頻域累積算法處理后的信號序列X(k)調(diào)用FrequencScale函數(shù),按照40 Hz/s的采樣頻率取得頻譜中能量最高點(diǎn)信號頻率,即為最后提取出的呼吸、心跳頻率數(shù)據(jù)。
實時波形/數(shù)據(jù)的顯示依托于C#語言的.NET環(huán)境下強(qiáng)大的控件庫實現(xiàn)。Chart控件是其提供的圖表顯示控件。系統(tǒng)初始化時根據(jù)設(shè)置的終端節(jié)點(diǎn)數(shù)量n,在界面上出現(xiàn)n×2個Chart控件,分別為各個終端節(jié)點(diǎn)的呼吸和心跳波形顯示控件。Chart控件設(shè)置為一次顯示1 250個數(shù)據(jù),原始數(shù)據(jù)開始存入雷達(dá)類的數(shù)據(jù)隊列成員中后,開啟顯示線程,顯示線程開始將數(shù)據(jù)隊列添加至Chart的顯示隊列,該線程間隔150 ms刷新一次顯示隊列,從而實現(xiàn)了系統(tǒng)監(jiān)控數(shù)據(jù)的實時監(jiān)測顯示。當(dāng)隊列數(shù)據(jù)超過1 250個后,在刷新的同時清除前150個數(shù)據(jù),即每次更新150個數(shù)據(jù)到顯示波形中。同時,在數(shù)據(jù)量達(dá)到1 250個后,系統(tǒng)開始對數(shù)據(jù)進(jìn)行頻域分析處理來提取生命體征信息,實時波形旁的textlable控件間隔1 s即可顯示實時提取的頻率結(jié)果。
由于數(shù)據(jù)處理分析等工作需在另一個線程實時進(jìn)行,而直接的跨線程UI調(diào)動十分容易引起線程間擁堵,出現(xiàn)UI線程卡死等情況,大大影響了系統(tǒng)的使用。常用的跨線程UI更新方法有委托事件、后臺工作異步操作等,本系統(tǒng)采用UI線程的SynchronizationContext(線程間同步上下文協(xié)議)中Post/Send方法更新。在工作線程工作時,向主界面中的UI控件傳遞數(shù)據(jù)不會再直接更新UI控件的數(shù)據(jù),而是工作線程通過UI線程的Post方法將數(shù)據(jù)以異步消息的形式發(fā)送到UI線程的消息隊列,UI線程接收到消息后,通過調(diào)用SetTextSafePost方法來更新UI顯示控件。實際上,UI線程接收到的數(shù)據(jù)已經(jīng)不是直接的數(shù)據(jù),而是一條用來調(diào)用委托的命令。實現(xiàn)顯示功能的方法集中在Display類下,Display類的結(jié)構(gòu)如圖7所示。其中ChartDisplay和FFT_Display為波形數(shù)據(jù)更新和頻率提取結(jié)果更新的主要方法,通過循環(huán)體對N個雷達(dá)節(jié)點(diǎn)模塊對應(yīng)的Chart和TextLable調(diào)用SetTextSafePost方法來傳遞數(shù)據(jù)。ChartControl等其余方法用來對具體的UI控件進(jìn)行操作。
圖7 Display類結(jié)構(gòu)圖
由于系統(tǒng)軟件功能繁多,且多個功能需要同時進(jìn)行操作,如串口通信、數(shù)據(jù)處理分析、實時波形顯示等,故多線程的設(shè)計和管理也是系統(tǒng)軟件設(shè)計的重要部分。本系統(tǒng)軟件的多線程處理流程如圖8所示。
圖8 多線程處理流程圖
主界面顯示線程作為系統(tǒng)軟件的核心線程,時刻保持在前臺運(yùn)行。系統(tǒng)軟件初始化開始后,串口類自動開啟后臺線程進(jìn)行串口通信相關(guān)操作(如數(shù)據(jù)的接收),數(shù)據(jù)自處理分析線程由串口接收事件開啟,數(shù)據(jù)存儲線程由串口數(shù)據(jù)處理線程開啟。而波形數(shù)據(jù)顯示線程由主界面開始按鈕控制,該線程開啟的同時開啟監(jiān)測定時器線程。
線程之間經(jīng)常會出現(xiàn)多個線程共同對同一組數(shù)據(jù)進(jìn)行操作的情況,這是典型的生產(chǎn)者、消費(fèi)者問題。容易產(chǎn)生這類問題的原因之一就是線程重入,針對同一個數(shù)組同時開啟多個后續(xù)線程進(jìn)行處理,從而導(dǎo)致線程錯亂、數(shù)據(jù)錯亂。故本文采用線程鎖的信號/等待消息通知機(jī)制對線程間通信喚醒進(jìn)行處理:在線程間設(shè)置準(zhǔn)入標(biāo)志位,新線程在啟動時檢測標(biāo)志位,若準(zhǔn)入標(biāo)志位為1,則線程開啟并進(jìn)行提取數(shù)據(jù)的操作。
在實驗室環(huán)境下設(shè)計實驗進(jìn)行系統(tǒng)軟件性能的測試。試驗區(qū)域為4m×4m的方形區(qū)域,分別在四周布置4個終端節(jié)點(diǎn)對目標(biāo)進(jìn)行探測,實驗對象為25歲男性,靜止坐姿,面向第一個終端節(jié)點(diǎn)平靜呼吸。實驗結(jié)果如圖9所示,系統(tǒng)軟件目標(biāo)參數(shù)顯示區(qū)良好地顯示了各個終端節(jié)點(diǎn)采集到的實時呼吸波形和心跳信號波形,同時還實時顯示了信號的頻率信息。
圖9 分布式生物雷達(dá)系統(tǒng)軟件實驗結(jié)果
分布式生物雷達(dá)系統(tǒng)軟件具有良好的可擴(kuò)展性,不僅可以根據(jù)系統(tǒng)需求實時改變終端節(jié)點(diǎn)個數(shù),進(jìn)行對應(yīng)的數(shù)據(jù)處理工作,還可以實時顯示采集到的呼吸及心跳數(shù)據(jù)。同時,通過Math.Net類庫實現(xiàn)了C#語言的.NET環(huán)境下的數(shù)字信號處理,相較于傳統(tǒng)的添加MATLAB環(huán)境下的.dll文件的數(shù)字信號處理方法,降低了系統(tǒng)軟件的設(shè)計及應(yīng)用復(fù)雜度,提升了運(yùn)行效率。在實際探測實踐中,結(jié)合多種探測策略,分布式生物雷達(dá)系統(tǒng)軟件可以從多角度同時對目標(biāo)區(qū)域進(jìn)行組網(wǎng)探測,提升了探測效率,改善了單個或單通道生物雷達(dá)系統(tǒng)的局限性,為生物雷達(dá)探測提供了新的探測角度及思路。