黃 輝,張 躍
(清華大學深圳研究生院 嵌入式系統與技術實驗室,廣東 深圳518055)
目前的脈搏血氧儀大都采用的是采用有線探頭測量后將數據經過串口連接到顯示器顯示,清華大學嵌入式實驗室開發了遠程多醫療信息監護系統[1-3],實現了便攜式、動態跟蹤病人生理參數,本設計即在實驗室研究的基礎上提出了對TI脈搏血氧儀測量系統的優化,并提出了基于藍牙的無線傳輸方案。主要著重于三點:首先是關于無限脈沖響應IIR (infinite impulse response)低通濾波器的優化,論文在原有的基礎上給出了新的設計算法,幅頻響應和相頻響應結果;其次是優化有限長脈沖響應FIR (finite impulse response)低通濾波器,給出了FIR濾波器的設計算法,設計中對德州儀器官方給出的數據進行了濾波器重構,在此基礎之上設計出了新的FIR濾波器,并且給出了兩者的幅頻和相頻響應的對照結果;最后本文給出了基于CSR BC417為主控芯片的藍牙模塊BF10與智能移動設備進行藍牙通信的數據傳輸的新方案。
1.1.1 信號處理流程
本設計軟件基于MSP430FG4618單片機,采用C語言和匯編。算法的核心在于計算單次測量的交流信號的值,圖1即為軟件設計的流程圖。
在進入中斷以后根據條件判斷進入紅光發光處理程序或者是進入紅外光的發光處理子程序。在點亮紅光的時刻ADC寄存器中的結果是紅外光的轉換結果,因此在點亮紅燈以后ADC的數據讀出來的是紅外光的電流信號。ADC讀出來的數據需要經過兩次濾波,這是因為脈搏的頻率為1-2.5Hz之間,與脈搏頻率相比,頻率低的有直流信號,直流信號的干擾來自于人體組織液的透射光強度。頻率高的有50-60Hz的工頻信號和外界環境的光線干擾100-120Hz,所以對于探頭的密封性有嚴格要求,否則一旦有相同波長的光線干擾會嚴重影響測量精度。在原有的設計中高頻部分通過用一個步長為23的偶對稱FIR濾波器來過濾高頻信號,而在本設計中通過優化以后的步長為22的偶對稱FIR濾波器,其幅頻響應和相頻響應都有優化。直流部分則采用一個低通濾波器去跟隨直流信號,然后再由原信號減去該直流信號的方式來過濾直流。

