【肌电信号】基于matlab GUI MUAP波形【含Matlab源码 736期】
一、簡介
EMG 信號是很容易采集的,但是要想理解和解釋所采集到的EMG信號是非常困難的。對EMG信號進行分析可以讓我們具備理解肌肉中力的產生機制以及肌肉如何產生運動的能力。但如何提取這些信息取決于適當的信號獲取辦法。
1 EMG信號提取過程
信號采集,信號調節和信號處理。流程圖如下所示
2 信號采集
肌肉收縮可以引起皮膚表面電流發生變化,此電流的大小可以通過放置在皮膚表面的電極來測量得到。電極與皮膚接觸的區域被稱為測量表面(detection surface)。利用表面電極測量得到的生理學數據被稱為表面肌電流(sEMG)。sEMG是電極測量的來自于所有活躍運動單元的MUAPTs的總和。
隨著肌肉輸出力的增加,活躍運動單元的數量也隨著增加。由于肌肉收縮時許多運動單元都是活躍的,因此,電極測量到的信號來自于許多不同的運動單元。MUAP的形狀和幅值取決于肌纖維和電極的相對方向(和其他因素相比)。在一個MUAPT中,如果電極和肌纖維的相對位置保持不變,電極的屬性保持不變以及肌肉組織的生物化學屬性沒有改變,則MUAP的的波形保持不變。
有作者在144篇文章里發現了352種采集表面肌電流信號時電極安放位置的描述。其中大部分的方法都是通用的,并且提到肌腹(肌肉中部較厚的區域),Motor point(軸突和肌纖維接觸的地方),或者肌肉中點。
影響EMG穩定性的因素包括:
通常,雙極點電極相對于肌纖維平行放置,并且兩電極中心距離在20 mm以上的時候可以取得較好的結果。這種距離足夠小可以避免信號的串擾,并且足夠大選擇眾多的運動單元。
參考電極應該放置在中性組織上(i.e. 骨頭突出的部分),以便于給電極放大器提供一個公用的參考。
3 信號調節
電極-放大器用來減小電極-皮膚的阻抗。
信號調節用來進一步改善EMG信號的質量。
信號調節的方法包括:
濾波以減小運動偽跡
電極運動偽跡可能來自于表面電極區域下的皮膚變形,或者電極電荷層的擾動。運動偽跡的功率密度小于20 Hz。因此,高通濾波器可用于改善信號的質量。這種濾波器的轉折頻率應該在10 Hz和20 Hz之間,但是不能大于20 Hz,否則會導致EMG信號能量的丟失。
用于運動偽逆的濾波技術包括:
EMG信號放大
要特別注意工頻噪聲的干擾。
power line interference
4 信號處理
EMG 信號用作控制信號:
- 多功能假肢
- 輪椅
- 抓握控制
- 虛擬鍵盤
- 基于姿勢的控制接口
5 數據分割
EMG信號有兩種狀態:
- 瞬態: 肌肉從靜止到自主收縮
- 穩態: 肌肉產生常力收縮
瞬態EMG信號比穩態EMG信號處理起來要更困難一些。
6 特征提取
時域特征
EMG幅值和活躍運動單元的數量以及他們的活躍水平有關系。
形成EMG幅值的方法有:
- 模擬修正和平滑(低通)
- 平均絕對值(MAV)處理
- 均方根(RMS)處理
對于高層次的收縮,可以采用高斯模型對EMG信號進行擬合;對較弱的肌肉收縮和處于肌肉疲勞狀態的收縮可以采用LaPlacian進行擬合。
其他EMG時域特征包括:平均絕對值(MAVs)斜率,zero crossing,斜率符號改變和波形長度。
7 頻域特征
時域-頻域特征
專業用語
surface EMG( sEMG): 表面肌電信號
MU (motor unit): 運動單元
MUAPTs (motor unit action potential trains): 動作電位序列
motion artifact: 運動偽跡
二、部分源代碼
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三、運行結果
四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
[1] 沈再陽.精通MATLAB信號處理[M].清華大學出版社,2015.
[2]高寶建,彭進業,王琳,潘建壽.信號與系統——使用MATLAB分析與實現[M].清華大學出版社,2020.
[3]王文光,魏少明,任欣.信號處理與系統分析的MATLAB實現[M].電子工業出版社,2018.
[4]徐潔.基于小波分析的脈搏波信號處理[J].電子設計工程. 2013,21(11)
總結
以上是生活随笔為你收集整理的【肌电信号】基于matlab GUI MUAP波形【含Matlab源码 736期】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML块,含样式的标签
- 下一篇: 通过__tablename__ = 'x