基于Matlab的表面肌电信号处理软件设计与开发
1 简介
研究目的通过使用Matlab平台,实现运动生物力学研究中常用的表面肌电(s EMG)信号处理方法,为不会使用编程进行表面肌电(s EMG)信号数据处理的体育科研人员在表面肌电(s EMG)信号的处理过程中提供一个高效、简单的处理软件。研究方法通过对运动人体科学文献中常用的表面肌电信号(s EMG)处理方法进行总结,并获取进行表面肌电信号处理时常用的处理方法的算法,然后利用Matlab编程语言对各处理方法进行实现,并且实现为交互式的GUI软件。通过与现有商用软件处理结果的比较,对实现的各方法在数据处理过程中的准确性进行验证。然后将其应用到实验室的表面肌电(s EMG)信号数据处理当中,通过招募无编程基础的人员使用实验室的商业软件和本软件分别进行相同的数据处理过程,比较两者的效率。结果Matlab编写完成了一套涵盖表面肌电信号(s EMG)在体育科学研究中处理基本功能的软件。
2 部分代码
%liqiang 2006.4.2
%reference:Modeling of surface myoelectric signals.I.Model implementation
%tripole model of SFAP
%点电极在终板区(end_plate)右边
%function sfap=SFAP_tri(dist_x,dist_y,dist_z,kab,vel)的改进:终板区左右肌纤维长度是不同的
function sfap=SFAP_tri_jm(dist_x,dist_y,dist_z,kab,vel,len_fiber,fiberL,fiberR,SampleRate)
%function sfap=SFAP_tri_improve(0,5,10,0.303,4,100,-20,0)
%input:
% dist_x,dist_y,dist_z 为点电极的坐标(严格按照参考文献的坐标)
% kab: kab=a/b,且0=<kab<1, b=7(default)
% vel: 肌纤维的传导速度(与肌纤维直径有关)
% len_fiber:肌纤维的半长(基长len_fiber=100mm)
% fiberL:肌纤维左边长度变化,(基长为100mm)
% fiberR:肌纤维右边长度变化,(基长为100mm)
%output:
% sfap:单纤维动作电位
pre=1/(SampleRate/1000);
%pre=0.5; %precision产生电位的分辨率,越小分辨率越高,但数据越长
%单独研究动作电位时,应该设置高分辨率pre=0.01;
%研究肌电信号时,应该设置低分辨率pre=1(采样率为1kHz),以满足计算;
%pre=0.5时,对应的采样率为2kHz
%clear
%kab=0.303; %输入比值 kab=a/b
%vel=4; %输入参数
%dist_x=0;dist_y=5;dist_z=10;
delta_r=0.063;
delta_z=0.33;
delta=delta_z/delta_r;
%len_fiber=100;%肌纤维半长
len_fiberL=len_fiber+fiberL;
len_fiberR=len_fiber+fiberR;
b=7; %spacing
a=kab*b;
I2=388;
I3=kab*I2;
I1=I2-I3;
%step1
%1 电极子的产生过程
%%generation
%I1传输
t=0:pre:a/vel-pre;
ra1=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*t).^2);%向右
ra2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z).^2);
ra3=ra2;
rb1=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*t).^2);%向左
rb2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z).^2);
rb3=rb2;
sfap=(-I1./ra1+I2./ra2-I3./ra3-I3./rb3+I2./rb2-I1./rb1)/(2*pi*delta_r);
%I2传输
t=a/vel:pre:b/vel-pre;
ra1=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*t).^2);
ra2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*t+a).^2);
ra3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z).^2); %向右
rb1=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*t).^2);
rb2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*t-a).^2);
rb3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z).^2); %向左
temp=(-I1./ra1+I2./ra2-I3./ra3-I3./rb3+I2./rb2-I1./rb1)./(2*pi*delta_r);
sfap=[sfap,[temp]];
clear temp
clear ra1 ra2 ra3 rb1 rb2 rb3
%step2
%2 整个电极子的传输过程
%由于肌纤维左右长度的不同,下面分别考虑左右电极子的传输过程
%右边极子的传输和消失过程
%开始产生I3
%%transmission
tR=b/vel:pre:len_fiberR/vel-pre;
r1=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*tR).^2);
r2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*tR+a).^2);
r3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*tR+b).^2);
%右边电极子的消失过程,
%%extinction
%I1在肌键(肌纤维末端)处恒定,I2和I3向肌键移动
tR1=len_fiberR/vel:pre:(len_fiberR+a)/vel-pre;
ra1=zeros(1,length(tR1));
ra1(1:end)=sqrt((dist_x^2+dist_y^2)*delta+(len_fiberR-dist_z).^2);
ra2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*tR1+a).^2);
ra3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*tR1+b).^2); %向右
%I1和I2在肌键(肌纤维末端)处恒定,I3向肌键移动
%tR2=(len_fiberR+a)/vel:pre:(len_fiberR+b-a)/vel;
tR2=(len_fiberR+a)/vel:pre:(len_fiberR+b)/vel;
raa1=zeros(1,length(tR2));
raa1(1:end)=sqrt((dist_x^2+dist_y^2)*delta+(len_fiberR-dist_z).^2);
raa2=raa1;
raa3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z-vel.*tR2+b).^2);%向右
%对右边极子的组合
Re1=[r1 ra1 raa1]; %I1
Re2=[r2 ra2 raa2]; %I2
Re3=[r3 ra3 raa3]; %I3
%左边极子的传输和消失过程
%%transmission
tL=b/vel:pre:len_fiberL/vel-pre;
r4=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*tL-b).^2);
r5=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*tL-a).^2);
r6=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*tL).^2);
%%extinction
%I1在肌键(肌纤维末端)处恒定,I2和I3向肌键移动
tL1=len_fiberL/vel:pre:(len_fiberL+a)/vel-pre;
rb1=zeros(1,length(tL1));
rb1(1:end)=sqrt((dist_x^2+dist_y^2)*delta+(len_fiberL+dist_z).^2);
rb2=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*tL1-a).^2);
rb3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*tL1-b).^2); %向左
%I1和I2在肌键(肌纤维末端)处恒定,I3向肌键移动
%tL2=(len_fiberL+a)/vel:pre:(len_fiberL+b-a)/vel;
tL2=(len_fiberL+a)/vel:pre:(len_fiberL+b)/vel;
rbb1=zeros(1,length(tL2));
rbb1(1:end)=sqrt((dist_x^2+dist_y^2)*delta+(len_fiberL+dist_z).^2);
rbb2=rbb1;
rbb3=sqrt((dist_x^2+dist_y^2)*delta+(dist_z+vel.*tL2-b).^2); %向左
%对左边极子的组合
Le1=[r6 rb1 rbb1]; %I1
Le2=[r5 rb2 rbb2]; %I2
Le3=[r4 rb3 rbb3]; %I3
%step3
%根据肌纤维左右长度的不同,计算产生的动作电位
fiber_right=length(Re3);
fiber_left=length(Le3);
if fiber_right<=fiber_left
temp=(-I1./Re1+I2./Re2-I3./Re3-I3./Le3(1:fiber_right)+I2./Le2(1:fiber_right)-I1./Le1(1:fiber_right))./(2*pi*delta_r);
sfap=[sfap,[temp]];
clear temp
temp=(-I3./Le3(fiber_right+1:end)+I2./Le2(fiber_right+1:end)-I1./Le1(fiber_right+1:end))./(2*pi*delta_r);
sfap=[sfap,[temp]];
clear temp
else
temp=(-I1./Re1(1:fiber_left)+I2./Re2(1:fiber_left)-I3./Re3(1:fiber_left)-I3./Le3+I2./Le2-I1./Le1)./(2*pi*delta_r);
sfap=[sfap,[temp]];
clear temp
temp=(-I1./Re1(fiber_left+1:end)+I2./Re2(fiber_left+1:end)-I3./Re3(fiber_left+1:end))./(2*pi*delta_r);
sfap=[sfap,[temp]];
clear temp
end
temp=sfap;
sfap=zeros(1,length(temp)+1);
sfap(1:length(temp))=temp;
3 仿真结果
4 参考文献
[1]李向明. 基于Matlab的表面肌电信号处理软件设计与开发[D]. 上海体育学院.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
基于Matlab的表面肌电信号处理软件设计与开发相关推荐
- 基于MATLAB有噪声语音信号处理算法设计
获取项目源文件,联系Q:1415736481,可指导毕设,课设 摘要 滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分.利用MATLAB信号处理工 ...
- 基于MATLAB的答题卡识别软件设计
基于 MATLAB 的答题卡识别软件设计 课题意义 随着教育技术的飞速发展,考试普遍使用答题卡来记录答案,采用计算机自动识别答案卡信息,计算考生的成绩,可以减少阅卷人的工作量.本文利用 Matlab ...
- 基于android系统的单词学习软件设计与开发【附项目源码+论文说明】分享
基于android系统的单词学习软件设计与开发演示 摘要 随着手机使用的普及,人们获取与保存信息的方式已经发生了激动人心的转变.智能手机正在逐步融入我们的生活,并影响和改变着我们的生活.由于现在各种智 ...
- matlab rltool,基于Matlab工具箱Rltool的控制系统校正设计
山西电子技术2018 年第 4 期 软件技术 收稿日期:2018 -04 -10 作者简介: 乔永凤( 1975-) ,女,山西左云人,讲师,硕士研究生,主要研究方向: 语音信号处理,自动控制原理及其 ...
- matlab模拟角度调制系统的仿真与设计,基于Matlab的模拟通信系统的仿真设计
<基于Matlab的模拟通信系统的仿真设计>由会员分享,可在线阅读,更多相关<基于Matlab的模拟通信系统的仿真设计(25页珍藏版)>请在人人文库网上搜索. 1.目录摘要-第 ...
- 基于matlab的磁悬浮控制系统,基于MatLab的磁悬浮球控制系统的设计
基于MatLab的磁悬浮球控制系统的设计 对磁悬浮球系统的构成.控制器的设计.软硬件的实现进行了介绍.采用M (本文共4页) 阅读全文>> 磁悬浮技术是集电磁学.电子技术.控制工程.信号处 ...
- 基于matlab语音增强,基于MATLAB的语音增强系统的设计
187 2010 年第 05 期,第 43 卷 通 信 技 术 Vol.43,No.05,2010 总第 221 期 Communications Technology No.221,Totally ...
- 基于MATLAB GUI的数字滤波仿真平台设计
基于MATLAB GUI的数字滤波仿真平台设计 一.平台介绍 二.设计原理 1. 登陆系统设计原理 2. IIR数字滤波器设计 3. FIR数字滤波器设计 三.程序实现 1. 用户登陆系统程序 2. ...
- matlab凸轮转子泵型线设计坐标变换,基于Matlab的双头双螺杆泵转子型线设计
? 基于Matlab的双头双螺杆泵转子型线设计 基于Matlab的双头双螺杆泵转子型线设计 朱君,张帆,吴高捷,孙亚静 (扬州大学机械工程学院,江苏扬州 225127) 摘要:选用长幅外摆线加上外摆线 ...
- 潮流课设matlab编程,基于MATLAB的电力系统潮流计算课程设计论文
基于MATLAB的电力系统潮流计算课程设计论文 课程设计论文 基于MATLAB的电力系统潮流计算 学院:电气工程学院 专业:电气工程及其自动化 班级:电自班 学号: 姓名: 内容摘要 潮流计算是电力系 ...
最新文章
- XML 标签 首字母转换为大写
- python底层代码里面的参数_梯度下降算法讲解及python底层实现
- memcached客户端_对比Memcached和Redis,谁才是适合你的缓存?
- 算法-- 找到所有数组中消失的数字(Java)
- oracle生成xml格式化,介绍关于Oracle下存取XML格式数据的方式教程一览
- LUA 删除元素的问题
- BZOJ 2436 NOI嘉年华(单调优化)
- 传奇谢幕,回顾霍金76载传奇人生
- 关于C++中ios::sync_with_stdio(false)
- Cache缺失率的计算原理
- ATL WTL 实现分析(四)
- Team viewer 未就绪,请检查您的连接
- GlobalMapper20使用控制点对地形数据(高程数据)进行高程纠正(高程拟合/纠偏/配准)
- 万能显卡驱动win7_驱动工具更新!完美支持苹果电脑驱动
- 用代码做一个浪漫的“3D照片墙”
- 使用http://rap2.taobao.org/写测试接口文档
- UV/PV 的共同点和区别
- iOS开发之静态库.a的制作教程
- IT培训班有用吗?IT培训包就业是真的吗?
- 多个约束的lagrange multiplier证明.
热门文章
- 春节过后,外贸人如何快速抓住采购旺季,高效跟进客户
- GB35114—⑤、附 录C
- 消息模板取数据的高阶使用说明
- 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(二)
- 网络服务器管理系统设置实训总结,网络系统管理与维护实训报告.doc
- qq邮箱注册收件服务器,qq邮箱smtp服务器
- 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。
- php和apache配置 LoadModule php5_module D:/php/php5apache2.dll
- 李志 逼哥 完整专辑网盘下载
- 使用计算机程序的设计语言是,计算机程序设计语言有哪些?