%数据时域特征提取
clc;
close ;
clear all;
%数据导入
data=xlsread('E:\排球\原始数据 z方向.xlsx',1)';
%初始参数设置
[m,n]=size(data);
D=[];
DA=[];
%求解特征
for i=1:1:m
d=data(i,:)
d=d(~isnan(d));%去除NAN值
ave=mean(d);%均值
u=std(d);%标准差
time=length(d);%时间
theta=var(d);%方差
area=sum(abs(d));%面积
maxv=max(d);%最大值
minv=min(d);%最小值
[dd,minp,maxp]=premnmx(d); %求解信息熵
entropy=yyshang(dd,9);%信息熵
D=[D;ave;maxv;minv;u;area;time;theta;entropy];
DA=[DA,D];
D=[];
end
DA=DA';
其中yyshang是求解熵的函数,代码如下
function Hx=yyshang(y,duan)
%不以原信号为参考的时间域的信号熵
%输入:maxf:原信号的能量谱中能量最大的点
%y:待求信息熵的序列
%duan:待求信息熵的序列要被分块的块数
%Hx:y的信息熵
%duan=10;%将序列按duan数等分,如果duan=10,就将序列分为10等份
x_min=min(y);
x_max=max(y);
maxf(1)=abs(x_max-x_min);
maxf(2)=x_min;
duan_t=1.0/duan;
jiange=maxf(1)*duan_t;
% for i=1:10
% pnum(i)=length(find((y_p>=(i-1)*jiange)&(y_p<i*jiange)));
% end
pnum(1)=length(find(y<maxf(2)+jiange));
for i=2:duan-1
pnum(i)=length(find((y>=maxf(2)+(i-1)*jiange)&(y<maxf(2)+i*jiange)));
end
pnum(duan)=length(find(y>=maxf(2)+(duan-1)*jiange));
%sum(pnum)
ppnum=pnum/sum(pnum);%每段出现的概率
%sum(ppnum)
Hx=0;
for i=1:duan
if ppnum(i)==0
Hi=0;
else
Hi=-ppnum(i)*log2(ppnum(i));
end
Hx=Hx+Hi;
end
end