当前位置:文档之家› 肌电信号的识别

肌电信号的识别

燕山大学课程设计说明书题目:肌电信号分析及动作识别学院(系):电气工程学院年级专业: 10级仪表三班学号:学生姓名:指导教师:教师职称:教授讲师电气工程学院《课程设计》任务书目录第一章摘要 (2)第二章系统总体设计方案 (3)第三章肌电信号的时域参数处理及其分析 (4)第四章肌电信号的频域处理方法及其分析 (7)3.1 FFT分析 (7)3.2 功率谱分析 (8)3.3 倒谱分析 (9)3.4 平均功率频率MPF和中值频率 (10)第五章 Matlab程序及GUI (11)第六章系统整体调试及结果说明 (24)第七章学习心得 (24)参考文献 (25)第一章摘要肌电信号是产生肌肉力的电信号根源,它是肌肉中很多运动单元动作电位在时间和空间上的叠加,反映了神经,肌肉的功能状态,在基础医学研究、临床诊断和康复工程中有广泛的应用。

其种类重要有两种:一,临床肌电图检查多采用针电极插入肌肉检测肌电图,其优点是干扰小,定位性好,易识别,但由于它是一种有创伤的检测方法,其应用收到了一定的限制。

二,表面肌电则是从人体皮肤表面通过电极记录下来的神经肌肉活动时发放的生物电信号,属于无创伤性,操作简单,病人易接受,有着广泛的应用前景。

主要应用领域有:一,仿生学。

提出肌肉生理模型来判别肌肉的动作以来, 电子假肢的研究进入了新的发展时期, 过去电子假肢的控制靠使用者人为开关和选择运动模式来完成, 现在则可通过检测人体残肢表面肌电信号, 提取出肢体的动作特征, 来自动控制假肢运动, 利用残肢表面肌电信号的肌电假肢研制在国内外都取得较大进展。

二,康复工程。

如利用表面肌电信号提取出的特征作为功能性电刺激的控制信号, 帮助瘫痪的肢体恢复运动功能。

通过检测表面肌电信号, 并将其作为反馈信号提供给病人和医生, 便于进行合理的治疗和训练。

三,运动医学。

表面肌电信号在运动医学中也可发挥重要作用, 通过检测运动员运动时的表面肌电信号,及时反映出肌肉的疲劳和兴奋状态, 有助于建立科学的训练方法。

本次课程设计的主要任务就是对微弱的肌电信号进行时域和频域的处理及分析,运用数字处理及matlab的知识进行“屈”和“伸”动作识别。

然后通过串口将数据发送到单片机下行微机进行显示。

第二章系统总体设计方案根据课程设计要求在上微机利用matble分析肌电信号并处理,基于肌电信号分析结果,通过串口发送命令给单片机系统,根据肌电信号动作状态控制相应的数码管显示。

并增加了扩展模块,通过动作模式驱动电机转动或其他控制输出模块。

通过分析上位机matlab中对信号处理的结果,我们可以得到一系列的信号特征值,其中我们选取了具有代表意义积分肌电值来进行处理,并给出对于屈伸动作的阈值。

通过对阈值的判断,使数码管显示积分肌电值,使点阵模块显示相应的“屈”和“伸”字样,使电机根据动作进行正反转,蜂鸣器在“屈”动作是发出鸣响。

最后,将上微机的处理数据通过串口通信发送到下微机显示,得到动作识别的要求。

第三章肌电信号的时域参数处理及其分析(1)均值:对于一组随机变量来说,均值是一个很重要的数值特征,用来描述一组变量的平均水平。

其严格的数学定义非常简单,就是一个随机变量关于概率测度的积分。

因此,在此处,均值表示肌电信号的平均水平。

公式如下:(2)方差:方差是各个数据与平均数之差的平方的平均数。

在数理统计和概率论中,方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。

在此处,研究信号的随机变量和均值之间的偏离程度有着很重要的意义。

其求解公式如下:(3)标准差:标准差也称均方差,是各数据偏离平均数的距离的平均数,它是离均差平方和平均后的方根,用u表示。

标准差是方差的算术平方根。

标准差能反映一个数据集的离散程度。

所以能很好的反映肌电信号的离散程度。

求解公式如下:(4)积分肌电值IEMG:积分肌电值就是对所有信号取绝对值后尽心均值的求解,由于对肌电信号直接求均值,均值近似为零,无法表征信号间的差异。

若对肌电信号取绝对值后再进行均值运算后,均值恒大于零,因而可用于提取肌电信号的特征。

公式如下:(5)均方根RMS:均方根就是一组数据的平方和除以数据的个数再开方,均方根是最理想的平方滤波方式的典型,让滤波更平滑,更大限度的滤掉噪声。

因此,对肌电信号求均方根,可以滤除信号中的噪声,使滤波后的信号更平滑、更明显。

