Chapter.12 GNSS定位算法——模糊度固定LAMBDA算法

作者:齐花Guyc(CAUC)


文章目录

  • Chapter.12 GNSS定位算法——模糊度固定LAMBDA算法
    • 一.整周模糊度理论
      • 1.LAMBDA算法干了一件什么事情?
      • 2.LAMBDA算法步骤
        • (1)去相关(Z变换)
        • (2)寻找整数解(整数估计)
        • (3)验证结果(比率验证)

一.整周模糊度理论

整周模糊度是全球导航卫星系统高精度定位中的核心概念,指的是载波相位观测值中未知的整周周期数。GNSS载波相位测量以波长为单位,但由于初始相位未知,观测值包含一个整数倍的波长和一个小数相位。准确解算整周模糊度并将其固定为整数是实现厘米级定位精度的关键。
在LAMBDA算法中,整周模糊度的解算基于双差载波相位数据,通过最小二乘方法和整数约束来求解。

1.LAMBDA算法干了一件什么事情?

高精度定位需要用到GNSS的载波相位数据,但这些数据里有个未知数——整周模糊度。这个模糊度是载波信号的整周周期数,类似于信号跑了几圈才到你这里,但它一开始是未知的。
LAMBDA算法就像一个“解谜大师”,专门用来破解这个模糊度,让它从一个模糊的“小数”(浮点解)变成一个确定的“整数”(整数解)。一旦模糊度被正确固定,定位精度就能从几米提升到厘米级。

2.LAMBDA算法步骤

LAMBDA算法主要分三个步骤:

  1. 去相关
  2. 寻找整数解
  3. 验证结果
(1)去相关(Z变换)

GNSS的模糊度数据(浮点解)就像一堆缠在一起的毛线,彼此高度相关,很难直接处理。Z变换把这些毛线解开,变成一堆独立的线(去相关后的模糊度)。这就像把一个复杂的迷宫变成规则的方格,搜索起来更省力。

setp1:获取原始数据
假设浮点解为 [1.23,4.56,−2.78]T[1.23, 4.56, -2.78]^T[1.23,4.56,2.78]T,协方差矩阵为
Qa^a^=[1.00.80.30.81.50.40.30.41.2]Q_{\hat{a}\hat{a}} = \begin{bmatrix} 1.0 & 0.8 & 0.3 \\ 0.8 & 1.5 & 0.4 \\ 0.3 & 0.4 & 1.2 \end{bmatrix}Qa^a^=1.00.80.30.81.50.40.30.41.2
此时手上拿到一堆缠在一起的毛线和一张说明书,说明每根毛线有多粗(误差大小)和怎么缠在一起(相关性)。

setp2:分析误差表格
为了造出Z矩阵,先要通过 LTDLL^T D LLTDL 分解把误差表格拆开,弄清楚模糊度之间的缠法。
Qa^a^=LTDLQ_{\hat{a}\hat{a}} = L^T D LQa^a^=LTDL
比如分解后为:

D=[0.50000.70000.6],L=[100l2110l31l321]D = \begin{bmatrix} 0.5 & 0 & 0 \\ 0 & 0.7 & 0 \\ 0 & 0 & 0.6 \end{bmatrix}, \quad L = \begin{bmatrix} 1 & 0 & 0 \\ l_{21} & 1 & 0 \\ l_{31} & l_{32} & 1 \end{bmatrix}D=0.50000.70000.6,L=1l21l3101l32001
此时相当于把毛线团拆开,记录下每根线的长度(D)和怎么交叉缠绕(L),为打造整理机(Z矩阵)做准备。

setp3:构造Z矩阵
使用整数高斯变换构造Z矩阵,通过一系列整数运算,逐步构造Z矩阵,目标是让 Qz^z^Q_{\hat{z}\hat{z}}Qz^z^ 的非对角元素尽量小。
Z变换把高相关的模糊度变成低相关的,搜索空间从细长椭圆变成接近圆形。

在这里插入图片描述


