RTKLIB 中的天线相位缠绕误差修正

2023-05-16

之前一直没有细看精密定位(PPP)中的相位缠绕,不过我觉得还是应该至少从应用层面理解PPP中每项修正。因此抱着不求甚解的心情(没有仔细去研究右旋极化信号、偶极等概念),只从应用的角度来看看RTKLIB是如何进行天线相位缠绕修正的。

文章目录

    • 相位缠绕概念
    • 相位缠绕误差计算方法
    • model_phw函数
    • 参考文献

相位缠绕概念

根据各文献的引用来看,参考文献[1]是最经典的文献,但是没有找到下载,只能从其他博客和论文[2~6]得到对以下问题的一些理解。

  • 相位缠绕是什么?
    发射天线和接收天线绕极化轴方向发生相对旋转时,测量的载波相位值会发生变化,这个现象称为相位缠绕。

  • 相位缠绕对码的影响?
    相位缠绕只影响载波相位测量,不影响码相位测量,在非精密定位中可以忽略其影响。

  • 相位缠绕对RTK的影响?
    相位缠绕的整周数部分可以被整周模糊度吸收,其不足整周的小数部分会造成误差。当天线只绕其极化轴旋转时,相位缠绕误差对各卫星的相位观测值影响均相同,在定位算法中和接收机相位钟差耦合而被吸收 。因此在静态短基线测量以及RTK测量中,通常忽略相位缠绕的改正(我理解应该是双差后就像钟差一样消掉了)。

  • 相位缠绕对PPP的影响?
    对精密单点定位来说,影响不能忽略,因其影响可能会达到分米级(也有说厘米级别误差)。

相位缠绕误差计算方法

下面这张图中所有参数的解释可以参见论文[4]。我们所需要知道基础知识:GNSS卫星为了保证地面信号强度,其Z 轴指向地心,同时为了保证卫星能够得到更多的太阳能,X 轴处于地心、太阳所在平面且朝向太阳,Y 轴垂直与X、Z 轴构成右手坐标系。理解这一点,方便我们理解卫星本体坐标系的单位矢量是如何计算出来的。

在这里插入图片描述
根据参考文献[3],相位缠绕的小数部分 ϕ \phi ϕ由下式计算:

在这里插入图片描述
式中:

  • D’D 分别为卫星和接收机天线的有效偶极矢量;
  • K 为卫星至接收机的单位矢量;
  • SXSY 分别为卫星本体坐标系中的 X 轴和Y 轴在地固系下的单位矢量;
  • RXRY 为接收天线固定坐标系的北方向和西方向的单位矢量(参考[3]中说RY 是东向,但从RTKLIB源码以及参考[6],应该是西向);
  • sign 为取符号运算符。

完整的相位缠绕改正Δϕ 是由其上个历元和本历元的小数部分共同组成。下式中,ROUND为四舍五入函数;Δϕprev 为前一个历元的相位缠绕改正值。
在这里插入图片描述

model_phw函数

  • 所在文件:ppp.c
  • 功能说明:根据模型计算天线相位缠绕误差
  • 参数说明
 args:  I   gtime_t 	time	:			GPS时
        I   int 		sat		:     		卫星
        I   const char *type	: 			antenna type(貌似没有使用)
        I   int 		opt		:          positioning options
        I   const double *rs	:         	卫星ECEF位置
        I   const double *rr	:          	接收机ECEF位置
        O   double 		*phw	:      		天线相位缠绕误差
  • 函数源码
/* phase windup model --------------------------------------------------------*/
static int model_phw(gtime_t time, int sat, const char *type, int opt,
                     const double *rs, const double *rr, double *phw)
{
    double exs[3],eys[3],ek[3],exr[3],eyr[3],eks[3],ekr[3],E[9];
    double dr[3],ds[3],drs[3],r[3],pos[3],cosp,ph;
    int i;
    
    if (opt<=0) return 1; /* no phase windup */
    
    /* satellite yaw attitude model */
    if (!sat_yaw(time,sat,type,opt,rs,exs,eys)) return 0;
    
    /* unit vector satellite to receiver */
    for (i=0;i<3;i++) r[i]=rr[i]-rs[i];
    if (!normv3(r,ek)) return 0;
    
    /* unit vectors of receiver antenna */
    ecef2pos(rr,pos);
    xyz2enu(pos,E);
    exr[0]= E[1]; exr[1]= E[4]; exr[2]= E[7]; /* x = north */
    eyr[0]=-E[0]; eyr[1]=-E[3]; eyr[2]=-E[6]; /* y = west  */
    
    /* phase windup effect */
    cross3(ek,eys,eks);
    cross3(ek,eyr,ekr);
    for (i=0;i<3;i++) {
        ds[i]=exs[i]-ek[i]*dot(ek,exs,3)-eks[i];
        dr[i]=exr[i]-ek[i]*dot(ek,exr,3)+ekr[i];
    }
    cosp=dot(ds,dr,3)/norm(ds,3)/norm(dr,3);
    if      (cosp<-1.0) cosp=-1.0;
    else if (cosp> 1.0) cosp= 1.0;
    ph=acos(cosp)/2.0/PI;
    cross3(ds,dr,drs);
    if (dot(ek,drs,3)<0.0) ph=-ph;
    
    *phw=ph+floor(*phw-ph+0.5); /* in cycle */
    return 1;
}
  • 处理过程
  1. 首先调用sat-yaw函数,根据卫星的姿态模型计算出卫星本体坐标系X,Y方向的单位矢量exs、eys,即上面公式里的SX、SY
  2. 计算卫星至接收机的单位矢量;
  3. 计算接收机天线在当地坐标系的北向、西向单位矢量;
  4. 根据公式以及前一次的相位缠绕误差计算当前时刻相位缠绕误差

