📄 zheng_xianxinghuigui.c
字号:
#include "include.h"
extern BYTE numflag;
///把时间延迟和全局时间做线性回归估计出线性系数斜率和系数。
void lihuigui_function(UINT64 *LocalTime,UINT64 *GlobalTime,UINT8 n)
{
static int l=0;
double sum_x=0.0,sum_y=0.0,sum_xy=0.0,sum_yy=0.0;
double average_x=0.0,average_y=0.0;
for(int i=0;i<n;i++)
{
sum_x+=(double)LocalTime[i];
sum_y+=(double)GlobalTime[i];
//sum_xy+=LocalTime[i]*GlobalTime[i];
//sum_yy+=GlobalTime[i]*GlobalTime[i];
}
average_x=(double)(sum_x/(double)n);
average_y=(double)(sum_y/(double)n);
Timelinearity.Localavertime=average_x;
//average_xy=average_x*average_y;
//average_yy=average_y*average_y;
for(int i=0;i<n;i++)
{
sum_xy+=(GlobalTime[i]-average_y)*(LocalTime[i]-average_x);
sum_yy+=(GlobalTime[i]-average_y)*(GlobalTime[i]-average_y);
}
Timelinearity.slope=sum_xy/sum_yy;
Timelinearity.coeff=average_x-Timelinearity.slope*average_y;
//Timelinearity.slope-=1;//Timelinearity.slope-1;
//Timelinearity.slope-=1;
Timelinearity.storeslope[l++]=Timelinearity.slope;
}
void huigui_function(UINT64 *time_offset,UINT64 *global_time,UINT8 n)
{
UINT8 i;
double l_yy=0.0;//待用
double l_xx=0.0,l_xy=0.0;
double sum_x=0.0,sum_y=0.0;
double avg_x=0.0,avg_y=0.0;
for (i=0;i<n;i++)
{
sum_x=sum_x+(double)time_offset[i];
}
for(i=0;i<n;i++)
{
sum_y=sum_y+(double)global_time[i];
}
///get average
avg_y= (double)sum_y/(double)n;
avg_x=(double)sum_x/(double)n;
// double l_xx=0.0,l_xy=0.0;
// double l_yy=0.0;//待用
for(i=0;i<n;i++)
{
l_xx = l_xx+(time_offset[i]-avg_x) * (time_offset[i]-avg_x);
l_yy = l_yy+(global_time[i]-avg_y) * (global_time[i]-avg_y);
l_xy = l_xy+(time_offset[i]-avg_x) * (global_time[i]-avg_y);
}
Timelinearity.slope = l_xy/l_xx;
Timelinearity.coeff = avg_y - Timelinearity.slope*avg_x;
}
void huigui_function1(UINT64 *time_offset,int n)
{
int i;
double sum_x=0.0;
double avg_x=0.0;
for (i=0;i< n ;i++)
{
sum_x=sum_x+(double)time_offset[i];
}
///get average
//avg_y= (double)sum_y/(double) n ;
avg_x=(double)sum_x/(double) n ;
Timelinearity.coeff = avg_x;
}
void calculatefuction(void){
/*
if (receivedtimeinfo.n)
{
receivedtimeinfo.n++;//收到的时间计数用于线性回归计算
}
else
{
receivedtimeinfo.n=10;
}
*/
if( numflag)
{
for (int k=10;k>0;k--)
{
receivedtimeinfo.stdtime[k] = receivedtimeinfo.stdtime[k-1];
Timelinearity.collecttime[k] = Timelinearity.collecttime[k-1];
}
/*receivedtimeinfo.stdtime[0]=receivedtimeinfo.retime ;
Timelinearity.collecttime[0]= Timelinearity.SFD_point_time;
lihuigui_function(Timelinearity.collecttime,receivedtimeinfo.stdtime,10);//(add)*/
/**********************我的线性回归************************/
/*receivedtimeinfo.stdtime[0] = receivedtimeinfo.retime + Timelinearity.Time_offset ;
Timelinearity.collecttime[0] = Timelinearity.LocalTime;///???
huigui_function(Timelinearity.collecttime, receivedtimeinfo.stdtime,10);*/
/**********************我的线性回归************************/
receivedtimeinfo.stdtime[0] = receivedtimeinfo.retime + Timelinearity.Time_offset ;
Timelinearity.collecttime[0] = receivedtimeinfo.retime ;///???
// huigui_function(Timelinearity.collecttime,receivedtimeinfo.stdtime,10);///做线性回归算回归系数用于下一次时间估计
huigui_function(Timelinearity.collecttime, receivedtimeinfo.stdtime,10);
}
else
//if (0<=receivedtimeinfo.n&& receivedtimeinfo.n<10&&numflag==0)
{
for (int k=receivedtimeinfo.n;k>0;k--)
{
receivedtimeinfo.stdtime[k] = receivedtimeinfo.stdtime[k-1];
Timelinearity.collecttime[k] = Timelinearity.collecttime[k-1];
}
/*receivedtimeinfo.stdtime[0] = receivedtimeinfo.retime + Timelinearity.Time_offset ;
Timelinearity.collecttime[0] = receivedtimeinfo.retime;///!!!!
// huigui_function(Timelinearity.collecttime,receivedtimeinfo.stdtime,receivedtimeinfo.n);
huigui_function(Timelinearity.collecttime, receivedtimeinfo.stdtime,receivedtimeinfo.n);*/
/**********************我的线性回归************************/
/*receivedtimeinfo.stdtime[0]=receivedtimeinfo.retime+ Timelinearity.Time_offset;
Timelinearity.collecttime[0]= Timelinearity.LocalTime;
lihuigui_function(Timelinearity.collecttime,receivedtimeinfo.stdtime,receivedtimeinfo.n);//(add)*/
/**********************我的线性回归************************/
receivedtimeinfo.stdtime[0] = receivedtimeinfo.retime + Timelinearity.Time_offset ;
Timelinearity.collecttime[0] = receivedtimeinfo.retime ;///???
huigui_function(Timelinearity.collecttime, receivedtimeinfo.stdtime,receivedtimeinfo.n);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -