1. 程式人生 > >GPS信噪比解析

GPS信噪比解析

信噪比資料格式

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;
}