⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zheng_xianxinghuigui.c

📁 zigbee子节点源代码
💻 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 + -