之前版本在配置文件中L1+L5的選項,但是並沒有實現L1+L5雙頻結算功能,在2.4.3.b34版本中直接去掉L1+L5選項。
若想實現L1+L5雙頻解算可對2.4.3.b34版本進行略微改動(2.4.3.b34版本對數據讀取部分進行了優化,實現L1+L5更方便)
實現L1+L5雙頻解算一般兩種策略:
(1)在數據讀取時,將L2與L5數值調換儲存位置
(2)在數據處理時,在處理L2頻率時,讓其跳過
我選用的是第一種方法:在數據讀取時,將L2與L5數值調換儲存位置,(個人認為:方法(1)優點:不管什么定位模式,數據解算部分無需改動,都可以直接正常處理)
2.4.3.b34版本對設置信號索引函數 set_index() 進行了優化,使策略(1)實現L1+L5雙頻解算更加方便
/* set signal index ----------------------------------------------------------*/ static void set_index(double ver, int sys, const char *opt, char tobs[MAXOBSTYPE][4], sigind_t *ind)
只需改動兩個地方,我為了方便直接設置了一個宏定義判斷,在頭文件中宏定義 ‘L5_TO_L2’ 即可處理L1+L5雙頻,不定義即可處理L1+L2雙頻
兩處改動均在 rtkcmn.c文件中
改動1: 交換L2與L5儲存位置索引
/* GPS obs code to frequency ------------------------------------------------- * 改動前 */ static int code2freq_GPS(uint8_t code, double *freq) { char *obs=code2obs(code); switch (obs[0]) { case '1': *freq=FREQ1; return 0; /* L1 */ case '2': *freq=FREQ2; return 1; /* L2 */ case '5': *freq=FREQ5; return 2; /* L5 */ } return -1; } /* GPS obs code to frequency ------------------------------------------------- * 改動后 */ static int code2freq_GPS(uint8_t code, double *freq) { char *obs=code2obs(code); switch (obs[0]) { case '1': *freq=FREQ1; return 0; /* L1 */ #ifdef L5_TO_L2 /* 實現l1+l5 @Zhehua Yang */ case '5': *freq=FREQ5; return 1; /* L5 */ case '2': *freq=FREQ2; return 2; /* L2 */ #else case '2': *freq=FREQ2; return 1; /* L2 */ case '5': *freq=FREQ5; return 2; /* L5 */ #endif } return -1; }
改動2:交換L2與L5優先級索引
/** 改動前 */ static char codepris[7][MAXFREQ][16]={ /* code priority for each freq-index */ /* 0 1 2 3 4 5 */ {"CPYWMNSL","PYWCMNDLSX","IQX" ,"" ,"" ,"" ,""}, /* GPS */ {"CPABX" ,"PCABX" ,"IQX" ,"" ,"" ,"" ,""}, /* GLO */ {"CABXZ" ,"IQX" ,"IQX" ,"ABCXZ" ,"IQX" ,"" ,""}, /* GAL */ {"CLSXZ" ,"LSX" ,"IQXDPZ" ,"LSXEZ" ,"" ,"" ,""}, /* QZS */ {"C" ,"IQX" ,"" ,"" ,"" ,"" ,""}, /* SBS */ {"IQXDPAN" ,"IQXDPZ" ,"DPX" ,"IQXA" ,"DPX" ,"" ,""}, /* BDS */ {"ABCX" ,"ABCX" ,"" ,"" ,"" ,"" ,""} /* IRN */ }; /** 改動后 */ #ifdef L5_TO_L2 static char codepris[7][MAXFREQ][16]={ /* code priority for each freq-index */ /* 0 1 2 3 4 5 */ {"CPYWMNSL","IQX" ,"PYWCMNDLSX","" ,"" ,"" ,""}, /* GPS */ {"CPABX" ,"IQX" ,"PCABX" ,"" ,"" ,"" ,""}, /* GLO */ {"CABXZ" ,"IQX" ,"IQX" ,"ABCXZ" ,"IQX" ,"" ,""}, /* GAL */ {"CLSXZ" ,"IQXDPZ" ,"LSX" ,"LSXEZ" ,"" ,"" ,""}, /* QZS */ {"C" ,"" ,"IQX" ,"" ,"" ,"" ,""}, /* SBS */ {"IQXDPAN" ,"DPX" ,"IQXDPZ" ,"IQXA" ,"DPX" ,"" ,""}, /* BDS */ {"ABCX" ,"" ,"ABCX" ,"" ,"" ,"" ,""} /* IRN */ }; #else static char codepris[7][MAXFREQ][16]={ /* code priority for each freq-index */ /* 0 1 2 3 4 5 */ {"CPYWMNSL","PYWCMNDLSX","IQX" ,"" ,"" ,"" ,""}, /* GPS */ {"CPABX" ,"PCABX" ,"IQX" ,"" ,"" ,"" ,""}, /* GLO */ {"CABXZ" ,"IQX" ,"IQX" ,"ABCXZ" ,"IQX" ,"" ,""}, /* GAL */ {"CLSXZ" ,"LSX" ,"IQXDPZ" ,"LSXEZ" ,"" ,"" ,""}, /* QZS */ {"C" ,"IQX" ,"" ,"" ,"" ,"" ,""}, /* SBS */ {"IQXDPAN" ,"IQXDPZ" ,"DPX" ,"IQXA" ,"DPX" ,"" ,""}, /* BDS */ {"ABCX" ,"ABCX" ,"" ,"" ,"" ,"" ,""} /* IRN */ }; #endif
2.4.3.b34版本頻率是用 code2freq_GPS() 這些函數得到的,因為在改動1中已經進行了改動,所以L5頻點的頻率與與觀測值是對應關系無需進行其他改動。