ZJUT_Nav/QT/Win/read_IMU/Source/Read_Sat.cpp
ZhiQiang_Yang98 79f5c035ab Revert "syn"
This reverts commit 34a3ce7899a56f426ddb1f91073dfcd1cd373b5b.
2022-11-28 10:49:41 +08:00

121 lines
4.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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();
}