GPS信噪比解析
阿新 • • 發佈:2019-01-07
信噪比資料格式
GPS信噪比反映了GPS接收訊號的強弱,決定了產品的定位效能。
下面列舉一下GPS信噪比資料資訊:
$GPGSV,2,1,05,07,28,324,32,08,79,302,35,23,,,30,27,51,028,42*48.
$GPGSV,2,2,05,28,,,28*7C.
抽象表達為:$GPGSV,(1),(2),(3),(4),(5),(6),(7),…(4),(5),(6),(7)*hh(CR)(LF)
(1)GSV語句總條數(2)當前GSV語句編號
(3)可視衛星總數 (4)衛星編號 (5)仰角(00~90度) (6)方位角(000~359度) (7)信噪比(00~99dB)
其中每顆可視衛星都包含:編號、仰角、方位角和信噪比,每條語句最多包含4顆衛星資料。
資料解析
void DataAnalyse(unsigned char *p_Data) { p_Begin = p_Data; p_End = p_Data; while(1) { p_Begin = p_End; p_End = Ql_strchr(p_Begin, '\n'); if(p_End == NULL) { //在該字串中找不到該字元,或者到達字串結束符,則直接退出 break; } else { //找到了該字串,表明得到了一行有效GPS資料 *p_End = 0; if(CheckData(p_Begin) == -1) { //校驗資料不通過直接退出 break; } //處理該字串資料 //主要GPS定位資料 if( Ql_strncmp(p_Begin+3,"RMC",3)==0) { ret = GpsGprmc(p_Begin,&Data); if(ret == 0) { //GPS定位無效 ucGpsValid = 0; ucGpsFlag = 0; //此行無效,但是要解析其他行 } else { ucGpsFlag = 1; } } //可視衛星數,信噪比資料 else if(Ql_strncmp(p_Begin+3,"GSV",3)==0) { ret = GpsGpgsv(p_Begin, &Data); if(ret == 0) { } else { } //對資料進行排列:氣泡排序,N個數需要排(N-1)次,每次需要比較(N-已排數-1)次 for(j=0;jsatelliteAll =Ql_atoi(tmpbuf); ucSatelliteAll = GPS->satelliteAll; if(ucSatelliteAll == 0) ucSatelliteAll = 1; //衛星信噪比獲取 /* 4 */ //衛星資訊 while(1) { //衛星編號 ret = GetString(&ucGpsDataP, tmpbuf, 15); if (*ucGpsDataP != ',') break; ucGpsDataP++; //仰角 ret = GetString(&ucGpsDataP, tmpbuf, 15); if (*ucGpsDataP != ',') break; ucGpsDataP++; //方位角 ret = GetString(&ucGpsDataP, tmpbuf, 15); if (*ucGpsDataP != ',') break; ucGpsDataP++; //信噪比 ret = GetString(&ucGpsDataP, tmpbuf, 15); if (*ucGpsDataP != ',') break; ucGpsDataP++; ucGpsValue[sucIndex]=Ql_atoi(tmpbuf); sucIndex++; if(sucIndex>=25) { sucIndex=0; } } return 1; DataInvalid: return 0; }