参考文献

[1] [Wu et al., 1993] Wu, J., Wu, S., Hajj, G., Bertiguer, W. and Lichten, S., 1993. Effects of Antenna Orientation on GPS Carrier Phase Measurements. Manuscripta Geodaetica. 18, pp. 91-98.
[2] GPS从入门到放弃(二十三) — 相位缠绕
[3] 王嘉琛, 刘根友, 郭爱智,等. 相对定位双差模型中的天线相位缠绕误差分析[J]. 武汉大学学报:信息科学版, 2020(1):9.
[4] 范曹明, 王胜利, 欧吉坤. GPS/BDS卫星姿态异常对PPP相位缠绕的影响及其改正模型[J]. 测绘学报, 2016, 45(10):7.
[5] https://gssc.esa.int/navipedia/index.php/Carrier_Phase_Wind-up_Effect
[6] Marreiros, João Paulo Ramalho. Kinematic GNSS Precise Point Positioning: Application to Marine Platforms. Diss. Universidade do Porto (Portugal), 2012.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTKLIB 中的天线相位缠绕误差修正 的相关文章

  • CMake:C/C++和Fortran混合编译

    C C 43 43 和Fortran混合编译构建 使用CMake构建C C 43 43 和Fortran混合项目 Fortran调用C C 43 43 函数 main F90 program main use iso c binding i
  • stm32 FreeRTOS中如何创建任务

    include 34 config h 34 include 34 global h 34 include 34 stdio h 34 include 34 PC h 34 include 34 FreeRTOS h 34 include
  • 串口HAL库函数

    HAL StatusTypeDef HAL UART Transmit UART HandleTypeDef huart uint8 t pData uint16 t Size uint32 t Timeout 串口发送 xff1b 发送指
  • KEIL 那些编辑技巧与方法

    来源 xff1a 公众号 鱼鹰谈单片机 作者 xff1a 鱼鹰Osprey ID xff1a emOsprey 本篇笔记介绍一些鱼鹰常用的 KEIL 编辑方法与技巧 xff0c 用于加快编辑速度 当然了 xff0c 很多人现在更多的是使用
  • PotPlayer优化与最高画质设置(最强本地播放器)

    一 前言 软件 xff1a PotPlayer 描述 xff1a 被誉为本地视频最好用的播放器 xff01 PotPlayer下载地址参考 xff1a https potplayer org 推荐Potplayer论坛 xff1a http
  • Arduino结构体变量使用

    Arduino结构体变量使用 x1f4dd 示例程序 span class token comment 本文使用arduino nano span span class token comment 声明 B span span class

