在RTKLIB的ppp_res中有这样一段程序:
/* reject satellite by pre-fit residuals */
if (!post&&opt->maxinno>0.0&&fabs(v[nv])>opt->maxinno) {
trace(2,"outlier (%d) rejected %s sat=%2d %s%d res=%9.4f el=%4.1f\n",
post,str,sat,j%2?"P":"L",j/2+1,v[nv],azel[1+i*2]*R2D);
exc[i]=1; rtk->ssat[sat-1].rejc[j%2]++;
continue;
}
其中对于rtk->ssat[sat-1].rejc的索引取余,那么问题来了,rejc是这样定义的:
unsigned int rejc [NFREQ]; /* reject counter */
表示剔除第几个频率的计数,而在该函数中,若j表示L1,P1,L2,P2,当j表示P1即j=1,这是rejc索引为1,表示剔除第二个频率的数据。
基于此,认为rejc的索引应该取整而不是取余,即:
rtk->ssat[sat-1].rejc[j/2]++;
并且上述程序中trace表示剔除的也是取整,故认为这应该是一个bug。不过rejc并不影响程序正常运行,只是在输出解算状态信息会不对。
本文分析了RTKLIB库中ppp_res函数的一个潜在Bug,涉及卫星数据的预拟合残差剔除过程。具体讨论了rejc变量的索引操作,指出其可能存在的问题及对程序解算状态输出的影响。
8万+

被折叠的 条评论
为什么被折叠?