整数高斯变换步骤

  1. 初始化Z矩阵
    一开始,Z矩阵设为单位矩阵。Z=[100010001]Z = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}Z=100010001
  2. 逐对降低相关性
    检查矩阵Qa^a^Q_{\hat{a}\hat{a}}Qa^a^的非对角元素,找到相关性最大的元素(Qa^a^(1,2)=0.8Q_{\hat{a}\hat{a}}(1,2) = 0.8Qa^a^(1,2)=0.8)。用整数高斯变换调整Z矩阵,减少这对模糊度的相关性。方法是构造一个整数变换矩阵,比如:
    T=[1−k0010001]T = \begin{bmatrix} 1 & -k & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}T=100k10001
    其中 kkk 是整数(可以通过四舍五入 Qa^a^(1,2)/Qa^a^(2,2)Q_{\hat{a}\hat{a}}(1,2)/Q_{\hat{a}\hat{a}}(2,2)Qa^a^(1,2)/Qa^a^(2,2) 得到)。
    更新Z矩阵:Z=Z⋅TZ = Z \cdot TZ=ZT,同时更新逆矩阵:Z−1=T−1⋅Z−1Z^{-1} = T^{-1} \cdot Z^{-1}Z1=T1Z1
  3. 迭代优化
    重复检查非对角元素,找下一个相关性最大的元素,继续重复步骤2。
    每次调整后,计算新的协方差矩阵。
    Qz^z^=Z−1Qa^a^Z−TQ_{\hat{z}\hat{z}} = Z^{-1} Q_{\hat{a}\hat{a}} Z^{-T}Qz^z^=Z1Qa^a^ZT
    直到非对角元素足够小(接近对角矩阵)为止。

setp4:变换数据
用Z矩阵变换模糊度和协方差矩阵
用Z矩阵的逆把原始模糊度变成新模糊度:z^=Z−1a^\hat{z} = Z^{-1} \hat{a}z^=Z1a^
用Z矩阵把原始协方差变成新协方差:Qz^z^=Z−1Qa^a^Z−TQ_{\hat{z}\hat{z}} = Z^{-1} Q_{\hat{a}\hat{a}} Z^{-T}Qz^z^=Z1Qa^a^ZT
Qz^z^=[0.50.10.050.10.70.030.050.030.6]Q_{\hat{z}\hat{z}} = \begin{bmatrix} 0.5 & 0.1 & 0.05 \\ 0.1 & 0.7 & 0.03 \\ 0.05 & 0.03 & 0.6 \end{bmatrix}Qz^z^=0.50.10.050.10.70.030.050.030.6
非对角元素的值变小,说明相关性降低。

(2)寻找整数解(整数估计)

在变换后的模糊度中,寻找最优整数解,用Z反变换回到原始模糊度的整数解。

整数估计的方法有三种:

  1. 四舍五入
  2. 整数自举法
  3. 整数最小二乘(ILS)

四舍五入
没考虑模糊度间的关系,成功率低;随便猜,简单但容易错。

整数自举法
从最精确的模糊度开始取整,根据相关性调整其他模糊度,再取整;考虑部分相关性,成功率比四舍五入高。跟着线索一步步找,比瞎猜好,但可能不是最佳位置。

整数最小二乘(ILS)
寻找让误差最小的整数解,数学上:
a^=arg⁡min⁡a∈Zn(a^−a)TQa^a^−1(a^−a)\hat{a} = \arg \min_{a \in \mathbb{Z}^n} (\hat{a} - a)^T Q_{\hat{a}\hat{a}}^{-1} (\hat{a} - a)a^=argaZnmin(a^a)TQa^a^1(a^a)
a^\hat{a}a^ 是原始模糊度(浮点解);aaa 是可能的整数解;Qa^a^Q_{\hat{a}\hat{a}}Qa^a^ 是协方差矩阵,记录模糊度的可靠性和相关性。(a^−a)TQa^a^−1(a^−a)(\hat{a} - a)^T Q_{\hat{a}\hat{a}}^{-1} (\hat{a} - a)(a^a)TQa^a^1(a^a):衡量整数解离浮点解有多远,考虑了数据的可靠性和相关性。

