RTCM数据解码

news2024/10/7 6:50:02

RTCM

RTCM数据协议介绍

1. 一帧数据组成

在这里插入图片描述

2.数据接收

/*(1) synchronize frame */
if (rtcm.nbyte == 0)
 {
  if (data != RTCM3PREAMB)//RTCM3PREAMB:同步码
  return 0;
  rtcm.buff[rtcm.nbyte++] = data;
   return 0;
  }
//(2)添加一Byte数据
 rtcm.buff[rtcm.nbyte++] = data;
 
// (3)当Byte数量为3时,读取数据长度(一帧RTCM数据除去CRC的数据的Byte数)
if (rtcm.nbyte == 3)
 {
 //getbitu(rtcm.buff, 14, 10)得到rtcm.buff第14个字节之后的10个字节信息。
// ,+3表示前三个byte(同步码、保留位、数据长度)
 rtcm.len = (int)rtcmcmn.getbitu(rtcm.buff, 14, 10) + 3; /* length without parity */
 }

//(4)读取完成nbyte数重置
 if (rtcm.nbyte < 3 || rtcm.nbyte < rtcm.len + 3) //+3表示比数据长度多接收3个Byte,其为为校验位
    return 0;
 rtcm.nbyte = 0;

实时数据传输进来经过(1)(2)(3)(4)四个步骤存储到buff中。

注:byte[] buff。每次接收1Byte(字节)数据对应8bit(位)

  • 位(bit):比特,指二进制中的一位,是二进制的最小信息单位。 bit也被称作小b,用b表示。(所以byte是大B),一个二进制数据0或1,是1bit。
  • 字节byte:1byte有8位 最大值为255 最小值是0 2^8-1=255
/*
目的获取buff(byte数组)从pos位起始后len位表示的信息。 
*/
 public static uint getbitu(byte[] buff, int pos, int len)
 {
 uint bits = 0;
 int i;
 try
  {
    for (i = pos; i < pos + len; i++)
     {
     //[i / 8] 取整,i % 8取余
     bits = (bits << 1) + ((uint)(buff[i / 8] >> (7 - i % 8)) & 1u);
     }
   }
return bits;
}

