资源简介
此压缩包的主要内容为表面肌电端点检测研究,是基于短时能量及方差和作为双门限来获取信号端点的,与网上部分文献类似,但纠正了一些小错误,并加以改进,可作为表面肌电处理基础学习的一个参考;
同时,里面包含了3个表面肌电信号数据文档,可直接使用,还包含应用到的voicebox数据包(程序中有相应网址说明如何安装)
数据包包括:main.m(主程序),endpoint_detection.m(端点检测程序),2018083001-1.xlsx、2018083001-2.xlsx、2018083001-3.xlsx(3个表面肌电数据),voicebox.rar(工具包)
代码片段和文件信息
function [x1x2] = endpoint_detection(x)
%%==运行程序之前先在命令窗口运行下段代码,用以添加voicebox工具箱==%%
% cd D:\Program Files\MATLAB\R2010b\toolbox
% path(‘ D:\Program Files\MATLAB\R2010b\toolbox\voicebox‘path)
%%==运行程序之前先在命令窗口运行上段代码,用以添加voicebox工具箱==%%
%注:voicebox工具箱的添加方式有两种,其中一种是永久的,具体方法详见:
%https://blog.csdn.net/jojozhangju/article/details/19337165
%幅度归一化到[-11],是为了加快数据收敛
%本试验使用的是4通道,根据具体情况可整体修改
x = double(x);
x(:1) = x(:1) / max(abs(x(:1))); %01通道数据进行幅度归一化处理
x(:2) = x(:2) / max(abs(x(:2))); %02通道数据进行幅度归一化处理
x(:3) = x(:3) / max(abs(x(:3))); %03通道数据进行幅度归一化处理
x(:4) = x(:4) / max(abs(x(:4))); %04通道数据进行幅度归一化处理
nx=length(x(:1)); %获取01通道数据长度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%这里使用的是加窗的方式,即将原来的数据分成多个小窗,并添加一定的窗移,这样就能这
%段信号从头到尾处理一遍
%常数设置
frameLen = 64; %帧长为64点,可按实际情况而定
frameInc = 20; %帧移为20点,可按实际情况而定
energy =0.02; %初始短时能量低门限,这个是自己随便
%定的,仿真过程中可自行修改,查看下其规律
sum_s=0.3; %表征波动的方差和低门限,这个同样是
%自己随便定的
%对4通路开始信号分帧
channal1 = enframe(x(1:end-11) frameLen frameInc);%enframe为分帧函数,是对x(1:end-1)分帧,帧长frameLen,帧移frameInc
channal2 = enframe(x(1:end-12) frameLen frameInc);%返回值channal1是nf(帧数)x frameLen(帧长)的数组,每一行是一帧
channal3 = enframe(x(1:end-13) frameLen frameInc);
channal4 = enframe(x(1:end-14) frameLen frameInc);
nf = fix((nx-frameLen+frameInc)/frameInc);%nf帧数
% x_nf=nf;
energy_frame=zeros(1nf);
sum_s_frame=zeros(1nf);
channal_energy=zeros(14);%要与上面的数量一致,这里是4;
channal_sum_s=zeros(14);%要与上面的数量一致,这里是4;
for i=1:nf-1
%求8路通道的每帧能量
channal_energy(1)=sum(channal1(i:).^2);
channal_energy(2)=sum(channal2(i:).^2);
channal_energy(3)=sum(channal3(i:).^2);
channal_energy(4)=sum(channal4(i:).^2);
energy_frame(i)=sum(channal_energy)/64;%energy_frame数组存放着每帧数据的短时能量,因为之前的帧长是64,所以为了求每帧的帧长,则需要再除以一个64
channal_sum_s(1)=sum((channal1(i:)-mean(channal1(i:))).^2);%这个原来网上常见的程序存在个小错误,此处已改正
channal_sum_s(2)=sum((channal2(i:)-mean(channal2(i:))).^2);
channal_sum_s(3)=sum((channal3(i:)-mean(channal3(i:))).^2);
channal_sum_s(4)=sum((channal4(i:)-mean(channal4(i:))).^2);
sum_s_frame(i)=sum(channal_sum_s)/64.0;%sum_s_frame数组存放着每帧数据的方差和
end
%调整能量门限
%说明,之前网上的程序使用的门限是energy、sum_s,这里进行了修改,通过研究发现
%energy对起止点选择不如sum_s的大,且可以选取不同的sum_s值,使得起点、终点的条件不同,更灵活一些
energy=min(energy0.02*max(energy_frame))%里面的0.02及下面的0.01、0.28是可以自己改的,如果可以的话,也可以采用自适应的方法,自动调整参数
sum_s1=min(sum_s0.01*max(sum_s_frame))
sum_s2=min(sum_s0.28*max(sum_s_frame))
%开始端点检测
x1=0;
x2=0;
for k=1:nf-1
if energy_frame(k)>energy&sum_s_frame(k)>sum_s2
x1=k;
break;
end
end
for m=x1:nf-1
if energy
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 976526 2018-10-06 21:13 表面肌电端点检测研究主程序\2018083001-1.xlsx
文件 355891 2018-10-05 23:45 表面肌电端点检测研究主程序\2018083001-2.xlsx
文件 399416 2018-10-05 23:46 表面肌电端点检测研究主程序\2018083001-3.xlsx
文件 3692 2018-10-14 10:18 表面肌电端点检测研究主程序\endpoint_detection.m
文件 5684 2018-10-14 10:17 表面肌电端点检测研究主程序\main.m
文件 619236 2018-10-14 09:32 表面肌电端点检测研究主程序\voicebox.rar
目录 0 2018-10-14 10:24 表面肌电端点检测研究主程序
----------- --------- ---------- ----- ----
2360445 7
- 上一篇:TongWeb7应用开发手册.pdf
- 下一篇:miui8波兰版极致精简
评论
共有 条评论