1.北斗卫星导航系统

中国北斗卫星导航系统(BeiDou Navigation Satellite System,BDS)是中国自行研制的全球卫星导航系统.北斗卫星导航系统由空间段、地面段和用户段三部分组成,可在全球范围内全天候、全天时为各类用户提供高精度、高可靠定位、导航、授时服务,并具有短报文通信能力,已经初步具备区域导航、定位和授时能力,定位精度10米,测速精度0.2米/秒,授时精度10纳秒。
系统构成:北斗卫星导航系统空间段由5颗静止轨道卫星和30颗非静止轨道卫星组成。

1.北斗一代
由4颗卫星组成,现在只有1C正常工作

北斗一代运用了“有源定位”的方法。导航仪需要向卫星发出信号,由卫星把信号传给地面站,再由它解算出导航仪的位置,之后发给导航仪.由于是采用少量卫星实现的有源定位,系统在定位精度、用户容量、定位的频率次数、隐蔽性等方面均受到限制
2.北斗二代
是中国正在实施的自主发展、独立运行的全球卫星导航系统,致力于向全球用户提供定位、导航、授时服务
由23颗组成卫星组成(2007年到2016年)
在计划中,整个系统将由35颗卫星组成,其中5颗是静止轨道卫星
2017到2018年1月12日发射了第24,25,26,27颗卫星组成北斗3号
北斗卫星导航系统三步走发展规划
时间节点 2004 2012 2020
实现目标 区域有源定位 区域无源定位 全球无源定位
北斗二代是一个军民两用的系统。项目的主要参与者为中国人民解放军总参谋部、总装备部、国家国防科技工业局、中国科学院、中国航天科技集团公司、中国电子科技集团公司、国防科技大学
现在北斗一代用于国家特种行业领域,二代军民两用

2.系统构成

北斗卫星导航系统由空间段、地面段、用户段组成
1.空间段
北斗卫星导航系统空间段计划由35颗卫星组成,包括5颗静止轨道卫星、27颗中地球轨道卫星、3颗倾斜同步轨道卫星.
2.地面段
系统的地面段由主控站、注入站、监测站组成,主控站用于系统运行管理与控制等,注入站用于向卫星发送信号,监测站用于接收卫星的信号,并发送给主控站
3.用户段
用户段即用户的终端,即可以是专用于北斗卫星导航系统的信号接收机,也可以是同时兼容其他卫星导航系统的接收机

3.有源无源定位

