【肌电信号】基于matlab GUI MUAP波形【含Matlab源码 736期】
一、簡(jiǎn)介
EMG 信號(hào)是很容易采集的,但是要想理解和解釋所采集到的EMG信號(hào)是非常困難的。對(duì)EMG信號(hào)進(jìn)行分析可以讓我們具備理解肌肉中力的產(chǎn)生機(jī)制以及肌肉如何產(chǎn)生運(yùn)動(dòng)的能力。但如何提取這些信息取決于適當(dāng)?shù)男盘?hào)獲取辦法。
1 EMG信號(hào)提取過(guò)程
信號(hào)采集,信號(hào)調(diào)節(jié)和信號(hào)處理。流程圖如下所示
2 信號(hào)采集
肌肉收縮可以引起皮膚表面電流發(fā)生變化,此電流的大小可以通過(guò)放置在皮膚表面的電極來(lái)測(cè)量得到。電極與皮膚接觸的區(qū)域被稱為測(cè)量表面(detection surface)。利用表面電極測(cè)量得到的生理學(xué)數(shù)據(jù)被稱為表面肌電流(sEMG)。sEMG是電極測(cè)量的來(lái)自于所有活躍運(yùn)動(dòng)單元的MUAPTs的總和。
隨著肌肉輸出力的增加,活躍運(yùn)動(dòng)單元的數(shù)量也隨著增加。由于肌肉收縮時(shí)許多運(yùn)動(dòng)單元都是活躍的,因此,電極測(cè)量到的信號(hào)來(lái)自于許多不同的運(yùn)動(dòng)單元。MUAP的形狀和幅值取決于肌纖維和電極的相對(duì)方向(和其他因素相比)。在一個(gè)MUAPT中,如果電極和肌纖維的相對(duì)位置保持不變,電極的屬性保持不變以及肌肉組織的生物化學(xué)屬性沒(méi)有改變,則MUAP的的波形保持不變。
有作者在144篇文章里發(fā)現(xiàn)了352種采集表面肌電流信號(hào)時(shí)電極安放位置的描述。其中大部分的方法都是通用的,并且提到肌腹(肌肉中部較厚的區(qū)域),Motor point(軸突和肌纖維接觸的地方),或者肌肉中點(diǎn)。
影響EMG穩(wěn)定性的因素包括:
通常,雙極點(diǎn)電極相對(duì)于肌纖維平行放置,并且兩電極中心距離在20 mm以上的時(shí)候可以取得較好的結(jié)果。這種距離足夠小可以避免信號(hào)的串?dāng)_,并且足夠大選擇眾多的運(yùn)動(dòng)單元。
參考電極應(yīng)該放置在中性組織上(i.e. 骨頭突出的部分),以便于給電極放大器提供一個(gè)公用的參考。
3 信號(hào)調(diào)節(jié)
電極-放大器用來(lái)減小電極-皮膚的阻抗。
信號(hào)調(diào)節(jié)用來(lái)進(jìn)一步改善EMG信號(hào)的質(zhì)量。
信號(hào)調(diào)節(jié)的方法包括:
濾波以減小運(yùn)動(dòng)偽跡
電極運(yùn)動(dòng)偽跡可能來(lái)自于表面電極區(qū)域下的皮膚變形,或者電極電荷層的擾動(dòng)。運(yùn)動(dòng)偽跡的功率密度小于20 Hz。因此,高通濾波器可用于改善信號(hào)的質(zhì)量。這種濾波器的轉(zhuǎn)折頻率應(yīng)該在10 Hz和20 Hz之間,但是不能大于20 Hz,否則會(huì)導(dǎo)致EMG信號(hào)能量的丟失。
用于運(yùn)動(dòng)偽逆的濾波技術(shù)包括:
EMG信號(hào)放大
要特別注意工頻噪聲的干擾。
power line interference
4 信號(hào)處理
EMG 信號(hào)用作控制信號(hào):
- 多功能假肢
- 輪椅
- 抓握控制
- 虛擬鍵盤(pán)
- 基于姿勢(shì)的控制接口
5 數(shù)據(jù)分割
EMG信號(hào)有兩種狀態(tài):
- 瞬態(tài): 肌肉從靜止到自主收縮
- 穩(wěn)態(tài): 肌肉產(chǎn)生常力收縮
瞬態(tài)EMG信號(hào)比穩(wěn)態(tài)EMG信號(hào)處理起來(lái)要更困難一些。
6 特征提取
時(shí)域特征
EMG幅值和活躍運(yùn)動(dòng)單元的數(shù)量以及他們的活躍水平有關(guān)系。
形成EMG幅值的方法有:
- 模擬修正和平滑(低通)
- 平均絕對(duì)值(MAV)處理
- 均方根(RMS)處理
對(duì)于高層次的收縮,可以采用高斯模型對(duì)EMG信號(hào)進(jìn)行擬合;對(duì)較弱的肌肉收縮和處于肌肉疲勞狀態(tài)的收縮可以采用LaPlacian進(jìn)行擬合。
其他EMG時(shí)域特征包括:平均絕對(duì)值(MAVs)斜率,zero crossing,斜率符號(hào)改變和波形長(zhǎng)度。
7 頻域特征
時(shí)域-頻域特征
專業(yè)用語(yǔ)
surface EMG( sEMG): 表面肌電信號(hào)
MU (motor unit): 運(yùn)動(dòng)單元
MUAPTs (motor unit action potential trains): 動(dòng)作電位序列
motion artifact: 運(yùn)動(dòng)偽跡
二、部分源代碼
function varargout = MUAPgui(varargin) % MUAPGUI M-file for MUAPgui.fig % MUAPGUI, by itself, creates a new MUAPGUI or raises the existing % singleton*. % % H = MUAPGUI returns the handle to a new MUAPGUI or the handle to % the existing singleton*. % % MUAPGUI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in MUAPGUI.M with the given input arguments. % % MUAPGUI('Property','Value',...) creates a new MUAPGUI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before MUAPgui_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to MUAPgui_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES% Copyright 2002-2003 The MathWorks, Inc.% Edit the above text to modify the response to help MUAPgui% Last Modified by GUIDE v2.5 27-Dec-2006 12:09:22% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @MUAPgui_OpeningFcn, ...'gui_OutputFcn', @MUAPgui_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []); if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1}); endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT% --- Executes just before MUAPgui is made visible. function MUAPgui_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to MUAPgui (see VARARGIN)% Choose default command line output for MUAPgui handles.output = hObject;% Update handles structure guidata(hObject, handles); clear all; % UIWAIT makes MUAPgui wait for user response (see UIRESUME) % uiwait(handles.figure1);% --- Outputs from this function are returned to the command line. function varargout = MUAPgui_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structure varargout{1} = handles.output;% --- Executes on button press in Laplace. function Laplace_Callback(hObject, eventdata, handles) % hObject handle to Laplace (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)global muap; lapmuap=4*muap(2,:)-muap(1,:)-muap(3,:)-muap(4,:)-muap(5,:); axes(handles.axes1); HH=plot(lapmuap); set(HH,'LineWidth',2); clear HH;% --- Executes on button press in Bipolar. function Bipolar_Callback(hObject, eventdata, handles) % hObject handle to Bipolar (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global muap;biomuap=muap(1,:)-muap(2,:); axes(handles.axes2); HH=plot(biomuap); set(HH,'LineWidth',2); clear HH;% --- Executes on button press in Monopolar. function Monopolar_Callback(hObject, eventdata, handles) % hObject handle to Monopolar (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)global muap;axes(handles.axes3); HH=plot(muap(2,:)); set(HH,'LineWidth',2); clear HH;function nf_Callback(hObject, eventdata, handles) % hObject handle to nf (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of nf as text % str2double(get(hObject,'String')) returns contents of nf as a double% --- Executes during object creation, after setting all properties. function nf_CreateFcn(hObject, eventdata, handles) % hObject handle to nf (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispcset(hObject,'BackgroundColor','white'); elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); endfunction skinfat_Callback(hObject, eventdata, handles) % hObject handle to skinfat (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of skinfat as text % str2double(get(hObject,'String')) returns contents of skinfat as a double% --- Executes during object creation, after setting all properties. function skinfat_CreateFcn(hObject, eventdata, handles) % hObject handle to skinfat (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispcset(hObject,'BackgroundColor','white'); elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); endfunction x_Callback(hObject, eventdata, handles) % hObject handle to x (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of x as text % str2double(get(hObject,'String')) returns contents of x as a double% --- Executes during object creation, after setting all properties. function x_CreateFcn(hObject, eventdata, handles) % hObject handle to x (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually ave a white background on Windows. % See ISPC and COMPUTER. if ispcset(hObject,'BackgroundColor','white'); elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end三、運(yùn)行結(jié)果
四、matlab版本及參考文獻(xiàn)
1 matlab版本
2014a
2 參考文獻(xiàn)
[1] 沈再陽(yáng).精通MATLAB信號(hào)處理[M].清華大學(xué)出版社,2015.
[2]高寶建,彭進(jìn)業(yè),王琳,潘建壽.信號(hào)與系統(tǒng)——使用MATLAB分析與實(shí)現(xiàn)[M].清華大學(xué)出版社,2020.
[3]王文光,魏少明,任欣.信號(hào)處理與系統(tǒng)分析的MATLAB實(shí)現(xiàn)[M].電子工業(yè)出版社,2018.
[4]徐潔.基于小波分析的脈搏波信號(hào)處理[J].電子設(shè)計(jì)工程. 2013,21(11)
總結(jié)
以上是生活随笔為你收集整理的【肌电信号】基于matlab GUI MUAP波形【含Matlab源码 736期】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HTML块,含样式的标签
- 下一篇: 通过__tablename__ = 'x