圖1 血氧測量軟件設計的流程
1.1.2 發光控制設計
由于MSP430系列的計算機采用的內嵌12位精度的DAC模塊,且內嵌的DAC0模塊的輸出有兩個管腳通過DAC12_0CTL寄存器位DAC12OPS來控制,當DAC12OPS=0時DAC12_0的輸出位在P6.6 (pin5)輸出,而DAC12OPS=1時輸出位在VeREF+ (pin10),而在設計中DAC12OPS=1時紅外光二極管發光。進入紅外光的中斷處理子程序,在該子程序中首先要改變發光二極管,使紅光二極管發光,然后讀取DAC的值,此時紅外光的經過放大的數據已經存儲在ADC的轉換緩沖寄存器ADC12MEM1中,這是一個12位的模數轉換器,轉換區間為0-4095區間的數。這個數據也即經過差分放大并且包含直流分量的采樣數據,該數據經過IIR的去直流和FIR的高頻去噪后即為一次采樣處理的最終值。
1.1.3 發光強度的反饋設計
兩個發光二極管的發光強度是經過反饋的方式控制的,這是因為ADC在采樣過程中的參考電壓是2.5V,也即互阻放大器能夠放大的最大電壓為2.5V,最小電壓為0.610mv,如果不加反饋控制很容易超出ADC的轉換上限,測量的值也就沒有意義。反饋的方式是經過互阻放大器以后讀取ADC的判斷其是否在轉換范圍,若不在則進行相應的加減幅度,直到其測量值穩定在轉換范圍為止。由于DAC直接控制NPN型三極管,當DAC寄存器的數據大于0.7V時,三極管開啟并處于放大區狀態,進入放大區的好處在于可以根據DAC12_0DAT的電壓大小來調節集電極與發射極電流從而調節集電極的電位。
由圖1可知,中斷程序設計是軟件設計中最重要的處理邏輯。因為測量的所有數據處理幾乎都是在中斷處理程序中完成的。血氧的測量是采用中斷測量的方式:以本設計采用的MSP430芯片為例測量中采用Timer A作為計時器,采用上計數 (up mode)的模。TACCR0為計數的最大值時產生復位,當計數到TACCR1時產生置位,從而可以根據調節TACCR1實現調制的ACLK (auxiliary clock)時序,計時器在電平為高時進入Timer_A的計時器中斷處理程序,這里采用的時鐘源32kHz,而不是系統的主時鐘8MHz,TACCR0=32,則中斷處理程序的頻率為1024Hz,從而可以實現1024Hz的采樣頻率。
進入中斷程序以后會跳轉到紅光處理子程序或者紅外光的處理,當跳入到紅光處理程序時,對其透射光進行采樣和轉化,由于互阻放大器的設置需要一定的時間,此時需要設置另外一個波長的二極管發光,ADC進入采樣和轉換狀態,由于時間極短,此時已經將數據保存到ADC的緩沖區中,紅光和紅外光都是分時驅動的由TACCR1觸發ADC采樣和模數轉換,在一次發光中采樣只需要采樣一次,且MSP430中的轉換速率高達200ksps,也即5us即可,又因TACCR1-TACCR0的時間間隔為22/32*1ms=687.5us,所以當采樣轉換完成以后會產生ADC中斷,也即AD中斷處理子程序在Timer A中斷處理子程序中,AD中斷返回即進可以設置相應位來停止發光以降低系統功耗。當計數器累加到TACCR0時產生復位進入下一個周期。
直流分量是光線通過人體組織液產生的電流信號,因此直流分量是噪聲,所以必須過濾,在設計中有兩種設計方案,一種是直接采用高通濾波器將直流信號過濾,另一種則是采用低通濾波器先過濾高頻的信號,保留直流信號。
高通濾波器的指標為采樣頻率512Hz,截至頻率為0.01Hz,此處衰減為20dB,通帶頻率為1Hz,衰減為3dB,從而據通過Butterworth和雙線性變換設計出來的濾波器的傳遞函數為

如圖2所示。
其時域表達式為如下

由于式 (2)中是浮點數運算,所以轉換成下式


圖2 高通濾波器幅頻相應
由于中斷處理程序處理能力有限,所以雖然在設計中可以通過IIR濾波器的階數來提高濾波器的性能,但帶來的CPU的消耗與此同時也會增加。而且效果非常不理想,因為在圖2顯示在脈搏頻率區1Hz-2Hz區出現了衰減達到了-3dB,而這個頻率的信號正是心率信號。
所以本設計中采用的IIR低通濾波器進行直流跟隨,直流分量的頻率為0.01,而脈搏的頻率為1-2Hz之間,過渡帶非常窄并且阻帶要求很高,過濾掉高頻信號保留直流信號,然后再通過原始信號減去處理信號即可,由matlab設計的濾波器傳遞函數如下

轉化成其時域表達式為

同理經過處理后在程序中的表達是應該按照下式來編程

圖3是其幅度響應。

圖3 低通濾波器幅頻響應
經過比較得知,由圖2可知在1Hz頻率處的衰減達到了-3dB,因為在圖3中的幅頻響應可知高頻濾波器的設計使1Hz的頻率有較大的衰減,這樣會導致脈搏信號衰減,算法邏輯比較簡單,由于加權以后對輸入量幾乎為0,而對Y(n-1)的加權接近1則,Y(n)的前后值相差很小,從而起到直流跟隨的作用。這樣做的好處在于濾波器沒有過濾掉測量的信號頻率。實驗表明效果也比第一種設計效果理想。
1.4.1 濾波器設計的優化
由于測量的過程中工頻信號50Hz左右以及室內的光信號干擾100Hz到120Hz信號是。而人體的心率的頻率不可能超過3Hz,因為人體的心率在60-150次/分鐘的區間,所以采用低通濾波器。由于FIR可以很容易實現線性相位,而線性相位可以很好的保持輸入信號的時間差從而使輸出信號與輸入信號保持一致性,另外FIR編程邏輯相對于IIR也非常簡單。因此在設計中采用FIR的低通濾波器。根據FIR濾波器的原理的時域定義為

