在各种伪距定位算法中,最小二乘法是一种比较简单而广泛的方法,该算法可以分为以下几步:

1、准备数据与设置初始值

这里准备数据,主要是对于各颗可见卫星,收集到它们在同一时刻的伪距测量值,计算测量值的各项偏差、误差成分的校正量,然后计算出误差校正后的伪距测量值,这里假设伪距为理想距离加上随机高斯误差。设置初始值,假设大概知道位置坐标,则设定其为初始值,也可根据上一次定位结果设定;若什么都不了解,那么初值设置为0,只不过多几次迭代过程罢了。

2、非线性方程组线性化(不详细解释,就是得到雅克比矩阵)。

3、求解线性方程组,此处运用最小二乘法。

4、更新非线性方程组的根

5、判断牛顿迭代的收敛性,用定位结果的二范数是否小于定位精度为判定标准。

贴出伪距定位算法的MATLAB代码:

1、主函数dingwei_main.m

 %伪距定位算法(多星)
%2014.7.23
%距离单位为km
%----------------------------begin-----------------------------------------
clear;clc;
c=299792.458; %光速 %通过星历参数解算到所在地可见卫星的坐标位置
sat13=[-7134.529244 16113.648836 23709.205570];
sat22=[-22383.700040 18533.233168 5307.245613];
sat23=[-5384.901317 28971.622323 2079.796362];
sat14=[637.466571 28016.053841 9347.297933];
sat12=[-11568.199533 -3328.511543 26977.312423];
sat21=[-28908.916747 -577.061760 6051.375658];
sat5=[-1205.651181 28296.890128 -8397.025036];
sat4=[16456.527324 12347.282494 21199.173063]; sat=[sat13;sat22;sat23; sat14; sat12; sat21; sat5; sat4];%多卫星位置矩阵
%所在地实际大地坐标,用来与定位结果作比较
nanjing=[-2604.298533 4743.297217 3364.978513];
%理想伪距测量值
r0 = zeros(8,1);
for i = 1:8
r0(i,1)=norm(sat(i,:)-nanjing);
end
%加入零均值,方差为80的随机高斯分布,模拟含有误差的伪距r
r = r0 + sqrt(80)*randn(size(r0))*1e-3;
%--------------------------------------------------------------------------
%Newton迭代法
%设定迭代初值,若无法估计则全部假设为0
xyzt=[0 0 0 0]; for i = 1:100 % 最大迭代次数设为100次
f = dingwei_fun(xyzt,sat,r);
df = dingwei_dfun(xyzt,sat); %左除,具有良好的数值稳定性,在MATLAB中此已经为最小二乘意义下的解
%delta(xyzt)=G^(-1)*b
delta=-df\f;
xyzt(1)=xyzt(1)+delta(1);
xyzt(2)=xyzt(2)+delta(2);
xyzt(3)=xyzt(3)+delta(3);
xyzt(4)=xyzt(4)+delta(4); p=norm(delta); %定位精度
if (p<1e-10)
break;
end
end disp('迭代次数为')
i
disp('用户位置为')
xyzt(1:3)
disp('用户钟差为')
xyzt(4)
%--------------------------------end---------------------------------------

2、非线性方程组dingwei_fun.m

 function f=dingwei_fun(xyzt,sat,r)
%多卫星定位方程函数
%xyzt(1:3)为用户位置(km)
%xyzt(4)为用户钟差(s)
%r为测量得到的伪距(km)
%sat为卫星数据
c=299792.458; %光速 [m,n]=size(sat);
for i=1:m
f(i)=norm(sat(i,:)-xyzt(1:3))+c*xyzt(4)-r(i);
end
f=f';

3、方程组偏导数矩阵

 %多颗卫星定位的偏导数矩阵
function df=dingwei_dfun(xyzt,sat)
%xyzt为用户位置及钟差
%sat为卫星数据
c=299792.458; %光速 [m,n]=size(sat);
xyz=xyzt(1:3);
for i=1:m
for j=1:3
df(i,j)=(xyz(j)-sat(i,j))/norm(sat(i,:)-xyz(j));
end
end
df(:,4)=c; %线性函数ct,对t求偏导为c

