王鋒,宮玉琳,胡命嘉
(長春理工大學 電子信息工程學院,長春 130022)
sEMG是肌肉多個運動單元產生的動作電位在皮膚表面綜合疊加的結果。表面肌電信號的微弱到只有1mV左右大小,并且有用的信號頻率在20~500Hz之間,檢測難度非常大。但是肌電信號的幅值與肌肉收縮的力度成正比,并且一般比肢體運動提前約30~150ms產生,sEMG在眾多領域都有很高的研究價值。在醫學方面,可以利用sEMG對病人病情做出準確判斷或者是制定康復醫療計劃;在體育科學,可以實現對運動員身體狀況或者肌肉發力方式做出評估;在人工智能領域,利用肌電信號可以實現更好的人機交互。
現在肌電信號的檢測還處于開始階段,但是通過查閱相關文獻和資料發現無論是在國內還是國外,都有越來越多的學者在研究如何對肌電信號進行精確的檢測和如何對檢測到的肌電信號進行有效的算法分析、特征提取。隨著科學技術的不斷發展,在表面肌電信號檢測方向會有更高的技術突破以及更廣的應用領域。
sEMG采集系統硬件結構如圖1所示,主要由肌電電極、信號差分放大電路、Arduino開發板和藍牙模塊四部分組成。利用這套采集系統可以把微弱的1mV表面肌電信號放大到便于檢測的0~3.3V,濾掉工頻50Hz和20~500Hz之外無用的頻譜成分,把模擬信號轉換成數字信號,然后用藍牙把數據傳到上位機進行處理分析[2]。

圖1 sEMG采集系統硬件設計框圖
電極和信號差分放大部分
電極是肌電信號檢測最開始也是最重要的部分,電極性能的好壞將直接影響到整套采集系統的采集精度。與傳統的針電極肌電檢測不同,采用了放在皮膚表面的貼片式電極,具有對皮膚損傷小、穿戴方便的特點。實驗表明采用Ag/AgCl作為表面電極能夠得到穩定的肌電信號,并且在測量腦電、心電圖的醫學儀器上也都使用了這種材料制作成的電極,因此采用了Ag/AgCl作為表面電極[3]。
一般肌電信號的電極都是由三片構成,為了最大限度的降低皮膚表面噪聲信號的干擾,采用了如圖2所示的差分放大電路,將電極1與電極2做差分處理,電極3作為參考電極,這樣就會得到比較純凈的sEMG信號。經過測試,將電阻R1電容C1的值分別設定為100Ω和100μf,AD8220能將肌電信號放大1000倍左右,正好在AD采集的合理范圍之內。

圖2 差分放大電路
將模擬信號轉換成數字信號是每個采集系統的必要部分,使用了Arduino開發板作為信號采集卡。Arduino是一個方便、快捷的開源電子平臺,使用Arduino IDE軟件作為開發平臺,與傳統的STM32系列單片機相比,Arduino價格便宜、編程方便、更容易上手。Arduino的接口數量以及內部提供的10位精度的A/D轉換器完全滿足本系統的需求。
經過前端的差分放大處理后得到的表面肌電信號并不是直接可用的,還需要對其進行濾波處理,濾除50Hz的工頻干擾以及20~500Hz之外的無用信號,使用模擬電路進行濾波,但發現效果并不是特別理想,尤其是50Hz的工頻干擾,很難做到根本性濾除。結合數字濾波后,對比發現得到的肌電信號幅度變化與肌肉動作規律具有很高的一致性,成功濾除了無用的頻譜成分。
Arduino開發板內部集成了RS232串口芯片,采集到的數據可以通過RS232串口數據線傳送到PC端,為提高采集設備的便攜性,采用了無線藍牙代替串口線的解決方案。使用的藍牙模塊型號為HC-05,HC-05模塊采用了藍牙4.0標準,最高傳輸速率為24Mbit/s,傳輸距離能達到10m。將Arduino端的串口RX、TX引腳分別與藍牙的TX、RX引腳相連,在PC端添加一個USB轉TTL的電平轉換模塊,再連接一個藍牙模塊作為信號的接收端就可以正常工作,使用藍牙模塊進行無線傳輸不需要額外編程,只需要配置好發送端與接收端兩個藍牙模塊的連接參數即可。經過測試,采用藍牙進行數據傳輸與普通的串口數據線相比,并不存在數據丟失的現象。

圖3 HC-05藍牙模塊
LabVIEW是美國國家儀器公司研制一種程序開發平臺,與其他軟件開發平臺不同,LabVIEW主要由前面板的顯示界面和后面板的程序框圖組成,后面板采用圖形化的編程方法,前面板主要用作數據輸入和顯示,本系統上位機的功能框圖如圖4所示[4]。

圖4 上位機功能框圖
串口接收部分主要是調用LabVIEW的VISA函數編寫的,VISA函數可以把RS232串口協議的通信數據解析出來轉換成對應的字符串,在VISA函數中配置好串口協議所需要的串口號、波特率、奇偶位、停止位等參數就可以與下位機實現串口通信,如圖5所示。