式 (7)中y(n)為t=n時刻的輸出,x(n)為t=n時刻的輸入,h(m)為有限長脈沖序列。在本文中濾波器的各個參數設計為通頻帶上限頻率為Ωp=2.5Hz通頻帶衰減為AP=3dB截止頻率為Ωs=50Hz,阻帶衰減Ar=50dB。采樣頻率即為信號輸入端頻率為512Hz。在本設計中采用的是23階奇數階偶對稱的FIR濾波器,其數據經過加權以后的值如下:據偶對稱的性質,在步長13以上的的數據與0-12的數據對稱。因此只需給出前13點的數據,利用matlab可求得其幅頻相應如圖4所示。

圖4 原設計FIR幅頻響應
可以看出幅度響應實現了在頻率為50Hz處的衰減為-50dB,在頻率大于50Hz時旁瓣小于-40dB的現象,這十分不理想。雖然奇數偶對稱的FIR濾波器可以實現整數個樣點延時,但是考慮到具體的脈搏波的檢測對延時的時間并不敏感,所以鑒于以上的不足在本文中給出新的設計方案,步長N為22,通帶截止頻率2.5Hz,通帶增益為1dB,阻帶下限頻率50Hz,阻帶衰減50dB,由于這里用到的系統是資源有限的MSP430的單片機,而FIR的濾波是在中斷內部進行,因為浮點數的運算非常浪費資源的,所以必須加權轉化成整數,設計的濾波器的系數見表1。
表1中的整數是右側原始數據乘以32768后得到的整數部分,由于步長減少了一次,從算法的角度考慮可以減少一次乘法和一次加法,下圖是matlab對濾波器的幅度響應如圖5所示。
根據圖5分析可知頻率大于等于50Hz時的衰減大于50dB,圖5可知其線性相位的保持良好。從而可以使得輸出波形不會因為相位延時不一致導致的失真,在具體設計中,由于輸出波形對失真的要求也不高,這是因為原始波形經過濾波以后在通帶內的頻率都比較集中,一個人脈搏的頻率不可能在短時間內有很大幅度的跳躍,而是一個比較平穩的頻率,絕大多數都集中在60-100次/分鐘,也即1~1.66Hz之間。

表1 FIR濾波器系數

圖5 優化的FIR幅頻響應
1.4.2 針對MSP430FG4618的單片機FIR設計優化
由于算法中采用的是偶對稱的FIR濾波,算法的偽代碼如下:

注意這里的N為1/2步長若N為奇數則為 (N+1)/2,由算法可知在一個for循環里面存在兩次加法和一次乘法,時間復雜度為O (n),即FIR需要2N-1次加法和N次乘法。雖然對于功能強大的計算機,上述算法完全可行,但是在單片機內部,而且FIR在中斷處理程序內部必須完成,就非常有必要進行優化。因為MSP430FG4618單片機的主頻為8MHz,也即指令周期為125ns,而Timer_A設定的中斷頻率TACCR0=31,TACCR1=20,也即在12個ACLK頻率范圍內必須完成中斷程序的處理,也即在中斷程序中可執行的最大指令數

計算結果為2929,而在實際的程序中的頻率設置是可以配置的一般情況下的配置在5MHz-6MHz左右,在這段時間里面還要減去AD的采樣轉換和ADC的中斷處理程序帶來的時間消耗。
針對MSP430FG4618的單片機FIR設計優化優化分為兩個方面:一方面是可將設計語轉化成匯編語言,匯編語言的執行效率明顯高于C語言,可以減少指令的執行數目;另一方面可以采用多通道的DMA (direct memory access)外圍設備來處理FIR操作,這樣可以讓出CPU (central processor unit)的處理,使執行效率得到更大提高。因為MSP430F系列的單片機的資源非常豐富,有三通道的DMA即直接內存存儲,和硬件乘法器,兩者結合可以完成FIR的所有運算而不需要CPU的參與。
圖6的基本原理在于FIR的系數由DMA0讀取送到乘法器的被乘數寄存器當中,而利用線性相位的FIR特性,DMA1,DMA2負責讀取輸入原始數據,DMA1從上至下遞增的讀,而DMA2從下至上遞減的讀,兩者讀入的數據滿足算法的循環關系。將兩者相加送到乘數寄存器OP2中,例如DMA1讀的輸入數據為X (n),則加入緩沖區的buffer是64,則 DMA 讀 入 的 數 據 為 X ((n-21+i)mod64),RESHI和RESLO為乘法結果的低16位和高16位。由于DMA的觸發方式可以選擇ADC12IFG的觸發也即DMA的3個通道可以同時被ADC的轉換中斷用來觸發,因為在設計中,經過放大和ADC轉換的數據即需要FIR濾波的采樣數據。

