RTKLIB中质量控制函数之——testsnr()函数
RTKLIB中的随机模型用的是高度角模型,
可以针对不同高度角设置不同的信噪比阈值,对信噪比低于所设阈值的观测值进行剔除。
/* test SNR mask --------------------------------------------------------------- * test SNR mask * args : int base I rover or base-station (0:rover,1:base station) * int idx I frequency index (0:L1,1:L2,2:L3,...) * double el I elevation angle (rad) * double snr I C/N0 (dBHz) * snrmask_t *mask I SNR mask * return : status (1:masked,0:unmasked) *-----------------------------------------------------------------------------*/ extern int testsnr(int base, int idx, double el, double snr, const snrmask_t *mask) { double minsnr,a; int i; /* mask->ena:为rover、base检测信噪比功能的开关;0:不检测信噪比,1:检测信噪比 */ if (!mask->ena[base]||idx<0||idx>=NFREQ) return 0; a=(el*R2D+5.0)/10.0; /* 将高度角分为10个区间:0-5、5-15、15-25、25-35、35-45、45-55、55-65、65-75、75-85、85-90 */ i=(int)floor(a);
a-=i; if (i<1) minsnr=mask->mask[idx][0]; /* 高度角在0-5,直接按 设置的第一个阈值 */ else if (i>8) minsnr=mask->mask[idx][8]; /* 高度角在85-90,直接按最后一个阈值 */ else minsnr=(1.0-a)*mask->mask[idx][i-1]+a*mask->mask[idx][i]; /* 其他的高度角,需要相邻阈值拟合一下 */ return snr<minsnr; }