步骤:

  1. 定义搜索空间
    在去相关空间中,找到误差最小的整数解,目标函数是:
    F(z)=(z^−z)TQz^z^−1(z^−z)≤χ2F(z) = (\hat{z} - z)^T Q_{\hat{z}\hat{z}}^{-1} (\hat{z} - z) \leq \chi^2F(z)=(z^z)TQz^z^1(z^z)χ2
    定义了一个超椭球(搜索空间),包含所有足够接近 z^\hat{z}z^ 的整数点 zzzχ2\chi^2χ2 是阈值,控制椭球大小。
  2. 搜索整数解
    在超椭球内,找到让 F(z)F(z)F(z) 最小的整数解(最优解),并记录次优解。
    有两种搜索方式:枚举搜索和收缩搜索
    枚举搜索检查椭球内所有整数点,计算每个点的 F(z)F(z)F(z),找出最小和次小值。全面不会漏解,但耗时长。
    收缩搜索动态缩小椭球,优先检查最可能的整数点。
    初始化搜索空间后,分解Qz^z^Q_{\hat{z}\hat{z}}Qz^z^,用Cholesky分解将其分解为Qz^z^=LLTQ_{\hat{z}\hat{z}} = L L^TQz^z^=LLT,令y=L−1(z^−z)y = L^{-1} (\hat{z} - z)y=L1(z^z),则变换目标函数为F(z)=(z^−z)TQz^z^−1(z^−z)=yTy=∑i=1nyi2F(z) = (\hat{z} - z)^T Q_{\hat{z}\hat{z}}^{-1} (\hat{z} - z) = y^T y = \sum_{i=1}^n y_i^2F(z)=(z^z)TQz^z^1(z^z)=yTy=i=1nyi2
    椭球变成:∑i=1nyi2≤χ2\sum_{i=1}^n y_i^2 \leq \chi^2i=1nyi2χ2 更简单的球形约束。
    假设前 i−1i-1i1 个整数 z1,z2,…,zi−1z_1, z_2, \dots, z_{i-1}z1,z2,,zi1 已确定,计算第 iii 个整数 ziz_izi 的条件范围:
    zi∈[⌊z^i∣i−1−χ2−∑j=1i−1yj2lii⌉,⌈z^i∣i−1+χ2−∑j=1i−1yj2lii⌉]z_i \in \left[ \left\lfloor \hat{z}_{i|i-1} - \frac{\sqrt{\chi^2 - \sum_{j=1}^{i-1} y_j^2}}{l_{ii}} \right\rceil, \left\lceil \hat{z}_{i|i-1} + \frac{\sqrt{\chi^2 - \sum_{j=1}^{i-1} y_j^2}}{l_{ii}} \right\rceil \right]ziz^ii1liiχ2j=1i1yj2,z^ii1+liiχ2j=1i1yj2
    z^i∣i−1\hat{z}_{i|i-1}z^ii1:基于前 i−1i-1i1 个整数的条件估计;liil_{ii}liiLLL 的对角元素。
    从初始椭球开始,逐维度搜索整数点,找到更小误差的解,更新 χ2\chi^2χ2,缩小椭球。

复习一下卡方分布χ2\chi^2χ2的概念:
想象在玩投飞镖游戏,每次投的飞镖偏离靶心的距离是一个正态分布(随机但围绕中心)。如果你投了很多次,把每次偏离距离的平方加起来,这个总和的表现规律就是卡方分布。告诉你,误差平方的总和大概会落在什么范围内。
如果有 kkk 个独立的标准正态分布变量(均值为0,方差为1),记为 Z1,Z2,…,ZkZ_1, Z_2, \dots, Z_kZ1,Z2,,Zk,那么它们的平方和:
X=Z12+Z22+⋯+Zk2X = Z_1^2 + Z_2^2 + \dots + Z_k^2X=Z12+Z22++Zk2
服从卡方分布,自由度为 kkk,记为 X∼χ2(k)X \sim \chi^2(k)Xχ2(k),自由度 kkk 表示有多少个独立变量,决定了卡方分布的形状。

在这里插入图片描述
在此参考:张镇虎的博客

在这里插入图片描述
自由度 kkk:表示独立正态变量的个数;显著性水平 α\alphaα:表示误差平方和超过 χ2\chi^2χ2 的概率,置信水平 1−α1-\alpha1α 表示包含在 χ2\chi^2χ2 内的概率。
例子:自由度 k=3k = 3k=3,置信水平95%(α=0.05\alpha = 0.05α=0.05),查表得 χ2=7.815\chi^2 = 7.815χ2=7.815,表示95%的概率误差平方和小于7.815。


(3)验证结果(比率验证)