伪距定位算法(matlab版)的更多相关文章

  1. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part6,辑录该书第281至第374页之代码,供有须要读者下载研究使用.代码运行结果请參见原书配图,建议下载代码前阅读下 ...

  2. 关于APIT定位算法的讨论

    关于APIT定位算法的讨论 [摘要]   无线传感器网络节点定位机制的研究中,基于距离无关的定位技术得到快速发展,其中基于重叠区域的APIT定位技术在实际环境中的定位精度高,被广泛研究和应用. [关键 ...

  3. KMP算法-Python版

                               KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...

  4. 数字图像处理原理与实践(MATLAB版)勘误表

    本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简单介绍]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像切割.图像去噪 ...

  5. Trilateration三边测量定位算法

    转载自Jiaxing / 2014年2月22日 基本原理 Trilateration(三边测量)是一种常用的定位算法: 已知三点位置 (x1, y1), (x2, y2), (x3, y3) 已知未知 ...

  6. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...

  7. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part1

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part1(P1~42).代码运行结果请參见原书配图. P20 I = imread('lena.jpg');BW1 = ...

  8. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part5

    <数字图像处理原理与实践(MATLAB版)>一书之代码Part5 本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part5.辑录该书第225至第280页之代 ...

  9. [CLPR] 定位算法探幽 - 边缘和形态学

    一. 引言 如何从一副图片中找到车牌? 这是机器视觉的一个应用. 理所当然地, 思考的角度是从车牌本身的信息入手, 为了讨论方便, 下面均以长窄型蓝白车牌为例. 下图就是这样一张车牌的基本信息. 一眼 ...

随机推荐

  1. RxJS 中的观察者和迭代器模式

    目录 前言 观察者模式 迭代器模式 RxJS 中两种模式的结合和实现 小结 参考 1. 前言 RxJS 是一个库,它通过使用observable(可观察对象)序列来编写异步和基于事件的程序.其结合了观 ...

  2. 有关vue中v-if和v-show的区别

    其实这两个都是属于根据条件判断元素是否可见,但是还有有区别的哦! v-show:就是无论什么时候它其实都一直存在页面上也就是会渲染在DOM上,只是你写了条件让它可见或不可见而已,因为它本质是把它的cs ...

  3. JavaScript按位运算符~

    1. JavaScript按位运算符 Bit operators work on 32 bits numbers. 2. JavaScript按位运算符~ 值得注意的是,在JavaScript中,~5 ...

  4. 【av68676164(p38-p40)】进程调度

    6.1 进程调度概念 进程调度 在合适的时候以一定策略选择一个就绪进程运行 进程调度的目标 响应速度尽可能快 进程处理的时间尽可能短 系统吞吐量尽可能大 资源利用率尽可能高 对所有进程要公平 避免饥饿 ...

  5. 使用Spock 单元测试

    一.什么是Spock Spock 是一个测试框架,甚至可以说是一门语言他是基于Groovy开发的.它的语法完全遵循 BDD(行为驱动开发) 风格的结构.它是基于 Junit test runner 上 ...

  6. 检查型异常和非检查型异常——Java

    文章目录 检查型异常和非检查型异常--Java 检查型异常 非检查型异常 结语 检查型异常和非检查型异常--Java Java语言规范将派生于Error类或RuntimeExceprion类的所有异常 ...

  7. (数据科学学习手札93)利用geopandas与PostGIS进行交互

    本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 PostGIS作为postgresql针对 ...

  8. CTFhub-WEB前置-http协议闯关

    前情提要: 在渗透学习过程中,web的基础知识很重要,在这里通过long long ago之前学习的http基础,并结合网上的CTFhub--WEB前置之http协议闯关,对web基础知识进行加固并查 ...

  9. 蒲公英 · JELLY技术周刊 Vol.17: 90 行代码实现 React Hooks

    蒲公英 · JELLY技术周刊 Vol.17 React Hooks 相信大家都不陌生,自被设计出以来就备受好评,在很多场景中都有极高的使用率,其中原理更是很多大厂面试中的必考题,很多朋友都能够如数家 ...

  10. 《Head First 设计模式》:适配器模式

    正文 一.定义 适配器模式将一个类的接口(被适配者),转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 要点: 适配器实现了目标接口,并持有被适配者的实例. 适配器使用被适配者的方 ...