光电测距仪加乘常数计算_icefox_新浪博客

   最近写的一个小程序,主要用来对测距仪的测量数据进行检测.

   采用的是6段解析法.

   光电测距仪提供的观测成果包括:

   1、测段号

   2、基线长

   3、观测长

   4、盘左

   5、盘右

   6、温度值

   7、气压值

   按照6段解析法的要求,选取21条测段数据。

   处理代码如下:

 

 typedef struct{
    char dh[3];
//段号
    double jxc; //基线长
    double gcc; //观测基线长
    double pz[2];//垂直盘左
    double py[2];//垂直盘右
    double qw;//气温
    double qy;//气压
}DATA;

 

 /////////////////////////
 //计算加乘常数
 /////////////////////////
 //1.距离改正
 //
 double czj;
 int i;
 for(i=0;i<len;i++)
 {
    czj=(Radian(data[i].py[0])-Radian(data[i].pz[0]))/2.0-PI/2.0;
    if(m_czj>1)
    {
       czj+=(Radian(data[i].py[0])-Radian(data[i].pz[0]))/2.0-PI/2.0;
       czj/=2.0;
    }
    data[i].gcc*=cos(czj);
 }

 //////////////////////////////
 //2.气温气压改正
 double k,a,b,c;
 CString s1,s2;

 strQWGS.TrimLeft(' ');
 s1=strQWGS;
 i=s1.Find(' ');
 k=atof(s1.Left(i));
 s2=s1.Right(s1.GetLength()-i);
 s2.TrimLeft(' ');
 s1=s2;
 i=s1.Find(' ');
 a=atof(s1.Left(i));
 s2=s1.Right(s1.GetLength()-i);
 s2.TrimLeft(' ');
 s1=s2;
 i=s1.Find(' ');
 b=atof(s1.Left(i));
 s2=s1.Right(s1.GetLength()-i);
 s2.TrimLeft(' ');
 c=atof(s2);
 double ppm=1.0/10000000;
 //qy:百帕 qw:摄氏度
 for(i=0;i<len;i++)
 {

    data[i].gcc*=k-a*b*ppm*data[i].qy/(1.0+c*data[i].qw);
 }

 /////////////////////////////////

 //3.计算d y yi
 double d=0,y=0;
 yi=new double[len];
 for(i=0;i<len;i++)
 {
    yi[i]=data[i].jxc-data[i].gcc;
    d+=data[i].gcc;
    y+=yi[i];
 }
 d/=double(len);
 y/=double(len);
 
 ///////////////////////////////
 //4.计算 c r;
 double C=0,R=0,xd=0;
 double d2=0,dy=0,y2=0;

 for(i=0;i<len;i++)
 {
    d2+=data[i].gcc*data[i].gcc;
    y2+=yi[i]*yi[i];
    dy+=data[i].gcc*yi[i];
    xd+=data[i].gcc*data[i].jxc;
 }
 C=(y*d2-d*dy)/(d2-len*d*d);    //加常数
 R=(dy-len*d*y)/(d2-len*d*d);   //乘常数

 

 //////////////////////////////////
 //5.计算权系数
 double Q11=0,Q22=0,Q12=0;
 Q11=d2/(len*d2-len*len*d*d);

 Q22=1.0/(d2-len*d*d);
 Q12=-len*d/(len*d2-len*len*d*d);
 

/////////////////////////////
 //6.计算单位权中误差
 double V2=0;
 V2=y2-len*y*C-dy*R;
 double M0=0;
 M0=sqrt(V2/(len-2));
 
 //////////////////////////////////////
 //7.协方差估计
 double MC=0,MR=0,MCR=0;
 MC=M0*sqrt(Q11);
 MR=M0*sqrt(Q22);
 MCR=M0*M0*Q12;


 ////////////////////////////////////////////
 //8.基线值与观测值之差与r的相关检验
 double PCR=0;
 PCR=(dy-len*y*d)/sqrt((d2-len*d*d)*(y2-len*y*y));

 ///////////////////////////////////////////////
 //9.用t检验法检验仪器常数的显著性
 double T1=0,T2=0;
 T1=C/MC;
 T2=R/MR;

 

 

 其他的都是些显示和打印的内容,还有不少东西值得总结。

已投稿到:
郑重声明:资讯 【光电测距仪加乘常数计算_icefox_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——