实验基于sEMG时域特征特的动作识别一、实验目的1.了解肌电信号常用的时域分析方法;2.利用MATLAB对肌电信号进行去噪、特征提取及动作识别;二、实验设备1.Wi-Fi表面肌电信号采集卡;2.32位Windows XP台式机(Matlab 7.0软件);3.802.11b/g无线网卡;三、实验内容(1)学习信号的基本去噪方法,并用MATLAB实现;(2)学习肌电信号常用的时域特征并利用Matlab来进行波形长度(WL)符号改变数(SSC)、过零点(ZC)、威尔逊赋值(WAMP)等特征的提取;(3)学习神经网络信号处理方法,掌握BP神经网络的用法,将其用于肌电信号的动作识别。
学习以上三个部分,最终完成一整套肌电信号去噪、特征提取(选取一种特征)、基于特征的动作识别的MATLAB程序。
四、实验原理(1)小波去噪小波去噪方法是一种建立在小波变换基础上的新兴算法,基本思想是根据噪声在不同频带上的小波分解系数具有不同强度分布的特点,将各频带上的噪声对应的小系数去除,保留原始信号的小波分解系数,然后对处理后系数进行小波重构,得到纯净信号。
小波去噪的基本原理图如下(2) 特征提取时域分析是将肌电信号看成均值为零,而方差随着信号强度的变化而变化的随机信号。
时域特征的计算复杂度低,提取比较方便。
最常用的方法有:方差,过零点数(Zero Crossing, ZC ),Willison 幅值(Willison Amplitude, WAMP ),绝对值平均值 (Mean Absolute Value, MA V )和波形长度(Wave length ,WL )等。
在实际应用中,为了让特征可以包含更多的信息,往往选择用不同的时域特征组合形成联合特征向量。
我们主要介绍一下几种方法:过零率(ZC ):为波形通过零线的次数,从一定程度上反映了信号的频率特性。
为了降低零点引入的噪声,往往会引入一个阈值δ。
计算方式如下:)(),sgn(11δ≥-+-++k k k k x x x x(1)Willison 幅值:是由Willison 提出一种对表面肌电信号的幅值变化数量进行计算的方法,经过后人的研究,对Willison 幅值的阈值有了明确的范围限定,目前认为V μ100~50 是最合适的阈值范围。
其数学表示公式如公式(3-3)。
∑=+-=Nt i i x x f WAMP 11(2)其中:⎩⎨⎧>=otherwisex if x f 阈值01)(波形长度(WL ):它是对某一分析窗中的波形长度的统计,波长可以体现该样本的持续时间、幅值、频率的特征。
∑-=-+=11)()1(1N i i x i x NWL (3)符号改变斜率(SSC ):为信号的的频率性能提供了一些附加信息,对于3个连续的采样点,给定阈值ω,通过下面的公式计算波峰波谷的个数。
()()()N i x x x x i i i i ,,1,11 =≥-⨯-+-ω(4)(3) 神经网络BP 神经网络又称误差反向传播(Back Propagation ),它是一种多层的前向型神经网络。
在BP 网络中,信号是前向传播的,而误差是反向传播的。
所谓的反向传播是指误差的调整过程是从最后的输出层依次向之前各层逐渐进行的。
标准的BP 网络采用梯度下降算法,与Widrow-Hoff 学习规则相似,网络权值沿着性能函数的梯度反向调整。
前向型神经网络通常具有一个或多个由sigmoid 神经元构成的隐层,以及一个由线性神经元构成的输出层。
多个具有非线性传递函数的神经元层使得网络可以学习输入和输出之间的非线性关系,而线性输出层使得网络可以产生[-1,+1]之外的输出值。
隐层)(tan 111,11b p IW sig a +=输出层)(211,22b a IW purelin a +=输入由两层神经元构成的BP 网络结构(1) BP 网络的训练算法① BP 算法BP 算法沿着误差函数减小最快的方向,也就是梯度的反方向改变权值和偏差,这一点与线性网络的学习算法是一致的。
BP 算法的迭代计算公式可以表示为:k k k k g a x x -=+1 (1)其中,k x 代表当前权值和偏差,1+k x 代表迭代产生的下一次的权值与偏差,k g 为当前误差函数的梯度,k a 代表学习速率。
② 有动量的梯度下降算法标准的梯度下降法在调整权值时,仅仅按照当前时刻的负梯度方向进行调整,并没有考虑以前各次运算步骤中的梯度方向,因此新的样本对迭代过程影响太大,可能会导致训练过程中调整方向发生震荡,导致不稳定和收敛速度慢的问题,有动量的梯度下降算法则考虑了往前时刻的贡献,其权值迭代算法为:)1()()1[()()1(-+-+=+n D n D n w n w ij ij ααη (2)其中,)1(),(-n D n D 分别表示n 时刻,n-1时刻的负梯度。
由于加入了以前时刻梯度的贡献,相当于给迭代过程添加了一个低通滤波器,使得网络忽略误差曲面上细节特征,避免了陷入局部极小点的问题。
③ 共轭梯度算法尽管标准的BP 算法采用梯度下降算法,权值和偏差沿误差函数下降最快的方向调整,但却并不一定是收敛最快的算法。
在改进的BP 训练算法中,有一大类的算法称为共轭梯度算法。
在这一类算法中,权值和偏差沿着共轭梯度方向进行调整,通常能够获得比标准的梯度算法更快的收敛速度。
共轭梯度算法的第一次迭代都是从最陡下降的梯度方向开始。
梯度向量为:00g p -= (3)沿着此方向进行权值和偏差的调整,公式为:k k k k g a x x +=+1 (4)下一次搜索方向则由前两次搜索方向的共轭方向决定,表达式为:1-+-=k k k k p g p β (5)对于系数k β不同计算方法产生不同的共轭梯度算法。
a )F-R 共轭梯度算法采取的系数确定方法为:11--=k T k k Tk k g g gg β (6)即本次迭代梯度相对于上一次迭代梯度的归一化值。
b )P-R 共轭梯度算法采取的系数确定方法为:111---∆=k T k k T k k g g gg β (7)即上次迭代梯度与本次迭代梯度的内积对本次梯度的归一化值。
c )Scaled 共轭梯度算法到目前为止,讨论过的所有共轭梯度算法都需要在每一步迭代过程中对搜索方向进行计算,这样的计算量是比较大。
对此moller 提出了Scaled 梯度搜索算法[4],在每一步迭代过程中不计算搜索方向,以减少训练过程的计算量。
其基本原理是利用下面介绍的L-M 算法与共轭梯度法相结合产生的。
④ L-M 算法L-M 算法其权值和阈值的更新过程为:e J I J J x x T T k k 11][-++-=μ (8)其中,e为期望输出与实际输出的误差;J为误差对权值微分的Jacobi矩阵;μ为标量因子。
如果训练成功,误差性能函数减小,那么就减小μ的值;反之就减小其值。
五、实验步骤1. 认真阅读本实验的原理与方法。
2. 利用MATLAB实现对肌电信号的去噪、特征提取及动作识别。
(1)小波去噪load 'sample_test.mat';load 'sample_train.mat';%%%%%参数说明%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%Window=256;%分析窗口的长度M=512; %采集数据时一个data的样本数Channel=4; %采集数据的通道数Class=6; %类别数Number=10; %每个类别的个数WinLap=64; %窗口移动的间隔JudgeTime=Window/WinLap; %一个分析窗口需要移动的次数8Count=M*Number*Class/WinLap-Window/WinLap+1; %所有数据需要分析的次数477ClassCount=M*Number/WinLap-Window/WinLap+1; %一类数据需要的分析次数77GapCount=M*Number/WinLap; %训练样本两类动作之间的间隔80ClassOne=1;ClassTwo=2;ClassThree=3;ClassFour=4;ClassFive=5;ClassSix=6;%thr=0.2;%%%%% train样本小波去噪%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%for i=1:Channelx=sample_train(:,i);[thr,sorh,keepapp]=ddencmp('den','wv',x);[c,l]=wavedec(x,3,'db1');a3=appcoef(c,l,'db1',3);d3=detcoef(c,l,3);d2=detcoef(c,l,2);d1=detcoef(c,l,1);s4=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);new_train(:,i)=s4;endfigure(1)subplot(4,1,1);plot(sample_train(:,1),'r');hold on;plot(new_train(:,1),'b');legend('原始信号','去噪后信号');title('train样本滤波前后信号对比');subplot(4,1,2);plot(sample_train(:,2),'r');hold on;plot(new_train(:,2),'b');subplot(4,1,3);plot(sample_train(:,3),'r');hold on;plot(new_train(:,3),'b');subplot(4,1,4);plot(sample_train(:,4),'r');hold on;plot(new_train(:,4),'b');train样本去噪前后的信号对比如下图所示仿照对train样本进行小波去噪的方法,写出利用MATLAB对test样本进行小波去噪的程序。
(2)特征提取clear all;close all;load 'sample_train.mat';%%%%% 参数说明%%%%%%Window=256;%分析窗口的长度M=512; %采集数据时一个data的样本数Channel=4; %采集数据的通道数Class=6; %类别数Number=10; %每个类别的个数WinLap=64; %窗口移动的间隔JudgeTime=Window/WinLap; %一个分析窗口需要移动的次数Count=M*Number*Class/WinLap-Window/WinLap+1;%所有数据需要分析的次数CountClass=M*Number/WinLap-Window/WinLap+1; %一类数据需要的分析次数CountGap=M*Number/WinLap; %训练样本两类动作之间的间隔%%%%% 求波长%%%%%%%%%%%%%%sample=sample_train; %接口WL=zeros(Channel,Count);for c=1:Countfor n=1:Channelfor w=1:Window-1WL(n,c)=WL(n,c)+abs(sample((c-1)*WinLap+w,n)-sample((c-1)*WinLap+w+1,n));endendendFeature_train=WL;仿照求WL(波长)特征的程序,任选其他一种特征,写出MATLAB程序。