圖5 串口部分程序圖
將串口接收的ASCII碼轉換成十進制數字后,利用波形顯示控件可以將數據以波形的形式顯示出來,如圖6所示,通過波形圖可以直觀地看出肌肉的運動狀態。圖6的左上角是串口參數配置部分,左下角是四個功能按鍵。下位機和串口都配置好后,點擊第一個按鍵“開始采集”,系統開始采集sEMG信號并通過波形圖實時顯示出來,點擊“保存數據”系統會新建一個Excel文件并將采集的數據以數組的形式保存到Excel文件中。第三個按鍵是對Excel文件中的數據進行算法分析,接下來的按鍵是結束程序運行。圖7是LabVIEW波形與數據保存部分程序圖,最左邊是一個比較函數,當輸入字節數大于零時,函數輸出為1,即開始運行條件框圖內的程序。圖中標注的字符串轉數值函數可以將串口中的字符串轉換成十進制數值,這樣后面再連接一個波形圖控件就可以實現數據波形的實時顯示。數組插入部分是將接收到的每一個十進制數值以數組元素的形式插入到數組中,這樣所有的數據就形成了一個大的一位數組,方便了后續的保存、處理。圖7最右邊是數據保存部分,用到的是將數據保存到電子表格函數,從圖中可以看到數據被保存到了電腦D盤名為semg的電子表格中。

圖6 上位機界面

圖7 波形與數據保存部分程序圖
Arduino的AD采樣頻率為500Hz,這就意味著下位機在1秒的時間內會上傳500個數據,面對成千上萬個數據,很難利用LabVIEW進行有效的數據分析。但LabVIEW內置MATLAB Script節點,在MATLAB中編寫的數據分析程序運行無誤后,將程序代碼復制到LabVIEW的MATLAB Script節點中,就可以實現LabVIEW與MATLAB混合編程,方便高效,圖8是MATLAB Script節點程序圖,鼠標點擊前面板的數據分析按鈕,便開始執行MATLAB Script節點中的程序。

圖8 MATLAB Script節點程序圖
采集到的sEMG總會有夾雜著電路中的一些噪音成分,為了能夠準確地判別出每次動作的起止點,采取了移動平均法和閾值法相結合的方法對動作起止點進行檢測,從而得出動作的有效數據段。首先對原始sEMG信號進行滑動求和,滑動長度N=50,計算公式如下:

式中,sEMGn為原始的信號,sEMGs是每一個原始信號與之后的49個數據之和,公式(2)中sEMGan是50個數據的平均值,設定10為閾值,如果sEMGan大于10,則判定第n+24(取中間值)個數據為肌肉收縮產生的數據。這種處理方法忽略了前24和后50個數據,由于系統的采樣頻率很高,造成的影響可以忽略不計。
圖9是采集到的原始數據的圖像,圖10是經過算法分析得到肌肉每次運動的起止點后畫出的數據圖像,比原始數據更加直觀明了。

圖9 原始數據圖像

圖10 處理后的數據圖像
圖11列出了每一次肌肉做收縮運動的起止點、總能量和平均能量信息,可以分析出肌肉力度以及肌肉健康度、疲勞度等信息,其計算方法為:

式中,ei、si代表肌肉每次動作的起止點,sEMGsumi代表每次動作的總能量,公式4中sEMGai代表每次動作的平均能量信息。
在時域分析中,sEMG的均方根能夠反映肌肉之間肢體運動的一個分布情況以及肢體運動過程中各肌群肌力的大小[5]。其計算公式為:

式中,N為采樣點,sEMGn代表第n個采樣點信息。

圖11 每次動作數據分析
上文主要介紹了sEMG采集系統的硬件設計和上位機軟件編寫過程,本節主要做了一些測試工作。首先是進行數據校準,把貼片電極放在肌肉上,使肌肉放松,這時會檢測到一組幅度變化不大的肌電信號數據,通過修改Arduino開發板內部程序使這組數據變成零,即把肌肉在放松狀態時的輸出的數據調為零,這樣隨后檢測到的數據就是肌肉在運動時的電信號變化[6]。

圖12 無線sEMG采集系統實物圖
把貼片電極分別放在手臂和臉部的側咬肌上經過大量的測試發現,握拳時使用不同的力度,手臂上的肌電信號就會有不同的幅度值;牙齒的咬合力度不同,也會采集到不同的幅度值,并且兩者都是成正比關系[7],圖12是無線sEMG采集系統的整體實物圖。
本采集系統成功地檢測到了皮膚表面微弱的交流信號的幅度變化,并且通過LabVIEW上位機實現了肌肉力度與信號強度的建模分析。但肌電信號的應用不僅如此,由于時間、精力有限,文中只提到了一路sEMG數據分析,后續會設計一種多通道的sEMG采集系統放在手臂上,根據手臂多通道sEMG變化做出手勢動作識別[8]。將多個傳感器放在病人的肌肉病變部位,就能準確檢測到病人的肌肉病變情況,這些都是以后要重要的研究內容。