XiaoGongWei / MG_APP

MG-APP (https://link.springer.com/article/10.1007/s10291-020-00976-1);
https://xiaogongwei10.blog.csdn.net/
95 stars 52 forks source link

在MG-APP输入已知参数(坐标,对流层) #7

Open XiaoGongWei opened 4 years ago

XiaoGongWei commented 4 years ago

想改MG-APP代码,固定坐标(已经知道)或者对流层参数(已经从其他渠道获取),不想大改,去调整矩阵结构去少估计参数。是不是可以在每次更新的时候,将对应位置过程噪声设为0,以及同时给想固定参数赋值,即可达到相应效果。是否从理论上可行。

XiaoGongWei commented 4 years ago

1、坐标参数:把坐标初始化噪声和转移噪声设置0,近似坐标spp_pos参数用真实坐标带入,即在下图滤波前spp_pos替换真实坐标,QPPPModel:run第826行。 // store spp position spp_vct[0] = spp_pos[0]; spp_vct[1] = spp_pos[1]; spp_vct[2] = spp_pos[2]; if (!m_Solver_Method.compare("SRIF", Qt::CaseInsensitive)) is_filter_good = m_SRIFAlgorithm.SRIFforStatic(prevEpochSatlitData,epochResultSatlitData,spp_pos,X,P); else is_filter_good = m_KalmanClass.KalmanforStatic(prevEpochSatlitData,epochResultSatlitData,spp_pos,X,P);

2、对流层需要带入你获取的精确ZTD经过投影改正到斜向观测值L上,滤波估计对流层残差也可以, QPPPModel:run第735行。初始噪声和转移噪声矩阵都设置0

//Calculate and save the annual accumulation date double TDay = qCmpGpsT.YearAccDay(epochTime.Year,epochTime.Month,epochTime.Day); double p_BLH[3] = {0},mf = 0, TropZHD_s = 0; qCmpGpsT.XYZ2BLH(spp_pos[0], spp_pos[1], spp_pos[2], p_BLH); if(0 == store_epoch_ZHD) getTropDelay(MJD,TDay,EA[0],p_BLH,&mf, &TropZHD_s, NULL, &store_epoch_ZHD); else getTropDelay(MJD,TDay,EA[0],p_BLH,&mf, &TropZHD_s, NULL); tempSatlitData.SatTrop = TropZHD_s;//*把这里斜向ZHD在这里替换成文件的ZTDmf(因为mf与md非常接近,最好干延迟投影函数md,真实ZTD是你从文件计算得到的)** tempSatlitData.StaTropMap = mf; tempSatlitData.UTCTime.TropZHD = store_epoch_ZHD;

3、QKalmanFilter::initKalman更改初始化的协方差和转移噪声;QKalmanFilter::changeKalmanPara更改换星后的协方差和转移噪声;这两个地方都要考虑,手动更改代码。