注:[i / 8]:当前位i所在的buff索引,buff[i / 8] :包含当前位信息的字节(Byte),(buff[i / 8] >> (7 - i % 8):截取字节中i位的信息。(bits << 1) :将上一次循环计算得到的高位信息左移来保留高位信息。

3. CRC校验

再通过(4)判定之后,接受完一帧数据通过CRC校验保证数据的完整性。

  //(5)校验位,校验数据是否完整
if (rtcmcmn.crc24q(rtcm.buff, rtcm.len) != rtcmcmn.getbitu(rtcm.buff, rtcm.len * 8, 24))
   {
    //trace(2, "rtcm3 parity error: len=%d\n", rtcm.len);
    return 0;
   }

CRC检校原理
模2除法
RTKLIB中CRC-24Q检校代码:

  crc = ((crc << 8) & 0xFFFFFF) ^ tbl_CRC24Q[(crc >> 16) ^ buff[i]];
  • crc << 8表示将32位的crc左移8位,低位补0。(crc << 8) & 0xFFFFFF表示只取移位后从低位开始的24位,即从左到右24位。crc >> 16表示将crc右移16位。
  • (crc >> 16) ^ buff[i] 表示对移位后的数据与buff[i]中的八位进行按位异或运算得到n
  • 最后根据计算结果n选取tbl_CRC24Q数组中的第n个数在与(crc << 8) & 0xFFFFFF进行按位异或运算。
    注:tbl_CRC24Q数组为八位二进制数组(即0-255的二进制表示),表示原始数据除以相应校验多项式后的余数表。

注:

<<:左移运算,a<<m,将a按二进制位向左移动m位,高位移除后,低位补0>>:右移运算,a>>m,将a按二进制位向右移动m位,低位移除后,高位补0^  :按位异或运算,二进制逐位非或,从最小(及最右)的位开始,对操作位数逐位操作,相同           为0,不同为1。例如:X:0000 1011 1111   Y:1111 0101 1111     X^Y:1111 1110 00000xFFFFFF0x表示16进制,FFFFFFFF 一个F代表4位的1111

crc表介绍

常用数据类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot整合Spring Fox生成Swagger文档

Spring Fox简介 Springfox是一个用于在Spring应用程序中生成Swagger文档的开源库。它提供了一组注解和工具&#xff0c;可以将你的API代码和文档整合在一起&#xff0c;方便生成和展示API的Swagger文档。 使用Springfox&#xff0c;你可以在Spring Boot项目中集成Swagger&…

设计模式—创建型模式之单例模式

设计模式—创建型模式之单例模式 介绍 单例模式说明&#xff1a;一个单一的类&#xff0c;负责创建自己的对象&#xff0c;同时确保系统中只有单个对象被创建。 单例模式特点&#xff1a; 某个类只能有一个实例&#xff1b;&#xff08;构造器私有&#xff09;它必须自行创…

线程间的调度顺序

目录 ♫join和sleep ♫wait ♫notify和notifyAll 我们知道线程是抢占式执行&#xff0c;随机调度的&#xff0c;而这也是诱发线程安全的根本原因。我们虽然无法指定线程之间的调度顺序&#xff0c;但是可以通过JVM提供的一些API让某个线程阻塞&#xff0c;主动放弃CPU&#xf…

vue3响应式对象:ref和reactive

ref() <template><button click"changeMsg">改变信息</button><div>{{ msg }}</div><div>{{ man }}</div> </template><script lang"ts"> import { defineComponent,ref,Ref } from vueexport def…

Android 11.0 禁用插入耳机时弹出的保护听力对话框

1.前言 在11.0的系统开发中,在某些产品中会对耳机音量调节过高限制,在调高到最大音量的70%的时候,会弹出音量过高弹出警告,所以产品 开发的需要要求去掉这个音量弹窗警告功能 2.禁用插入耳机时弹出的保护听力对话框的核心类 frameworks\base\packages\SystemUI\src\com\and…

在el-dialog中使用tinymce 点击工具栏下拉框被遮挡

在el-dialog中使用tinymce控件时&#xff0c;会出现点击工具栏下拉框出现在弹窗下一层&#xff0c;审查元素之后发现是tinymce的下拉框z-index优先级低于el-dialog的z-index导致的&#xff0c;所以需要增加tinymce的下拉框的z-index值。 通过审查元素得到&#xff0c;需要修改t…

物联网设备安全性:构建可信任的智能生态系统

第一章&#xff1a;引言 物联网&#xff08;IoT&#xff09;已经成为现代社会的重要组成部分&#xff0c;将我们的生活变得更加智能化和便利。从智能家居到工业自动化&#xff0c;物联网设备正日益渗透到各个领域。然而&#xff0c;随着物联网设备的普及&#xff0c;安全性问题…

牛客网刷题-(5)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

Spark On Hive原理和配置

目录 一、Spark On Hive原理 &#xff08;1&#xff09;为什么要让Spark On Hive&#xff1f; 二、MySQL安装配置&#xff08;root用户&#xff09; &#xff08;1&#xff09;安装MySQL &#xff08;2&#xff09;启动MySQL设置开机启动 &#xff08;3&#xff09;修改MySQL…

常用应用安装教程---在centos7系统上安装JDK8

在centos7系统上安装JDK8 1&#xff1a;进入oracle官网下载jdk8的tar.gz包&#xff1a; 2&#xff1a;将下载好的包上传到每个服务器上&#xff1a; 3&#xff1a;查看是否上传成功&#xff1a; [rootkafka01 ~]# ls anaconda-ks.cfg jdk-8u333-linux-x64.tar.gz4&#xf…

Ps:简单快速的主背分离方法

将主体与背景分离开来&#xff0c;可大大提高后期调色修片的效率。本文介绍的方法&#xff0c;简单快速&#xff0c;实用性强。 ◆ ◆ ◆ 主背分离一般步骤及说明 1、复制背景图层两次&#xff0c;分别命名为&#xff1a;“主体”和“新背景”。隐藏原背景图层。 2、选取主体…

华为NAT配置实例(含dhcp、ospf配置)

一、网络拓朴如下&#xff1a; 二、要求&#xff1a;PC1 能访问到Server1 三、思路&#xff1a; R2配置DHCP&#xff0c;R2和R1配OSPF&#xff0c;R1出NAT 四、主要配置&#xff1a; R2的DHCP和OSPF&#xff1a; ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…

进程/线程/PCB

进程&#xff1a;正在运行中的程序&#xff08;进程是驻留在内存中的&#xff09; 是系统执行资源分配和调度的独立单位每一个进程都有属于自己的存储空间和系统资源注意&#xff1a;进程A 和 进程B 的内存独立不共享 使用jdk自带的工具&#xff0c;jconsole查看当前Java进程中…

【C++】STL容器——vector类的使用指南(含代码演示)(11)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一、vector类——基本介绍二、vector类…

日本IT Week秋季展丨美格智能以技术创新共建美好数字生活

10月25日至27日&#xff0c;日本国际IT消费电子展览会&#xff08;Japan IT Week 2023秋季展&#xff09;在日本千叶幕张国际展览中心举行。日本IT周是日本IT市场的标杆&#xff0c;涵盖软件开发、大数据管理、嵌入式系统、数据存储、信息安全、数据中心、云计算、物联网&#…

python自动化测试(四):ECShop后台:商品分类添加

前置条件&#xff1a; 本地部署&#xff1a;ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) &#xff08;32 位&#xff09; Google驱动的selenium版本是3.11.0 目录 前置代码 一、登录&#xff08;后台登录&#xff09; 二、进入商品分类页…

嵌入式系统设计师考试笔记之操作系统基础复习笔记二

目录 3、任务管理 &#xff08;1&#xff09;嵌入式操作系统的任务管理可以分为 &#xff08;2&#xff09;进程 &#xff08;3&#xff09;线程 &#xff08;4&#xff09;任务 &#xff08;5&#xff09;任务的创建与中止 &#xff08;6&#xff09;任务的状态任务有三…

Spring Boot 使用 Disruptor 做内部高性能消息队列

这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇…

rust入门

一&#xff0c;输入输出 println!("Hello, World"); 二&#xff0c;函数 1&#xff0c;main函数 fn main() {println!("Hello, World"); }2&#xff0c;普通函数 fn myPrint(){println!("{}", 1234); } fn main() {myPrint(); }3&#xff0…

AI新能量!FortiGate NGFW面向数据中心全面集成FortiGuard AI 安全服务

企业IT技术正在以惊人的速度发展&#xff0c;转型最大的领域之一是下一代防火墙&#xff08;NGFW&#xff09;市场。如今&#xff0c;混合云、多云、边缘等多种基础设施形态共存&#xff0c;已经成为大部分企业的常态&#xff0c;不断扩张的攻击面需要不同形态防火墙的安全防护…