双频修电离层延迟和地球自转改正(北斗定位)

本文探讨了广播星历双频消电离层校正方法,包括使用DCB值,以及在计算卫星坐标后进行地球自转改正的过程,通过设置迭代阈值避免过度迭代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、双频修电离层

关于双频消电离层有两种,广播星历和精密星历。

广播星历对应的是SPP,参考频点为B3,双频组合为B1/B2,B1/B3,B2/B3。

精密星历对应的是PPP,参考频点为B1/B3组合,双频组合为B1/B2,B1/B3,B2/B3。

我们这里讲的是广播星历的双频消电离层。

cdda9ea1df3444c18ebda81eaf1753e9.png

以P13为例,ρ是我们所求。P13是我们的双频伪距,由下图公式求得,P1是频率f1的观测伪距,P2是频率2的观测伪距。

DCB的值在文件中找,记得像DCB13指的是DP3 - DP1。

SVN:用于表示导航卫星的唯一编号。PRN:利用伪随机码标识导航卫星的编号。

0a194846fd5c42d98561c72838b582e1.png

如图所示,红色框中是频点,黄色框中是对应的DCB的值。

二、地球自转改正

我们在经过之前几篇文章的计算及修正后,发现精度还是差30米左右,查阅资料发现,忽略了地球自转改正。

85674758085a4ea596fde575b35ac5b6.png

  我是在算出卫星坐标之后进行的地球自转改正,这里还有一个门限(停止计算时刻),我们还要让他迭代不能超过8次,为了防止一直不接近门限值迭代次数太多。

贴上代码:

/* correction for rotation */
void CorrectForRotation( Sat_t *sat, Klo_t *klo, SPP_t *spp )
{
    double tau = 0;
    double alpha = 0;
    double count = 0;
    double PSE = 0, pseudo = 0;
    double X = 0, Y = 0, Z = 0;
    double xs = 0, ys = 0, zs = 0;

    for(int i = 0;i < N;i++)
    {
        pseudo = spp[i].PR;

        while( fabs(PSE - pseudo) > 1e-5 )      //threshold
        {
            tau = pseudo / C;
            alpha = tau * WE;
            xs = sat[i].X_obs_k * cos(alpha) + sat[i].Y_obs_k * sin(alpha);
            ys =-sat[i].X_obs_k * sin(alpha) + sat[i].Y_obs_k * cos(alpha);
            zs = sat[i].Z_obs_k;

            /* update satellite ECEF coordinate */
            sat[i].X_obs_k = xs;
            sat[i].Y_obs_k = ys;
            sat[i].Z_obs_k = zs;

            PSE = pseudo;
            /* update pseudorange */
            pseudo = sqrt( pow(klo[i].x-X,2) + pow(klo[i].y-Y,2) + pow(klo[i].z-Z,2) );

            count++;
            if(count == 8) break;
        }
        printf("sat %lf %lf %lf\n",sat[i].X_obs_k,sat[i].Y_obs_k,sat[i].Z_obs_k);
    }
}

亲爱的伙伴,爱你们,再见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值