圖6 DMA處理FIR流程
由于信號需要經過兩次放大,第二次放大為差分放大,假設增益為K,本設計中K=30而根據差分放大的原理可知

這里K為反相輸入端點增益同相輸入端U+=Udc且Uin=Udc+Uac,從而 Uout=Udc-KUac,也即在進行差分放大以后系統仍然存在直流分量,需要對其進行第二次IIR的直流濾波,這次直流濾波與前面設計的濾波器相同,濾波后得到系統的交流信號。由于Uin中包含的直流電壓幅度在0.1V-0.15V左右,系統必須保證式 (14)的結果不能超過ADC的量程,否則將使測量的結果沒有意義。但是實際上通過分析得知,由于采集的信號經過兩級放大,第一級的放大采用的是互阻放大器的放大,RF=500K則放大后的電壓信號直流在0.1V左右,而交流信號在1mV左右,經過二級放大的信號可以從理論上保證輸出電壓大于0且ADC的轉換區間。但是在MSP30FG4618的實際開發中,由于存在電壓幅度漂移。必須增加判斷以增強數據處理的有效性。
由于被測量溶液對紅外光和可見紅光具有吸收性,且吸收的強度與被測量的濃度呈正比,應用在無創手指式血氧飽和度的測量領域,被測量溶液即為血液,而測量的光為人工控制發光的可見紅光和不可見的紅外光。手指式的測量血氧飽和度的原理是通過單片機分時驅動可見紅光和紅外光以1024Hz的頻率使發光二極管發光,透過手指的光線被光敏電阻接受并轉化成電流信號,電流信號非常微弱,大約需要經過一個互阻放大器放大之后轉化成直流電壓信號和交流電壓信號,并帶有50-60Hz的工頻干擾和室內光源干擾,約100Hz左右,所以必須進行只針對交流電壓放大的運算放大,經過差分放大以后的信號仍然保留有直流電壓信號,所以仍然需要進行第二次的去直流濾波。計算血氧飽和度的關鍵在于計算R的值

式中:ΔIλ1,ΔIλ2——交流信號的值,從而其算法的核心在于計算出兩種光的交流分量的比值。再根據式 (1)即可算得血氧飽和度的值。而由于ΔIλ1,ΔIλ2是交流信號的值,需要計算其有效值。算法中采用計算其心率的連續周期內的有效值而得,于是有

上式中Sample_Count的值即為在n次脈搏周期內的采樣值,其中iλ1,iλ2為單次經過A/D取樣計算得到的交流信號。再根據式 (1)便可求得血氧飽和度的值,實際測量中并不是十分嚴格的線性關系,因此對于每一個R值有一個表格,針對不同的區間計算了,以提高其值得精確性。
另一個重要的問題是計算脈搏的值,否則無法判斷的脈搏的周期,Sample_Count的值也就無法計算。在本設計中選擇當iλ1>200時,記為一次脈搏的波峰。假如AD的采樣頻率為fsample,則脈率計算的公式為

本設計中的采樣頻率為1024Hz,Sample_Count為3個脈搏周期內的采樣次數,這樣也即一分鐘的采樣次數,從而算得一分鐘內的脈搏次數。
如圖7所示是藍牙發送系統的數據處理流程圖。

