index exceeds matrix dimension 出错
%请输入以下数据Factor=0.7766 ;%Factor为水平方向力的校正因子,06-7-27updated.例如y = 0.4562x + 0.1748中的0.4562,其中y为实际施加的力,x为传感器测得的力
Load=2.5;%Load为施加载荷(砝码质量),单位kg
Criterion1=0.05;%摩擦系数大于Criterion1值时,开始记录周期数
Criterion2=2.0;%摩擦系数大于Criterion2值时,视为油膜破裂
N=40;
Calibration=-0.02;%校正摩擦系数初始的0点漂移
%结束
s=size(data);
d=s(1);
C=Factor.*data(1:d,1)/(2*9.8*Load+14)+Calibration; % "5" 为载荷,单位kg
%plot (1:d,C(1:d))
h=1;
for i=1:d
if C(h)>Criterion1 %设置值, 摩擦系数大于该值则开始计周期数
h;
else h=h+1;
end
end
h%开始计周期数的采样点
Cp=C(round(0.5*d:0.7*d));%从平稳运行的部分(整个的50%-70%的部分)
max=max(abs(Cp));%找这一部分的最大值
hh=round(0.5*d);%设置hh为开始寻找断裂点的采样点
a(1)=h;
x=2;
sum1=0;
for i=round(0.5*d):d
if abs(C(hh))>Criterion2%1.5*max %1.5为设置值,摩擦系数大于设置值*前段取样点中的最大值则视为油膜破裂
hh;
else hh=hh+1;
end
end
if hh>d
hh=hh-1
end
No=0;
for r=h:hh
if C(r-1)<0
j=1;%如果第r点的前一采样点值<0,则j=1
else j=0;
end
if C(r)>0
k=1;%如果第r采样点值>0,则k=1
else k=0;
end
l=and(j,k);
if r>h% 保证记录周期数的各周期的起点r应大于第一个周期的起点h
m=1;
else m=0;
end
if and(l,m)==1
No=No+1;% 如果第r采样点>0,且其前一采样点值<0,则到r点时为1个cycle
a(x)=r;
a(x)-a(x-1);
sum1=sum1+a(x)-a(x-1);
x=x+1;
end
end
a;% a(1)为第一个周期的起点;a(2)为第二个周期的起点
sum1=sum1-[a(2)-a(1)]-[a(No)-a(No-1)];
CycleNumber=No
Sampling=round(sum1/(No-2))
semi=round(0.5*Sampling)
ahalf=a(2)-semi;%第二个半周期的起始点
semi1=ahalf-a(1)%第一个半周期一共有的数据点个数
Cof1half=C(a(1):ahalf)%输出第一个半周期各点的摩擦系数
zz2=round(a(1)+0.7*(semi1));
zz1=round(a(1)+0.3*(semi1));
plot(1:hh,C(1:hh),'-',hh:d,C(hh:d),'-',h,C(h),'*',hh,C(hh),'*',zz1,C(zz1),'*',zz2,C(zz2),'*',ahalf,C(ahalf),'*',a(2),C(a(2)),'*',a(3),C(a(3)),'*',a(4),C(a(4)),'*',a(5),C(a(5)),'*',a(6),C(a(6)),'*',a(7),C(a(7)),'*',a(8),C(a(8)),'*',a(9),C(a(9)),'*',a(10),C(a(10)),'*')
C(zz1:zz2);
COF(1)=sum(C(zz1:zz2))/(zz2-zz1+1);
COFpercycle(1)=0;
n=2;
x=0;
for x=2:(N+1)
z=a(x)-semi;% 例如N=10, 则为第2个半周期到第20个半周期,各半周期的aveage of COF,可设置
zz1=round(z+0.3*semi);
zz2=round(z+semi-0.3*semi);%各个半周期取中部40%的数值,不要两头各30%的数值,可设置
C(zz1:zz2);
COF(n)=sum(C(zz1:zz2))/(zz2-zz1+1);
n=n+1;
z=a(x);
zz1=round(z+0.3*semi);
zz2=round(z+semi-0.3*semi);%各个半周期取中部40%的数值,不要两头各30%的数值,可设置
C(zz1:zz2);
COF(n)=sum(C(zz1:zz2))/(zz2-zz1+1);
n=n+1;
end
COFhalfcycle=abs(COF');
COFperhalfcycle=COFhalfcycle(1:1:2*N)
for u=1:1:N
COFpercycle(u)=abs(COF(2*u-1)-COF(2*u))/2;% 这个算法可以避免零点偏移带来的影响
end
COFpercycle=COFpercycle'
COFaver1toN=sum(COFpercycle)/N % "5" 前1-5个周期的aveage of COF,可设置
COFaver2toN=sum(COFpercycle(2:N))/(N-1)
COFaver3toN=sum(COFpercycle(3:N))/(N-2)
COFaver4toN=sum(COFpercycle(4:N))/(N-3)
COFaver5toN=sum(COFpercycle(5:N))/(N-4)