//////////////////////////////////////////////////////////////// // // キャリアスムージングを行う // //////////////////////////////////////////////////////////////// #include #include const double PI = 3.1415926535898;//円周率 const double CS = 299792458.0;//光速 const double F1 = 1575420000.0; const double F2 = 1227600000.0; const int SATMAX = 36;//GPSの最大総数 const int GPS = 32;//GPSの最大総数 #define DIV1 1//何個(縦横)にグリッドを区切るか #define DIVMAX 4//グリッドを格納する配列の最大値を設定 extern FILE *dd_code; extern int Enable[DIVMAX][DIVMAX],Enable_sat[DIVMAX][DIVMAX][SATMAX];//使用可能衛星 extern int Actual_satn;//実際のGPS,GEO衛星の運用数を入れる extern int Enable_sat_stock[DIVMAX][DIVMAX][SATMAX];//2000/11/04 //予備 extern int Enable2[DIVMAX][DIVMAX]; extern int Enable_sat2[DIVMAX][DIVMAX][SATMAX];//使用可能衛星 extern int Total_sat;//トータル衛星数 extern int Ref_sat;//最大仰角衛星のこと extern int UNUSE_GPS[16];//アルマナック情報のない衛星をストックする extern int Com_sat[SATMAX],Com_satn; extern int Integer_r1[SATMAX],Integer_m1[SATMAX],DD_integer1[SATMAX]; extern int QZSS; extern int CS_check[SATMAX]; extern double Pr1ref[SATMAX],Pr1mov[SATMAX],Pr2ref[SATMAX],Pr2mov[SATMAX]; extern double Cp1ref[SATMAX],Cp1mov[SATMAX],Cp2ref[SATMAX],Cp2mov[SATMAX]; extern double DD_code1[SATMAX]; extern double Sat_xpos[SATMAX],Sat_ypos[SATMAX],Sat_zpos[SATMAX];//地球中心座標系 extern double POSx[DIVMAX][DIVMAX],POSy[DIVMAX][DIVMAX],POSz[DIVMAX][DIVMAX];//解析位置 extern double Cn[SATMAX],GPSTIME; void carrier_smoothing() { int i; int prn; int n1,n2; static int smoothing[SATMAX]={0}; static int iter=0,stock_iter[SATMAX]={0}; static double Stock_Pr1ref[SATMAX],SPr1ref[SATMAX]; static double OldCp1ref[SATMAX]; n1=1; n2=100;//smoothing time iter++; for(i=0;i=1.75 && Stock_kaisu[rcvn][prn]-Stock2_kaisu[rcvn][prn]<=1){ Stock_kaisu[rcvn][prn] = 0; cout << GPSTIME << " slip_error " << prn << endl; //fprintf(fp[8],"%f,%d,%d\n",DGPSTIME,prn,1); } } else if(kaisu[rcvn]-Stock_kaisu[rcvn][prn]==2)//一度データが飛んでいる場合 { if(fabs((cp1[rcvn][prn]-Oldcp1[rcvn][prn])/2-(Oldcp1[rcvn][prn]-Old2cp1[rcvn][prn]))>=1.75 && Stock_kaisu[rcvn][prn]-Stock2_kaisu[rcvn][prn]<=1){ Stock_kaisu[rcvn][prn] = 0; //fprintf(fp[8],"%f,%d,%d\n",DGPSTIME,prn,2); } } else i=i; #endif // SPr1[rcvn][prn] = 0; CS_check[prn] = 0; smoothing[prn]++; if(smoothing[prn]>0 && smoothing[prn]<=n1){ Stock_Pr1ref[prn]=Pr1ref[prn]; SPr1ref[prn]=Pr1ref[prn]; } else { //規定回数以上スムージングを行った場合の処理 if(smoothing[prn]>=n2){ smoothing[prn]=n2; CS_check[prn] = 1; } //スムージングを実際にやっているところ SPr1ref[prn]=(smoothing[prn]-n1)*(Stock_Pr1ref[prn]+ (Cp1ref[prn]-OldCp1ref[prn]))/(smoothing[prn])+ Pr1ref[prn]/(smoothing[prn]); Stock_Pr1ref[prn] = SPr1ref[prn]; } OldCp1ref[prn]=Cp1ref[prn]; stock_iter[prn] = iter; //スムージングした擬似距離を使用する場合 Pr1ref[prn] = Stock_Pr1ref[prn]; }//for 衛星数分 }