121 lines
4.7 KiB
C++
121 lines
4.7 KiB
C++
|
//
|
|||
|
// Created by Wakanda_shaw on 2022/5/5.
|
|||
|
//
|
|||
|
|
|||
|
#include "main_window.h"
|
|||
|
#include "rtklib.h"
|
|||
|
#include "iomanip"
|
|||
|
#include "fstream"
|
|||
|
#include "QDir"
|
|||
|
#include <QTextCodec>
|
|||
|
#include "UI/ui_main_window.h"
|
|||
|
|
|||
|
|
|||
|
using namespace std;
|
|||
|
|
|||
|
void main_window::Read_Sat(const QString& Obs_path,const QString& Nav_path, const QString& Sat_path, Ui::main_window *ui, int IONN_MODEL) {
|
|||
|
ofstream satpos_file(Sat_path.toStdString());
|
|||
|
if(satpos_file){
|
|||
|
/* 依此为:PRN<<Epoch<<伪距<<伪距率<<卫星坐标<<卫星速度<<卫星钟差造成的误差<<信噪比 */
|
|||
|
satpos_file<<"PRN"<<','<<"Tow"<<","<<"Psr"<<","<<"dual_cor"<<","<<"tgd_cor"<<","<<"d_Psr"<<","<<"ecef_X"<<","<<"ecef_Y"<<","<<"ecef_Z"<<
|
|||
|
","<<"ecef_VX"<<","<<"ecef_VY"<<","<<"ecef_VZ"<<","<<"clk_err"<<","<<"L1_SNR"<<","<<"Carrier_phase"<<","<<"Satpos_var"<<","<<"clr_dtift"<<endl;
|
|||
|
}
|
|||
|
|
|||
|
gtime_t ts,te,t;
|
|||
|
int n;
|
|||
|
obs_t obs={0};
|
|||
|
nav_t nav={0};
|
|||
|
sta_t sta={""};
|
|||
|
QTextCodec *code = QTextCodec::codecForName("GB2312");//解决中文路径问题
|
|||
|
|
|||
|
|
|||
|
//路径转换
|
|||
|
string obs_path = code->fromUnicode(QDir::toNativeSeparators(Obs_path)).data();
|
|||
|
string nav_path = code->fromUnicode(QDir::toNativeSeparators(Nav_path)).data();
|
|||
|
const char *Obs = obs_path.c_str();
|
|||
|
const char *Nav = nav_path.c_str();
|
|||
|
double vmeas,dual_fre=0,tgd=0;
|
|||
|
|
|||
|
ts.time = 0;
|
|||
|
te.time = 0;
|
|||
|
n=readrnxt(Obs,1,ts,te,0.0,"-SYS=sys[G,C,E,J]",&obs,&nav,&sta);//读obs
|
|||
|
n=readrnxt(Nav,1,ts,te,0.0,"-SYS=sys[G,C,E,J]",&obs,&nav,&sta);//读nav
|
|||
|
n=sortobs(&obs);//得到epoch数目
|
|||
|
uniqnav(&nav);//unique 1下
|
|||
|
/* 设置一下参数 */
|
|||
|
prcopt_t prcopt=prcopt_default;
|
|||
|
prcopt.ionoopt = IONN_MODEL;
|
|||
|
prcopt.tropopt = TROPOPT_SAAS;
|
|||
|
prcopt.nf = 3;//(L1+L2+L5)
|
|||
|
|
|||
|
prcopt.navsys = SYS_CMP|SYS_GPS|SYS_GAL|SYS_QZS;
|
|||
|
double P,P5,freq,range_rate,L1_snr,L2_snr, Carrier_phase,Satpos_var, clk_drift;
|
|||
|
double epoch_time;
|
|||
|
int epoch_length=0;
|
|||
|
|
|||
|
|
|||
|
for(int i=0;i<n;i++){
|
|||
|
int progress_value = 70+i/(n/30);
|
|||
|
ui->progressBar->setValue(progress_value);
|
|||
|
t = timeadd(obs.data[0].time,(double)i);
|
|||
|
char str[64];
|
|||
|
time2str(t,str,3);
|
|||
|
epoch_time=time2gpst(t,NULL);
|
|||
|
obs_t epoch_obs={0};
|
|||
|
readrnxt(Obs,1,t,t,0.0,"-SYS=sys[G,C,E,J]",&epoch_obs,&nav,&sta);
|
|||
|
epoch_length = epoch_obs.n;
|
|||
|
|
|||
|
/* 计算卫星位置 */
|
|||
|
double *rs1,*dts1,*var;
|
|||
|
int svh[MAXOBS];
|
|||
|
rs1=mat(6,epoch_obs.n); dts1=mat(2,epoch_obs.n);var=mat(1,epoch_obs.n);
|
|||
|
satposs(t,epoch_obs.data,epoch_obs.n,&nav,EPHOPT_BRDC,rs1,dts1,var,svh);
|
|||
|
|
|||
|
/* 当前epoch所观测到的数据进行遍历处理 */
|
|||
|
for(int j =0;j<epoch_obs.n;j++){
|
|||
|
int sta_error=0; // 用来检测
|
|||
|
if(svh[j]<0){
|
|||
|
cout<<"svh < 0"<<endl;
|
|||
|
continue;
|
|||
|
}
|
|||
|
for(int k=0;k<6;k++){
|
|||
|
if(rs1[k+j*6] == 0){
|
|||
|
sta_error=1;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if(sta_error==1){
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
// P=prange(epoch_obs.data+j,&nav,&prcopt,&vmeas);// 电离层/TGD修正后的伪距
|
|||
|
P = epoch_obs.data[j].P[0];
|
|||
|
ion_compensation(epoch_obs.data+j,&nav,&prcopt,&vmeas,&dual_fre,&tgd);
|
|||
|
freq=sat2freq(epoch_obs.data[j].sat,epoch_obs.data[j].code[0],&nav);// 找到对应频率
|
|||
|
range_rate = -epoch_obs.data[j].D[0]*CLIGHT/freq + CLIGHT*dts1[1+j*2];// 观测的伪距率
|
|||
|
L1_snr = epoch_obs.data[j].SNR[0]*SNR_UNIT;//信噪比L1
|
|||
|
Carrier_phase = epoch_obs.data[j].L[0]*CLIGHT/freq;
|
|||
|
Satpos_var = var[j];
|
|||
|
clk_drift = dts1[1+j*2]*CLIGHT;
|
|||
|
/*
|
|||
|
依此为:PRN<<时间Tow<<伪距<<伪距率<<卫星坐标<<卫星速度<<卫星钟差造成的误差<<信噪比
|
|||
|
*/
|
|||
|
// cout<<uint(epoch_obs.data[j].sat)<<" "<<epoch_time+18<<" "<<fixed<<setprecision(10)<<P<<" "<<dual_fre<<","<<tgd<<","<<range_rate<<" "<<rs1[0+j*6]<<" "<<rs1[1+j*6]<<" "<<rs1[2+j*6]<<" "<<rs1[3+j*6]<<" "<<rs1[4+j*6]<<" "<<rs1[5+j*6]<<" "<<dts1[0+j*2]*CLIGHT<<" "<<L1_snr<<endl;
|
|||
|
|
|||
|
if(satpos_file){
|
|||
|
satpos_file<<int(epoch_obs.data[j].sat)<<","<<epoch_time+18<<","<<fixed<<setprecision(10)<<P<<","<<dual_fre<<","<<tgd<<","<<range_rate<<","<<rs1[0+j*6]<<","<<rs1[1+j*6]<<","<<rs1[2+j*6]<<","<<rs1[3+j*6]<<","<<rs1[4+j*6]<<","<<rs1[5+j*6]<<","<<dts1[0+j*2]*CLIGHT<<","<<L1_snr<<
|
|||
|
","<<Carrier_phase<<","<<Satpos_var<<","<<clk_drift<<endl;
|
|||
|
}
|
|||
|
}
|
|||
|
free(rs1);
|
|||
|
free(dts1);
|
|||
|
free(var);
|
|||
|
free(epoch_obs.data);
|
|||
|
epoch_obs.data = NULL;
|
|||
|
epoch_obs.n=epoch_obs.nmax=0;
|
|||
|
}
|
|||
|
satpos_file.close();
|
|||
|
}
|
|||
|
|
|||
|
|