定位原理:由于卫星的位置精确可知,在接收机对卫星观测中,我们可得到卫星到接收机的距离,利用三维坐标中的距离公式,利用3颗卫星,就可以组成3个方程式,解出观测点的位置(X,Y,Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式进行求解,从而得到观测点的经纬度和高程.
有源时间测距定位:用户终端通过导航卫星向地面控制中心发出一个申请定位的信号,之后地面控制中心发出测距信号,根据信号传输的时间得到用户与两颗卫星的距离,北斗一代完全基于此技术,而之后的北斗二代除了使用新的技术外,也保留了这项技术
无源时间测距定位:用户接收至少4颗导航卫星发出的信号,根据时间信息可获得距离信息,根据三球交汇的原理,用户终端自行可以自行计算其空间位置
北斗一代定位:三球交汇原理,先发起位置申请
北斗二代定位:和GPS相同,无线电伪距定位,接收4颗卫星的信号
RNSS英文全称Radio Navigation Satellite System:由用户接收卫星无线电导航信号,是一种卫星无线电导航业务,自主完成至少到4颗卫星的距离测量,进行用户位置,速度及航行参数计算。GPS等系统是典型的RNSS系统。
RDSS英文全称Radio Determination Satellite Service:是另一种卫星无线电测定业务,用户至卫星的距离测量和位置计算无法由用户自身独立完成,必须由外部系统通过用户的应答来完成。其特点是通过用户应答,在完成定位的同时,完成了向外部系统的用户位置报告,还可实现定位与通信的集成
RDSS协议版本:北斗用户数据接口协议4.0版,2.1版
RNSS协议版本:一般和GPS一样是NMEA0183协议

4.信号传输

北斗卫星导航系统使用码分多址技术
北斗卫星导航系统的官方宣布,在L波段和S波段发送导航信号,在L波段的B1、B2、B3频点上发送服务信号,包括开放的信号和需要授权的信号。

B1频点:1559.052MHz-1591.788MHz
B2频点:1166.220MHz-1217.370MHz
B3频点:1250.618MHz-1286.423MHz
信息收发:授权用户拥有北斗卫星导航系统和短报文服务,这项服务仅限于亚太地区。军用版容量为120个汉字,民用版49个汉字
北斗波束:波束(wave beam)是指由卫星天线发射出来的电磁波在地球表面上形成的形状(比如说像手电筒向黑暗处射出的光束。)。主要有全球波束、点形波束、赋形波束。它们由发射天线来决定其形状。

5.北斗校验位

校验和字段是语句中的最后一个字段,它在定界符“”星号之后。是对语句中所有字符异或运算。所有字符指在定界符“$”与“”之间(但不包括这些定界符)的全部字符,两位ASCII码表示




  • unsigned char check(unsigned char *a){




  •     unsigned int i;




  •     unsigned char checksum=0;




  •     for(checksum=a[1],i=2;a!='*';i++){




  •         checksum^=a;




  •     }









  •     printf("result=0x%x\n", checksum);









  •     return checksum;









  • }




  • 输入:check("$BDICA,0,00*");




  • 结果:result=0x7d





  • public class bdtest {









  •     public static void main(String[] args) {




  •         byte[] msg = null;




  •         String bdmessage = "A4";









  •         try {




  •             msg = "一二三12".getBytes("GBK");




  •         } catch (Exception e) {









  •         }









  •         //把汉字转成两个字节用hexstring 表示




  •         for(int j=0; j<msg.length;j++){




  •             String tempStr = Integer.toHexString(msg[j]);




  •             System.out.println("hexstring:"+tempStr+" length:"+tempStr.length());




  •             if(tempStr.length() > 2){//如果是汉字




  •                 tempStr = tempStr.substring(tempStr.length()-2);//取最后两位




  •                 System.out.println(":"+tempStr);




  •             }




  •             bdmessage +=tempStr;




  •         }




  •         bdmessage = bdmessage.toUpperCase();














  •         bdmessage = bdmessage.concat("*");




  •         String data = "$CCTXA,144871,1,2,"+bdmessage;




  •         System.out.println(data);









  •          int checksum = CheckSum(data);




  •             String sum = Integer.toHexString(checksum);




  •             if(sum.length()<2)




  •                 sum="0"+sum;









  •             data +=sum;




  •             data +="\r\n";




  •             System.out.println("data:"+data);









  •             //验证接收




  •             String dd = "D2BBB6FEC8FD3132";




  •             byte[] t = HexStringToBytes(dd);




  •             String recv = "";




  •             try {




  •                 recv = new String(t,"GBK");




  •             } catch (Exception e) {









  •             }




  •             System.out.println("recv:"+recv);









  •     }




  •     //按位异或




  •     public static int CheckSum(String s){




  •          String ss = s.substring(1,s.indexOf("*"));









  •          byte[] bt = ss.getBytes();




  •          int checksum = bt[0];









  •          for(int i=1; i<bt.length;i++){




  •              checksum ^= bt;




  •          }









  •          return checksum;









  •      }




  •     //hextstring 转bytes




  •     private static byte[] HexStringToBytes(String s)




  •     {




  •          byte[] bytes;




  •          bytes = new byte[s.length() / 2];









  •          for (int i = 0; i < bytes.length; i++)




  •          {




  •              bytes = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2),16);




  •          }









  •          return bytes;




  •     }




  • }









  • 输出结果:




  • hexstring:ffffffd2 length:8




  • :d2




  • hexstring:ffffffbb length:8




  • :bb




  • hexstring:ffffffb6 length:8




  • :b6




  • hexstring:fffffffe length:8




  • :fe




  • hexstring:ffffffc8 length:8




  • :c8




  • hexstring:fffffffd length:8




  • :fd




  • hexstring:31 length:2




  • hexstring:32 length:2




  • $CCTXA,144871,1,2,A4D2BBB6FEC8FD3132*




  • data:$CCTXA,144871,1,2,A4D2BBB6FEC8FD3132*4f









  • recv:一二三12


分割NMEA0183协议




  • #include <stdio.h>




  • #include <string.h>




  • //char *strtok(char s[], char *delim),把字符串s[] 按*delim分隔符分解成字符串数组,其中分隔符可以是多个",//-"均可




  • int main(){




  •     char bddata[] = "$BDGGA,062938.00,3110.4700719,N,12123.2657056,E,1,25,0.6,58.9666,M,0.000,M,99,AAAA*4";




  •     char *p;




  •     int i=0;




  •     p = strtok(bddata, ",*");




  •     printf("bddata: %s\n", p);




  •     while(1){




  •         p = strtok(NULL, ",*");




  •         if(p == NULL)




  •           break;




  •     printf("bddata: %s\n", p);




  •     }














  •     return 0;









  • }









  • bddata: $BDGGA




  • bddata: 062938.00




  • bddata: 3110.4700719




  • bddata: N




  • bddata: 12123.2657056




  • bddata: E




  • bddata: 1




  • bddata: 25




  • bddata: 0.6




  • bddata: 58.9666




  • bddata: M




  • bddata: 0.000




  • bddata: M




  • bddata: 99




  • bddata: AAAA




  • bddata: 4


参考:http://blog.sina.com.cn/s/blog_539b8ff50102wl0n.html
https://baike.baidu.com/item/%E5%8C%97%E6%96%97%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E7%B3%BB%E7%BB%9F/10390403?fr=aladdin