用比率检验来检查ILS找到的整数模糊度解是否可靠,确保最佳整数解是正确的,避免选错导致定位误差。ILS会输出一个最优解和一个次优解,比率检验通过比较这两者的误差大小,判断最佳解是否明显优于其他解,从而决定是否接受。

比较这两个整数解离浮点解有多远。如果最优解明显比次优解近很多,就放心取;如果两者差不多近,就需要保持怀疑,可能选择保留浮点解。
比率=F(a^)F(a^′)≤μ\text{比率} = \frac{F(\hat{a})}{F(\hat{a}')} \leq \mu比率=F(a^)F(a^)μ
F(a^)=(a^−a^)TQa^a^−1(a^−a^)F(\hat{a}) = (\hat{a} - \hat{a})^T Q_{\hat{a}\hat{a}}^{-1} (\hat{a} - \hat{a})F(a^)=(a^a^)TQa^a^1(a^a^): 最优解的加权平方误差;F(a^′)=(a^−a^′)TQa^a^−1(a^−a^′)F(\hat{a}') = (\hat{a} - \hat{a}')^T Q_{\hat{a}\hat{a}}^{-1} (\hat{a} - \hat{a}')F(a^)=(a^a^)TQa^a^1(a^a^): 次优解的加权平方误差。
Qa^a^Q_{\hat{a}\hat{a}}Qa^a^: 原始模糊度的协方差矩阵;
μ\muμ: 阈值,决定接受最佳解的严格程度,μ\muμ的取值可以根据设置可接受的失败率 PfP_fPf,比如0.001(0.1%)计算,也可以固定阈值(经验值)。
如果比率 ≤μ\leq \muμ,接受最佳解 a^\hat{a}a^; 否则拒绝,保留浮点解 a^\hat{a}a^

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计java在线二手系统的设计与实现 基于Java的在线二手交易平台开发 Java技术驱动的二手物品管理系统

计算机毕业设计java在线二手系统的设计与实现z2n189(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展,二手交易市场也逐渐从传统的线下模式转…

如何进行项目复盘?核心要点分析

进行项目复盘需要明确复盘目标、确定复盘参与人员、选择合适的复盘方法、梳理项目过程与关键节点、分析成功与失败的原因、总结经验教训并制定改进计划。其中,选择合适的复盘方法尤其关键,常见的复盘方法包括鱼骨图分析法、SWOT分析法、PDCA循环法&#…

LeetCode 923.多重三数之和

给定一个整数数组 arr &#xff0c;以及一个整数 target 作为目标值&#xff0c;返回满足 i < j < k 且 arr[i] arr[j] arr[k] target 的元组 i, j, k 的数量。 由于结果会非常大&#xff0c;请返回 109 7 的模。 示例 1&#xff1a; 输入&#xff1a;arr [1,1,2,2,…

.Net日志系统Logging-五

日志概念 日志级别 NET (Microsoft.Extensions.Logging) 中定义的 6 个标准日志级别&#xff0c;按严重性从低到高排列&#xff1a; 日志级别数值描述典型使用场景Trace0最详细的信息&#xff0c;包含敏感数据&#xff08;如请求体、密码哈希等&#xff09;。仅在开发或深度故…

中国贸促会融媒体中心出海活动负责人、出海星球创始人莅临绿算技术

近日&#xff0c;中国贸促会融媒体中心出海活动负责人、出海星球创始人王思诺一行莅临广东省绿算技术有限公司&#xff0c;深入考察其核心技术产品与全球化布局。双方围绕绿算技术全栈产品体系、创新出海模式及生态共建展开深度对话。绿算技术作为国内智算基础设施领域的领军企…

【算法专题训练】06、数组双指针

1、数组 数组是由相同类型的元素组成的数据集合&#xff0c;并且占据一块连续的内存&#xff0c;按照顺序存储数据。 1.1、数组的特性&#xff1a; 数组元素通过下标获取数据数组对象初始化时&#xff0c;需要先指定数组容量大小&#xff0c;并根据容量大小分配内存。缺点&…

操作系统-lecture2(操作系统结构)

回顾下lecture1 swap区域不可以马上执行&#xff0c;即虚拟内存的数据和指令不可以被执行&#xff0c;得交换回到内存区域 操作系统的服务 主要提供两种服务 面向普通用户&#xff1a;user interface面向程序员&#xff1a;应用级程序代码 为用户 为用户提供了操作包括但不…

内网服务器实现从公网穿透

从6月份tplink的ddns失效之后&#xff0c;对于部分在内网运行的服务器&#xff0c;从公网访问就收到了部分影响。有好几个朋友找来&#xff0c;寻求帮助&#xff0c;看看怎么恢复原来的机制&#xff0c;可以从公网互联网访问内网服务器。方案一&#xff1a;如果有动态公网的客户…

vcs-编译+仿真+dump波形【IMP】

VCS仿真分为两步式(编译/compilation仿真/simulation)和三步式(分析/analysis细化/elaborationsimulation/仿真);注2:analysis/分析是三步式flow中仿真design的第一步&#xff0c;在此阶段将使用vhdlan或vlogan分析VHDL、Verilog、SystemVerilog和OpenVera文件。下面的部分包括…

程序代码篇---python向http界面发送数据

在 Python 中向 HTTP 界面发送数据&#xff0c;本质上是模拟用户在网页上填写表单、点击提交按钮的过程。这在自动化测试、数据上报、接口调用等场景中非常常用。下面用通俗易懂的方式介绍具体方法、实例代码和解析。核心原理网页上的数据发送&#xff08;比如提交表单&#xf…

mybatis-plus由mysql改成达梦数据库

前置条件: 达梦数据库设置了大小写敏感,我比较菜,改不动!先这么凑合着用吧; 因为设置了大小写敏感,所以所有的sql语句都要加 引号; 这样是会报错的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config这样才可以 SELECT "create_…

设计模式:外观模式 Facade

目录前言问题解决方案结构代码前言 外观是一种结构型设计模式&#xff0c;能为程序库、框架或其他复杂类提供一个简单的接口。 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…

【数据结构初阶】--二叉树(四)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

三、平面度检测-差值法

方法一: dev_get_window (WindowHandle) *读取3通道彩色融合图 read_image (Image, ./XYZ彩色融合图.tiff) *拆分3个通道 decompose3 (Image, x, y, z) *将3个通道图像转换为3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *显示动态3D模型 threshold (z, Regions,…

什么是数据编排?数据编排的流程、优势、挑战及工具有哪些?

目录 一、数据编排的定义与概念 1.数据编排的基本含义 2.数据编排与相关概念的区别 3.数据编排的重要性 二、数据编排的流程 1.需求分析&#xff1a; 2.数据源识别与连接&#xff1a; 3.数据抽取&#xff1a; 4.数据转换&#xff1a; 5.数据加载&#xff1a; 6.监控…

【C++算法】82.BFS解决FloodFill算法_被围绕的区域

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 130. 被围绕的区域 题目描述&#xff1a; 解法 BFS一层层剥开。 C 算法代码&#xff1a; class Solution {// 定义四个方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商汤发布具身智能平台,让机器人像人一样和现实世界交互

7月27日&#xff0c;在“大爱无疆模塑未来”WAIC 2025大模型论坛上&#xff0c;商汤科技重磅发布「悟能」具身智能平台。「悟能」具身智能平台以商汤具身世界模型为核心引擎&#xff0c;依托商汤大装置提供端侧和云侧算力支持&#xff0c;能够为机器人、智能设备提供强大的感知…

MCP工作原理

在谈MCP原理前&#xff0c;我们先谈谈MCP的技术前身—Function Calling。1.Function Calling技术在FunctionCalling技术出现之前&#xff0c;大语言模型虽然拥有强大的知识储备和语言理解能力&#xff0c;但是只能提供自身数据库已有的信息&#xff0c;无法和外界进行信息交互。…

VSCode手动版本更新

技术背景 使用VSCode的的过程中&#xff0c;如果打开了自动更新功能&#xff0c;每隔一段时间就会有更新提示。为了保持版本的稳定性&#xff0c;我们可以在设置中将Update: Mode设置为none&#xff0c;这样就不会触发自动更新。但有时又有版本更新的需求&#xff0c;可能是版本…

医疗超声成像专用AFE模拟前端

医疗超声成像作为一种广泛应用于临床诊断的重要技术&#xff0c;对于提供清晰、准确的医学图像起着关键作用。在超声成像系统中&#xff0c;AFE模拟前端扮演着至关重要的角色。它负责对超声换能器接收到的微弱电信号进行处理和转换&#xff0c;为后续的数字信号处理提供高质量的…