一种数据采集及解码器的设计与实现

时间:2011-07-20

  GPS 是英文Global Positioning System(定位系统)的简称,而其中文简称为“球位系”。GPS是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统 。其主要目的是为陆、海、空三大领域提供实时、 全天候和性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸战略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,覆盖率高达98%的24颗GPS卫星星座己布设完成。在机械领域GPS则有另外一种含义:产品几何技术规范(Geometrical Product Specifications)-简称GPS。

  本文基于X60 RTK接收机,采用VC开发环境,开发了RTCM解码软件,为下一步进行高差分定位解算算法研究和DGPS接收机研制工作提供基础。

  1 RTCM SC-104导航电文简介

  RTCM SC-104是商用DGPS接收机的通用数据格式,该格式与ICD-GPS-200规定的GPS导航电文的字格式、奇偶校验规则相同,不同在于GPS电文中各子帧长度是固定的,而RTCM SC-104电文长度是可变的。RTCM电文结构包括2个字头,后接n个数据字,每字长为30 bit,RTCM SC-104共包括21类63种电文。

  1.1电文1

  电文1是RTCM电文中基本的电文,向用户提供伪距改正数及其变化率,其内容格式如表1所示。

  其中,S为比例因子,是标识伪距改正数PRC和伪距改正数变化率RRC的比例尺度;U表示用户测距误差,有4种编码,每种编码代表不同的用户测距误差;卫星ID 号指卫星的编号;PRC指伪距改正数;RRC指伪距改正数变化率,都是用来修正误差的。

  IOD是改正数的数据龄期,与GPS中IOD意义相同。如果不相同,则不能直接使用该组改正数,因此IOD是保证差分定位的关键,以确保用户使用的导航电文与基准站使用的导航电文相同。

  1.2 电文2

  电文2的格式和电文1完全相同, 包含了卫星导航参数的变化所导致的伪距变率及伪距变率的改变量。如果用户站未能解译出新的星历,而此时基准站已采用了新的星历,则两站所用的星历不一样,此时基准站必须同时播发电文1和电文 2,防止定位结果产生较大误差。

  1.3 电文3

  电文3是GPS参考站参数,用于发送基准站在 WGS-84 坐标系中的坐标信息 ,各占32 bit,给定的坐标至少到cm级。该项电文由 32×3/ 24 = 4 个字组成, 按顺序发送基准站坐标的3个参数,每个字6位是奇偶校验位。

  2  RTCM电文解码方案设计

  2.1 VC++平台简介

  本软件主要基于VC++平台实现,电文的接收用到了VC++中的MSCOMM控件。MSCOMM件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem)。还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。但在实际通信软件设计过程中,MSComm控件并非像想像中那样完美和容易控制。特别是在中文Wln 95/98下通信时更会出现问题。MSCOMM控件提供了2种处理通信的方式:事件驱动方式和查询方式。事件驱动方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSCOMM控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。

  2.2 RTCM电文解码方案

  解码过程可利用电文字头中的先导字01100110进行同步,主要有如下5个步骤。

  (1)字节扫描。传输数据时,通常采用“6/8”格式的方式。每8 bit数据中仅低6 bit是有效位,第7位为标志位“1”,第8位为空格“0”。接收到的数据必须先取低6位,然后判断这低6位是不是在64和127之间,如果不是则丢弃这个数据。

  (2)字节滚动。由于GPS设备多数采用美国国家标准化研究所制定的ANSI X3.16和X3.15型标准接口,故连接到计算机标准串口RS-232上的时候需要进行“字节滚动”。

  (3)取补码。当前一个码字一个比特D30*为1时,必须对当前这个字码的前4个字节取补码;如果D30*为0,则保持不变。奇偶校验位则不必取补码。

  (4)找引导字。寻找RTCM通用电文引导字(01100110或10011001),进行奇偶校验,通过同步完成,否则继续找引导字。

  (5)电文解码。根据帧长度,按相应电文格式解码,主要包括比例因子、用户测距误差、卫星号、PRC等参数。

  具体解码流程图如图1所示。

  3 RTCM数据采集及解码器实现

  3.1 RTCM数据采集及解码器介绍

  本系统基于Windows操作系统,利用VC++编程实现RTCM导航电文解码,它既能从差分基准站接收数据,又能从数据文件读取数据,原始数据和解码结果将被显示及存储,解码结果包括各颗卫星所包含的参数。

  3.2 RTCM数据采集及解码器实现

  图2为数据解调子界面,主要有接收回显窗和解码显示窗2部分,其中接收回显窗显示各模块原始数据,解码显示窗显示解码结果。

  3.3 关键代码介绍

  程序的关键在于对接收到的差分数据解码,根据2.2节的解码方案设计,以电文1为例,程序关键代码如下:

  for( i=0;i<N-10;i++)                //找引导字

  {

  int dxj=b[i]*4+(b[i+1]-bitshift2(b[i+1],4))/16;

  if(dxj==102||pow(2,8)-1-dxj==102) //找到引导字

  {  type=getbit(b[i+1],1,4)*4+getbit(b[i+2],5,6);                //电文类型

  if(bitshift2(b[i+4],1)==1)

  //如D30*等于1,则对后面4个字节取补码

  {……}

  else {i=i+5;}

  //如果D30*不等于1,则不做任何处理

  zt=(b[i]*pow(2,7)+b[i+1]*2+(b[i+2]-bitshift2(b[i+2],5))/32)*0.6;            // z计数

  xuhao=getbit(b[i+2],3,5);          //序号

  changdu=getbit(b[i+2],1,2)*8+getbit(b[i+3],4,6);   //帧长

  health=getbit(b[i+3],1,3);                      //健康度

  int d1=i+5;

  if(type==1||type==62)            //如果是电文1

  {   int cc=0;

  while(1)

  //计算电文1除头码之外的长度cc

  { … }

  while(i+5<10+cc-1)                 //5个字码(3颗卫星所有参数)循环

  {

  ……      //判断是否取补码,解比例因子、用户测距误差、卫星号、PRC

  k=k+3;       //每解完3颗卫星的信息便循环

  }

  }                                           //if type=1

  }                         //if  找到引导字

  if (d2==1)  break;              // 如果到了电文结尾,则结束

  }                                                //for

  4 结果分析

  整个软件测试工作是在华东交通大学信息工程学院的2楼信息技术研究所进行,实验平台基于X60差分GPS接收机进行,接收天线安装在信息学院楼顶。解码结果如表2~表4所示。

  将以上误差数据对自行研制接收机输出结果进行修正,结果如图3所示。

  由图3中结果可看出,其海拔高度的定位误差在1 m内,经度、纬度定位误差分别在10-6度和10-7度,比单频伪距GPS接收机的定位好。通过利用基准站进行差分数据传送进行的定位结果可以达到1 m左右定位,结果进一步证明了解码方法及结果的正确性。

  本文基于X60试验平台,开发了RTCM SC-104导航电文数据采集及解码器。本软件再加上其他相关软件可进行差分基站设计,可充分利用PC编程资源进行开发工作。该算法在自行研制的GPS接收机上运行,已获得了较好的定位,为下一步进行实时DGPS接收机研制提供了基础。


  
上一篇:一种实时操作系统μC/OS-II在LPC2114上移植的实现
下一篇:研祥产品在上海交通中应用实例

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料