楊建華,李 正,趙 妤,王少文
(西安工業大學 電子信息工程學院,西安 710021)
表面肌電信號(surface electromyography signal,SEMG)是通過肌肉收縮而產生的一種生物電信號。SEMG 是一種非平穩的微電信號[1-2],其幅值在0~5 mV 之間,信號頻率在20 Hz~500 Hz 之間[3],大部分信號在50 Hz~150 Hz 之間[4]。由于該信號微弱、易受到外界環境以及工頻的干擾[5-6]、且具有很強的隨機性等特點使得對其進行實時采集、處理和識別困難較大。同時通常針對表面肌電信號的研究一般通過專用硬件采集設備采集信號,然后將數據上傳到PC 機上進行分析運算處理,停留在實驗室研究范圍,難以滿足便攜性和實用性要求。基于這樣的背景,本文設計了一款基于STM32F103 處理器的嵌入式肌電信號手勢識別系統。處理器中增加了FreeRTOS 操作系統實現多任務運行,可以根據任務優先級進行數據采集、數據處理、數據傳輸和屏幕顯示等操作,提高了系統的實時性。
本系統的整體結構框架如圖1所示,肌電傳感器采集人體胳膊的肌電信號,前端調理電路,經一級放大、高通低通濾波、50 Hz 陷波、二級放大和全波整流后獲得適合微處理器采集的信號,然后經過AD 轉化器轉化為數字信號,輸入到STM32 處理器中,在微處理器部分完成特征提取、數據訓練和動作識別并輸出顯示。與此同時通過串口將不同的手勢數據發送到有LabVIEW 編寫的上位機軟件中,在LabVIEW 軟件平臺進行相關手勢波形的顯示。整個系統采用多線程處理,大幅度提高了系統的處理效率,各個線程之間通過消息隊列進行相互通信。

圖1 系統結構框圖Fig.1 System structure block diagram
由于肌電表面信號幅值非常微弱,一般在0~5 mV之間,外界環境的噪聲對其干擾特別大,所以前端調理電路特別重要。本次設計的前端調理電路如圖2和圖3所示,采用AD8236 儀表放大器為前級放大,它有著高輸入阻抗和高共模抑制比(CMRR):110 dB(G=100),輸入偏置電流1 pA,輸入失調電流0.5 pA,軌到軌輸出。

圖2 前級放大調理電路Fig.2 Front stage amplifier conditioning circuit
AD8236 芯片的輸出電壓VOUT為

由公式(2)可以得到增益為

由公式(3)可知通過改變RG可以實現前端放大電路的倍數調整。
肌電信號頻率集中在20 Hz~500 Hz 之間,所以在設計濾波電路的時候需要將信號頻率保持在這個區間,其截止頻率的計算公式如下:

在圖2和圖3中,C6,R7和運算放大器構成了有源高通濾波器和有源低通濾波器。取C6=1 μF,R7=8.2 kΩ;R23=330 Ω,C7=1 μF 由式(4)可以得到高通濾波的截至頻率為19.41 Hz;低通濾波的截至頻率為482.53 Hz。由于該肌電頻率段包含了50 Hz頻率,而50 Hz 工頻對肌電表面采集有很大的影響,在硬件采集電路[7]設計中將噪聲做到最大化的抑制[8-9],所以設計了50 Hz 陷波電路,在圖2中由U1B,R1,R2,R3,R4,R5,C1,C2,C3組成了陷波電路。

圖3 后級放大調理電路Fig.3 Post amplifier conditioning circuit
前級放大的信號是差分輸入,其信號會在0 mV上下波動,要實現A/D 轉換所以需要將信號整體抬升到0 mV 以上,調理電路采用了全波精密整流電路,將0 mV 以下的信號反轉到0 mV 以上[10]。該前端調理電路采用±5 V 雙電源供電,+5 V 轉化為-5 V使用TP7660H 電荷泵電壓反轉器,電壓轉換精度為99.9%,電源轉換效率為98%。實現輸出-5 V 電壓,只需在該芯片的Pin8 引腳VIN 接入+5 V 電壓即可。
本系統采用STM32F103 單片機為處理器,它的外設資源豐富,包含了3 個通道16 位定時器、2 個12 位的ADC,其中ADC1 具有DMA 通道,通過DMA 可以實現多個通道同時高速采集并快速存儲。將STM32F103 的采樣頻率設定為1 kHz,能夠很好的滿足實際需求。每次A/D 轉換結束后,使用DMA方式將轉換后的數據依次存入到設定好的緩存區,并進行實時處理,采用DMA 可以緩解CPU 資源。
STM32 處理器將接收到的肌電信號通過串口發送到由LabVIEW 編寫的上位機上進行顯示[11],在顯示控件上將不同的手勢波形顯示出來,如圖4和圖5所示。

圖4 一級放大肌電信號波形Fig.4 Waveform of primary EMG signal

圖5 二級放大及整流后的波形Fig.5 Waveform after secondary amplification and rectification
對于實時處理采集的肌電信號,活動段檢測是很重要的,只有準確的獲取到手勢動作的起始與終止數據才能為后面的特征提取和分類識別打下良好的基礎。本文采用移動平均法與閾值相比較的方法來確定活動段的信號數據[12],由于硬件電路中將信號整流了,所以在計算時不需要加絕對值。

式中:y(i)是平均值;N 為第i 個數據點右側位置的數據點個數,一共N+1 個數據點。在系統訓練開始時,讓手臂靜止5 s 左右,獲取N 個數據點,根據公式(5)求出靜止時的平均值記為δ。