随机推荐

  • 51单片机自定义串口通讯协议控制流水灯+Proteus仿真

    51单片机自定义串口通讯协议控制流水灯 Proteus仿真 Proteus仿真演示 注意不要使用Proteus 8 Professional 8 13版本串口通信会出错 需要利用虚拟串口工具提前创建2个虚拟串口 Proteus里面AT89C
  • Arduino struct结构体定义和使用方法详解

    Arduino struct结构体定义和使用方法 1 直接使用struct定义 示例 span class token keyword struct span span class token class name People span
  • 锂电池基于DW01组成的过充电、过放、短路保护电路

    锂电池基于DW01组成的过充电 过放 短路保护电路 原理图 该电路主要由锂电池保护专用集成电路 xff24 xff37 xff10 xff11 xff0c 充 放电控制MOSFET xff08 内含两只 xff2e 沟道 xff2d xff
  • STM32F103基于标准库开发串口中断接收数据环形队列例程

    STM32F103基于标准库开发串口中断接收数据环形队列例程 本示例源码来源于野火 STM32库开发实战指南 xff0c 是一个值得学习借鉴的资源 x1f4d1 一个完整的串口数据包通讯协议一般包含 xff1a 帧头 地址信息 数据类型 数
  • 基于STM32CubeIDE HAL库利用基本定时器实现串口接收不定长数据

    基于STM32CubeIDE HAL库利用基本定时器实现串口接收不定长数据 申明 xff1a 本文章仅发表在CSDN网站 xff0c 任何其他网见此内容均为盗链和爬取 xff0c 请多多尊重和支持原创 x1f341 对于文中所提供的相关资源
  • idea重构手法

    idea重构手法 四键齐发 xff1a ctrl 43 alt 43 shift 43 T 修改方法名 xff1a shift 43 F6修改方法参数 xff1a Ctrl 43 F6提取常量 xff1a Ctrl 43 Alt 43 C提
  • Linux下实现http的Get方法

    Linux如何实现http的GET数据方法 下载curl库源码 https curl se download html Linux编译 make拷贝库文件 xff0c 目录 curl 7 83 0 lib libs 下 libcurl so
  • 一篇关于GPS定位写得最详实清晰的文章之一

    一篇关于GPS定位写得最详实清晰的文章之一 介绍篇 过去 xff0c 如果你的女友是个路痴 xff0c 大概会有这样的对话 你在哪儿呢 xff1f 啊 xff1f 我在马路上啊 有什么特征 xff1f 头顶有个月亮 你旁边有什么啊 xff1
  • 基于HAL库STM32串口驱动不定长数据接收

    STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码使用方法源码串口接口文件环形缓冲区接口文件 移植图示 使用涉及4个文件 xff0c UART Port c UART Port h CircularQueue h CircularQ
  • OptiTrack---Motive简单使用导出groundtruth

    文章目录 Motive介绍1 详细介绍 Motive使用1 详细使用2 简单使用导出groundtruth 1 首先安装Motive 2 启动Motive 3 建立body xff0c 进行录制 4 对结果进行保存 Motive介绍 1 详
  • 使用U盘安装Ubuntu20.04

    背景 今天自己鼓捣小电脑 xff0c 卖家发过来的时候已经按要求预装了Ubuntu20 04 xff0c 我想改一下卖家起的用户名 也许是计算机名 xff0c 分不太清 xff0c 结果搞的电脑输入密码却进不了桌面 xff0c 最终决定重装
  • 【ROS基础】rviz打开后如何显示实时2D地图

    1 背景 launch 了一个建图程序 xff0c 并打开了 rviz xff0c rviz 中也 add 了 map xff0c 但是 rviz 中并未出现期望的2D地图 xff0c 让人很是手足无措 2 问题解决 百度了才发现自己使用的
  • RTKlib源码解析:ppp和rtkpost中的周跳检测函数

    文章目录 前言detslp mwdetslp gfdetslp lldetslp dop 欢迎关注个人公众号 xff1a 导航员学习札记 前言 本文解析了RTKlib ppp c中两个周跳检测函数detslp mw和detslp gf xf
  • RTKlib相对定位源码解析:resamb_LAMBDA (整周模糊度求解)

    本文对resamb LAMBDA函数 xff0c 以及其中的ddmat restamb函数进行了解析 由于其中的lambda函数在参考论文中都给出了详细推导和计算步骤 xff0c 因此没有解析 lambda函数参考论文 xff1a 1 P
  • RTKlib PPP代码解析

    文章目录 ppposudstate pppudbias pppcorr measppp res 欢迎关注个人公众号 xff1a 导航员学习札记 我所基于的代码版本是RTKlib 2 4 3的一个拓展版本RTKexplore Demo5 xf
  • Android 动态修改SeekBar滑块和进度条的颜色

    方法一 1 需求 xff1a 需要改变其默认颜色 xff0c 样式 2 滑竿样式 seekbar xml lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt layer lis
  • GNSS定位(SPP、RTK、PPP)位置坐标系

    欢迎关注个人公众号 xff1a 导航员学习札记 文章目录 一 前言二 单点定位三 差分定位四 PPP 一 前言 最近研究不同FTP的基站数据 xff0c 发现它们坐标系都不一致 xff0c 因此研究了下GNSS定位结果的坐标系 参考了一些文
  • detrend去趋势函数的Matlab、Python与C实现

    文章目录 趋势分量对频域分析的影响detrend去趋势函数 xff08 Matlab Python xff09 detrend的C语言实现 趋势分量对频域分析的影响 在对信号做频域分析时 xff0c 如果有趋势项的存在 xff0c 会对分析
  • AHRS互补滤波(Mahony)算法及开源代码

    文章目录 一 前言二 算法流程三 算法步骤四 算法难点五 开源源码参考文献 欢迎关注个人公众号 xff1a 导航员学习札记 一 前言 AHRS Attitude and heading reference system xff0c 也就是航
  • RTKLIB 中的天线相位缠绕误差修正

    之前一直没有细看精密定位 xff08 PPP xff09 中的相位缠绕 xff0c 不过我觉得还是应该至少从应用层面理解PPP中每项修正 因此抱着不求甚解的心情 xff08 没有仔细去研究右旋极化信号 偶极等概念 xff09 xff0c 只