圖7 數據發送流程
便攜式脈搏血氧檢測儀都是將MSP430的數據直接通過筆段時液晶顯示器在儀表端顯示,筆段液晶耗電并且由于工業級筆段式液晶顯示分辨率有限,如果采用高分辨率的點陣式液晶也由于MSP340沒有內嵌的液晶驅動芯片從而編程復雜,嵌入藍牙模塊的血氧監測儀將顯示部分通過藍牙協議發送到智能設備比如帶有藍牙的智能手機端顯示。服務程序負責將數據發送給其他的藍牙設備,其發送流程如圖7所示。
當測試得到所需要的結果時,MSP430FG4618使用UART發送給藍牙模塊的UART接受端。藍牙端的MCU將程序從UART的緩沖區不斷的讀出來,如果此時藍牙已經有相應的藍牙設備與之相連,則MCU直接將數據打包成藍牙數據包格式發送出去。對方即可接受到應有的數據,又因為藍牙能夠虛擬成串口的形式,也即能夠將接受到的藍牙數據解包成為串口的數據。因此相對于藍牙來說可以虛擬成了串口的UART通信。設計中不需要理解藍牙的基本協議過程,完全和UART通信的設計過程相同。這樣做的好處在于CPU沒有增加任何額外的負擔,設計中只需要處理UART的子程序,實現了程序的簡單有效。
也即使用藍牙實現無線通信的本質在于測量系統與藍牙的通信系統是作為兩個獨立的系統運行的。藍牙系統負責處理藍牙的所有動作:處理系統的數據發送;設備掃描,功耗管理等等,而藍牙智能設備端的程序也同時將藍牙虛擬成一個串口,比如在本設計端虛擬的是COM5(common serial port 5)口設備端的應用程序只需要從虛擬的COM5口讀出數據并在界面上顯示即可。
本設計在關于最新的參考設計的基礎之上提出了幾點優化:首先是關于無IIR低通濾波器的優化,論文在原有的基礎上給出了新的設計算法和所依據的設計原理;其次是優化了FIR濾波器,給出了FIR濾波器的設計算法,另外設計中對德州儀器官方給出的數據進行了濾波器重構,分析了濾波器的幅度和頻率響應特性。在此基礎之上設計出了新的FIR濾波器,并且給出了兩者的幅頻和相頻響應的對照結果;第三:本文給出了基于CSR BC417為主控芯片的藍牙模塊BF10與智能移動設備進行藍牙通信的數據傳輸的新方案。這一方案取代了傳統的串行通信方式。
[1]LI Zuojun,ZHANG Yue.New real-time method for pulse wave process and pulse rate estimation in dynamic measurement of pulse oxygen saturation [J].Automation &Instrumentation,2009 (12);1-4 (in Chinese).[李作君,張躍.動態血氧監測中脈搏波處理和脈率提取新方法 [J],自動化與儀表,2009(12):1-4.]
[2]CHEN Haijin,ZHANG Yue.Design of remote dynamic multiparameter real-time moniter [J].Computer Engineerring and Design,2012 (12):4501-4507 (in Chinese). [陳海金,張躍.遠程多參數動態實時監護儀設計 [J].計算機工程與設計,2012 (12):4501-4507.]
[3]CHENG Zhuanpeng,ZHANG Yue.Design and implemention of realtime telecardiology monitor terminal [J].Computer Engineering,2007,33 (11):264-266 (in Chinese). [成轉鵬,張躍.遠程心電實時監護終端的設計與實現 [J].計算機工程,2007,33 (11):264-266.]
[4]ZHANG Hejun,ZHANG Yue,ZHOU Bingkun.Design and implemention of software system for remote electrocardiographic monitoring [J].Computer Engineering and Applications,2006,42 (15):219-224 (in Chinese). [張和君,張躍,周炳昆.遠程心電監護軟件系統的設計與實現 [J].計算機工程與應用,2006,42 (15):219-224.]
[5]BAI Bing,ZHANG Yue,WAN Li.Arm-based for real-time remote ECG monitor software design and implemention [J].Computer Engineering and Design,2009,30 (12);2830-2833(in Chinese).[白冰,張躍,萬里.基于ARM的遠程實時心電監護儀軟件設計實現 [J].計算機工程與設計,2009,30(12):2830-2833.]
[6]WAN Li,ZHANG Yue,ZHANG Longfei.ECG data processing mechanism of remote wireless ECG monitor [J].Computer Engineering,2010,36 (15):291-293 (in Chinese).[萬里,張躍,張龍飛.遠程無線心電監護儀的心電數據處理機制[J].計算機工程,2010,36 (15):291-293.]
[7]Vincent Chan.Steve underwood:A single-chip pulsoximeter design using the MSP430 [EB/OL].[2012-12-20].http://www.ti.com.cn/general/cn/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa274b.
[8]Bhargavi Nisarga.Revised pulsoximeter design using the MSP430 [EB/OL].[2012-12-20].http://www.ti.com/lit/zip/slaa458.
[9]Texas Instruments Incorporated. MSP430x4xx family user guide [EB/OL].[2012-12-20].http://www.ti.com.cn ,SLAU056K.
[10]QIU Junyuan,ZHANG Yue.Design and implementation of asynchronous message-driven secure communication module[J].Computer Engineering and Design,2011,32 (8):2580-2587(in Chinese).[邱俊源,張躍.異步消息驅動安全通信模塊的設計與實現 [J].計算機工程與設計,2011,32(8):2580-2587.]