式中:θ 為閾值;α 為系數,取值為3。
當y(i)>θ,為活動段起始值,開始保存數據;當y(i)<θ,為活動段終止值,停止保存數據。
數據是實時發送的,所以在接收數據方面也很重要,本文通過軟件程序編寫循環接收隊列可以很好的進行數據緩存和后續數據的讀取,也防止了數據的遺漏問題。
嵌入式系統的資源非常有限,所以將采集到的肌電信號全部輸入到模式識別分類器中,很難進行存儲與運算,同時也不能很好的進行分類。所以肌電信號的特征提取對后面進行分類識別就特別重要。本系統選擇時域特征提取的方法[13],采用計算標準差作為不同手勢的特征。

如何能夠準確的識別出不同的手勢,肌電信號識別分類是核心,本系統采用了貝葉斯分類器,該分類器訓練簡單、識別率高,具有很廣泛的應用。貝葉斯分類算法是一種概率分類算法[14],其原理就是根據先驗概率計算出后驗概率,根據后驗概率的大小來確定具體類別,多類別的貝葉斯公式為

式中:P(ai│b)為后驗概率;P(ai)為先驗概率;P(b│ai)為條件概率密度函數;為非條件概率密度函數。根據貝葉斯決策理論如果P(ai│b)的值最大,則被測樣本分類為ai。在同一模式識別中對于不同類的貝葉斯公式中的全概率是相同的,在分類決策中不起作用,所以可以定義判別函數為

多維正態分布是樣本在更高維上的正態分布,其中一個協方差矩陣代替了方差,反映了各個維度之間存在的關聯,先驗概率是與特征向量無關的常量,設條件概率密度函數P(b│ai)服從多維正態分布,則判別函數可以表示為

根據訓練樣本b 可以得到μ,Σ 如下:

對于訓練樣本的動作類別一般都是相等的,故而先驗概率P(ai)對于不同的動作也相同,考慮到嵌入式系統的運算能力,忽略掉相同的常數項,只計算如下:

將要測試的樣本bj代入,得到后驗概率P(ai│bj),根據后驗概率值最大[15]的原則,ai即是當前判別出來的分類結果。
嵌入式軟件部分增加了FreeRTOS 操作系統[16],這樣能夠很好的實現多任務處理。采用FreeRTOS對各個任務之間進行調度和時間管理,使得整個系統的開發更加趨于模塊化,便于系統的維護和穩定運行。系統主要包括數據采集線程、數據處理線程及串口屏幕顯示線程。數據采集線程通過DMA 的方式直接讀取ADC 轉換的結果,最大程度的節約了CPU 資源,將讀取到的數據通過消息隊列發送給數據處理線程進行相關的識別后,將結果在串口屏上顯示。
3.3.1 任務通信調度
系統采用USART HMI 串口屏來實現人機交互,通過屏幕設計觸摸按鍵進行具體功能操作。系統中設計了數據采集任務、數據處理任務、屏幕顯示任務,任務之間的優先級由高到低運行,優先級相同時會合理的分配資源,各個任務之間的調度如圖6所示。
對于沒有增加操作系統的處理,CPU 不能被搶占,程序只能從上而下運行,即使是優先級高的任務也要等到優先級低的任務運行完成才能進行,這樣對信號的處理、用戶體驗以及系統的穩定運行都有一定的弊端。在STM32 處理器中增加了操作系統后進行數據的采集與處理有著更強的實時性。將屏幕顯示任務設定為最低優先級,當按下屏幕上的按鍵后,通過消息隊列將按鍵的結果發送到較高優先級的數據處理任務中,根據不同的按鍵結果進行訓練或者識別,當再次按下屏幕上的返回按鍵時,打斷高優先級進入到低優先級的主界面。
3.3.2 系統程序流程
首先按下訓練按鍵,獲取各個通道的數據并且提取3 個特征,相同的動作重復5~10 次。訓練結束后根據3.2 節建立的貝葉斯分類器模型,按下識別按鍵,進行手勢識別,系統軟件設計流程如圖7所示。

圖7 軟件流程Fig.7 Software flow chart
搭建硬件系統,將肌電傳感器粘貼到手臂上,首先按下KEY1 鍵進入訓練模式,對握拳、伸展手、OK這3 個動作分別執行30 次用于訓練,并保存訓練后的參數。按KEY3 鍵返回系統主界面,然后按下KEY2 鍵進入識別模式,執行訓練時所做的3 種不同的手勢動作,會在界面上顯示識別的結果,測試的準確率達到了85%以上。從而驗證了該系統的有效性與可靠性。不同手勢的識別精度如表1所示。

表1 不同手勢的識別精度Tab.1 Recognition accuracy of different gestures
通過多次反復測試,最終得到了如表1所示的實驗結果,其中握拳手勢的識別率最高,OK 手勢的識別率最低,由于握拳動作幅度較大,產生的肌電信號較強,特征明顯故而識別率高,而OK 動作幅度較小,產生的肌電信號較弱,使得識別率較低。可以通過增加采集肌電信號的通道個數來更多的獲取不同手勢的數據,這樣可以進一步提升手勢識別率。
本系統設計的前端調理硬件電路效率高、成本低、功耗低、尺寸小。能夠快速、穩定的對肌電信號進行采集,有效抑制噪聲信號。軟件方面增加了實時操作系統,進行了多任務處理設計,模塊之間相互協調,在保證系統實時性的同時,系統的穩定性得到了很大的提升,也為后續代碼維護,程序升級等方面提供了便利。