公式如下:(6)原始信号的时域及上述参数值的Matlab程序clear;close all;a=load('qu.txt');//('shen.txt');N=10000;b=0:N-1;axis([0,10000,-1,1]);plot(b,a);xlabel('时间 (s)');ylabel('被测变量y');grid on;fprintf('\n数据基本信息:\n')printf(' 均值 = %7.5f \n',mean(a));fprintf(' 标准差 = %7.5f \n', sqrt(var(a)));fprintf(' 方差= %7.5f \n', var(a));fprintf(' 积分肌电值IEMG = %7.5f \n', mean(abs(a)));fprintf(' 均方根有效值RMS= %7.5f \n', sqrt(mean(a.^2)) );屈信号数据基本信息:均值 = 0.03502标准差 = 0.05775方差= 0.00334积分肌电值IEMG = 0.05437均方根RMS= 0.17246伸信号数据基本信息:均值 = 0.00337标准差 = 0.24421方差= 0.05964积分肌电值IEMG = 0.12826均方根RMS= 0.19993第四章肌电信号的频域处理方法及其分析3.1 FFT分析:FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。

有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。

这就是很多信号分析采用FFT变换的原因。

另外,FFT可以将一个信号的频谱提取出来。

采样得到的数字信号FFT变换。

N个采样点,经过FFT之后,就可以得到N个点的FFT结果。

为了方便进行FFT运算,通常N取2的整数次方。

假设采样频率为Fs,信号频率F,采样点数为N。

那么FFT之后结果就是一个为N点的复数。

每一个点就对应着一个频率点。

这个点的模值,就是该频率值下的幅度特性。

而每个点的相位就是在该频率下的信号的相位。

如果要要提高频率分辨率,就需要增加采样点数,也即采样时间。

频率分辨率和采样时间是倒数关系。

Matlab实现:clear;close all;a=load('qu.txt');/'shen.txt'y=fft(a,1024); %做1024点傅立叶变换fs=1000;N=length(y);mag=abs(y);f=(0:N-1)/N*fs;figure;plot(f,mag);%幅频谱xlabel('频率');ylabel('幅值');title('(屈/伸)肌电幅频');figure;plot(f,angle(y));% 相频谱xlabel('频率');ylabel('相位');title('(屈/伸)肌电相频');grid on;3.2 功率谱分析:功率谱是信号或噪声的自相关函数的傅里叶变换。

如果一确定信号平均功率为有限的,则该信号的自相关函数存在,如随机信号或随机噪声是由二阶随机平稳函数表示的,则其自相关函数存在。

为了更好得描述能量信号、功率信号,我们引入能量谱密度和功率谱密度概念。

能量谱密度、功率谱密度函数表示信号的能量、功率密度随频率变化的情况。

通过研究功率谱密度,可以帮助了解信号的功率分布情况,确定信号的频带等。

信号的功率谱即上述FFT分析后,幅频值mag的平方再除以2得到。

功率密度谱虽然描述了随机信号的功率在各个不同频率上的分布,但因为它仅与幅度频谱有关,没有相位信息,所以从已知功率谱还难以完整地恢复原来的功率信号。

Matlab实现:a=load('qu.txt');//('shen.txt')y=fft(a,1024); %做1024点傅里叶变换fs=1000;N=length(y);mag=abs(y);f=(0:N-1)/N*fs;power1=(mag.^2)/2;%周期图法求功率谱plot(f,power1);xlabel('频谱');ylabel('功率谱');title('(屈/伸)肌电信号功率谱');3.3 倒谱分析:倒谱是信号的傅里叶变换谱经对数运算后再进行的傅里叶反变换或者功率谱的对数值的逆傅氏变换称为倒谱。

倒频谱函数C(q)(power cepstrum)其数学表达式为:C(q) = | IF(log(s(f))) |^2。

其中,s(f)是信号s(t)的傅里叶变换,log()为取对数,IF为逆傅里叶变换。

Matlab实现:前100点的倒谱变化比较明显,所以取前100点波形图。

a=load('qu.txt');//('shen.txt')y=fft(a,1024); %做1024点傅里叶变换fs=1000;N=length(y);mag=abs(y);f=(0:N-1)/N*fs;w=rceps(a);%求倒谱n=[1:100];plot(n,w(1:100));xlabel('时间');ylabel('倒谱');title('(屈/伸)肌电信号倒谱');grid on;3.4 平均功率频率MPF和中值频率MF:平均功率频率是总功率除以总时间。

中值频率是各个时间段的功率的平均值。

公式如下:Matlab实现:a=load('qu.txt');y=fft(a,1024); %做10000点傅里叶变换fs=1000;N=length(y);mag=abs(y);f=(0:N-1)/N*fs;power=(mag.^2)/2;ss=sum(power);M2=0.5*ss;df=fs/N;M1=0.5*df*(sum(power(1:N-1))+sum(power(2:N)));MPF=M1/M2;MF=M2/2;第五章Matlab程序及GUIMATLAB是一种面向工程和科学计算的交互式计算软件,它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式工作环境中。

相关主题