Matlab之提高交叉定位点的定位精度

通过测向交叉定位的方法,按理只需2根测向线即可得出定位点的位置。但由于误差的存在,求出的定位点位置存在一定的偏差。为了得到更加精确的定位点位置,需要对定位点进行冗余测量,从而得到多个定位点,然后通过定位点估计算法得到更加接近真实定位点的位置。

一、基于DBSCAN密度聚类滤除异常定位点

输入参数:

TargetPoint:测量定位点的集合,单位km;

epsilon:ε邻域的半径,单位km;

minPts:最小点数,用于判为同一类的最少点数量;

输出参数:

idx:TargetPoint数组中,属于同一类的索引标志。值为1说明是同一类。

TargetPoint_Cluster:筛选后属于同一类的定位点集合。

%% 对定位点进行聚类,DBSCAN密度聚类
% 定义参数
epsilon = 15;   % ε邻域的半径,单位与定位点的坐标单位相同
minPts = 20;      % 最小点数,判为同一类的最小点数量% 进行DBSCAN聚类
idx= DBSCAN(TargetPoint,epsilon,minPts);%TargetPoint为需要进行聚类筛选的所有定位点位置坐标,idx为同一类标志
TargetPoint_Cluster=TargetPoint((idx~=0),:);%筛选聚类后的结果% 可视化聚类结果
figure(6)
plot(TargetPoint_Cluster(:,2),TargetPoint_Cluster(:,1),'ro');
title('DBSCAN 聚类结果');
xlabel('横坐标/km');
ylabel('纵坐标/km');

1.1 DBSCAN密度聚类算法Matlab程序

输入参数:

X:测量定位点的集合,单位km;

epsilon:ε邻域的半径,单位km;

minPts:最小点数,用于判为同一类的最少点数量;

输出参数:

idx:X数组中,属于同一类的索引标志。值为1说明是同一类。

isnoise:X数组中,属于噪声点的索引标志。值为1说明是噪声类。


function [IDX, isnoise]=DBSCAN(X,epsilon,MinPts)    % DBSCAN聚类函数C=0;                       % 统计簇类个数,初始化为0n=size(X,1);               % 把矩阵X的行数数赋值给n,即一共有n个点IDX=zeros(n,1);            % 定义一个n行1列的矩阵D=pdist2(X,X);             % 计算(X,X)的行的距离visited=false(n,1);        % 创建一维的标记数组,全部初始化为false,代表还未被访问isnoise=false(n,1);        % 创建一维的异常点数组,全部初始化为false,代表该点不是异常点for i=1:n                  % 遍历1~n个所有的点if ~visited(i)         % 未被访问,则执行下列代码visited(i)=true;   % 标记为true,已经访问Neighbors=RegionQuery(i);     % 查询周围点中距离小于等于epsilon的个数if numel(Neighbors)<MinPts    % 如果小于MinPts% X(i,:) is NOISE        isnoise(i)=true;          % 该点是异常点else              % 如果大于MinPts,且距离大于epsilonC=C+1;        % 该点又是新的簇类中心点,簇类个数+1ExpandCluster(i,Neighbors,C);    % 如果是新的簇类中心,执行下面的函数endendend                    % 循环完n个点,跳出循环function ExpandCluster(i,Neighbors,C)    % 判断该点周围的点是否直接密度可达IDX(i)=C;                            % 将第i个C簇类记录到IDX(i)中k = 1;                             while true                           % 一直循环j = Neighbors(k);                % 找到距离小于epsilon的第一个直接密度可达点if ~visited(j)                   % 如果没有被访问visited(j)=true;             % 标记为已访问Neighbors2=RegionQuery(j);   % 查询周围点中距离小于epsilon的个数if numel(Neighbors2)>=MinPts % 如果周围点的个数大于等于Minpts,代表该点直接密度可达Neighbors=[Neighbors Neighbors2];   %#ok  % 将该点包含着同一个簇类当中endend                              % 退出循环if IDX(j)==0                     % 如果还没形成任何簇类IDX(j)=C;                    % 将第j个簇类记录到IDX(j)中end                              % 退出循坏k = k + 1;                       % k+1,继续遍历下一个直接密度可达的点if k > numel(Neighbors)          % 如果已经遍历完所有直接密度可达的点,则退出循环break;endendend                                      % 退出循环function Neighbors=RegionQuery(i)        % 该函数用来查询周围点中距离小于等于epsilon的个数Neighbors=find(D(i,:)<=epsilon);endend

1.2 效果展示

二、最小二乘法求定位点估计值

2.1 算法原理

第一步:由测向原理出发,化简为矩阵形式

测向线从测量节点指向目标定位点,如图所示,则由直角坐标系下直线的倾斜角定义可得:

                                                         

将其化简为AX=B的矩阵形式,如下:

其中,A、X和B矩阵如下所示:

第二步:引入误差项并用最小二乘法求解

由于测向存在误差,因此代入各测量节点坐标和测向值时,上式不能成立。由此引入误差矩阵E(矩阵维度:与矩阵B相同),则上面的矩阵表达式更正为:

最小二乘法原理:认为该误差的平方和最小时的定位点,为最佳的定位点估计。

该误差的平方和为误差矩阵E的二范数的平方,则

为求得误差平方和的最小值,对其求导数,导数为0时的X即为最佳的定位点估计。

则导数为0时的X为:

 

矩阵求导的部分运算法则如下: 

  

矩阵转置运算法则如下: 

2.2 最小二乘法Matlab代码

输入参数:

AOA:测向线对应的地理正北方位,单位度;

R:测量节点的坐标,单位自定;

输出参数:

LocFinalPoint:估计的定位点位置坐标,单位与R保持一致。

%% 最小二乘法求最终定位点
for i=1:size(AOA,2)A(i,:)=[-tand(Azimuth2ElevationAngle(AOA(i))),1];%倾斜角B(i)=R(i,2)-tand(Azimuth2ElevationAngle(AOA(i)))*R(i,1);
endLocFinalPoint=inv(A'*A)*(A'*B');%最小二乘计算结果

2.3 效果展示

真实坐标点位置:(100,300)

三、利用一元3次方程拟合时间-角度曲线

输入参数:

AOA:测向线对应的地理正北方位,单位度;

输出参数:

yfit:一元3次方程拟合后,对应的地理正北方位,单位度;

%% 三次方程拟合时间-角度曲线后,利用最小二乘法求最终定位点
% 使用polyfit进行线性拟合,1是线性拟合的参数
p = polyfit(1:60,Azimuth2ElevationAngle(AOA), 3);% 使用polyval计算拟合值
yfit = polyval(p, 1:60);

3.1 效果展示

从下图看出,拟合后的时间-角度曲线更加靠近真实定位点对应的时间-角度曲线,使用拟合后的时间-角度曲线,利用最小二乘法估计的定位点坐标更加接近真实定位点。

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

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

相关文章

GRE和MGRE综合实验

实验拓扑图 实验思路 根据图中所属网段&#xff0c;配置ip地址和网关R1,R2,R3,R4配置缺省路由&#xff0c;可以是公网互通使用ppp验证&#xff0c;R1与R5为PAP验证&#xff0c;R5:aaa地址池&#xff0c;创建用户名以及密码&#xff0c;同时进行pap服务认证&#xff0c;同时在…

使用nvm管理nodejs版本

文章目录 1、下载NVM2、选择NVM安装3 、查询版本号&常用命令4、nvm命令安装指定版本node4.1 安装指定node4.2 查看是否安装成功4.3 切换node版本到你想要的版本4.4 再次查看nvm版本列表4.5 nvm其他常用命令 这个是每个全能前端经常会用到的&#xff0c;之前用过现在重装了&…

BitVM2:比特币上的无需许可验证

1. 引言 前序博客有&#xff1a; 基于BitVM的乐观 BTC bridgeBitVM&#xff1a;Bitcoin的链下合约Bitcoin Bridge&#xff1a;治愈还是诅咒&#xff1f; 最初的 BitVM 设计仅限于两方设置。BitVM2结合了并行和冗余实例&#xff0c;以引入基于 1-of-n 诚实假设的多方配置。这…

Android 自定义EditText

文章目录 Android 自定义EditText概述源码可清空内容的EditText可显示密码的EditText 使用源码下载 Android 自定义EditText 概述 定义一款可清空内容的 ClearEditText 和可显示密码的 PasswordEditText&#xff0c;支持修改提示图标和大小、背景图片等。 源码 基类&#xf…

WebViz可视化

WebViz可视化 Webviz是一个基于Web的可视化工具&#xff0c;意味着您可以通过浏览器/APP访问它&#xff0c;而不需要安装额外的软件。这对于远程访问和团队协作非常方便。 Foxglove是一个开源的工具包&#xff0c;包括线上和线下版。旨在简化机器人系统的开发和调试。它提供了…

Gitea 的详细介绍

什么是 Gitea&#xff1f; Gitea 是一个开源、轻量级的自托管 Git 服务&#xff0c;它允许用户搭建类似于 GitHub 或 GitLab 的代码托管平台。由于采用 Go 语言开发&#xff0c;Gitea 具有高效的性能和跨平台特性&#xff0c;适合个人开发者或小团队使用。 Gitea 的特点 轻量…

蓝桥杯第十三届电子类单片机组程序设计

目录 前言 单片机资源数据包_2023 一、第十三届比赛省赛 1.比赛题目 2.赛题解读 二、部分功能实现 1.继电器的开启与关闭 2.长按切换显示状态功能的实现 3.对于温度传感器小数部分的处理 4.其他处理 1&#xff09;关于数码管显示小数的处理 2&#xff09;关于5s后继…

结构体类型,结构体变量的创建和初始化 以及结构中存在的内存对齐

一般结构体类型的声明 struct 结构体类型名 { member-list; //成员表列 }variable-list; //变量表列 例如描述⼀个学⽣&#xff1a; struct Stu { char name[20]; //名字 int age; //年龄 char sex[5]; //性别 }&#xff1b; //结构体变量的初始化 int main() { S…

牛客NC30 缺失的第一个正整数【simple map Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成&#xff1f; 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件&#xff08;Design Files&#xff09; 4.5. 新建测试平台文件&#xff08;Testbench Files&…

企业数据被新型.rmallox勒索病毒加密,应该如何还原?

.rmallox勒索病毒为什么难以解密&#xff1f; .rmallox勒索病毒难以解密的主要原因在于其采用了高强度的加密算法&#xff0c;并且这些算法被有效地实施在了病毒程序中。具体来说&#xff0c;.rmallox勒索病毒使用了RSA和AES这两种非常成熟的加密算法。RSA是一种非对称加密算法…

3D汽车模型线上三维互动展示提供视觉盛宴

VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代&#xff0c;它不仅颠覆了传统展览的局限&#xff0c;还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理&#xff0c;这一在线展…

瑞吉外卖实战学习--6、通过try和catch进行异常处理

try和catch进行异常处理 效果图前言1、公共拦截器进行异常处理1.1、创建公共报错处理的方法1.2、@ControllerAdvice中设置要拦截的类1.3、@ExceptionHandler中写处理的异常类2、完善错误拦截器2.1、效果效果图 前言 当用户名重复数据库会报错,此时就需要捕获异常操作 1、公共…

Spring: 在SpringBoot项目中解决前端跨域问题

这里写目录标题 一、什么是跨域问题二、浏览器的同源策略三、SpringBoot项目中解决跨域问题的5种方式&#xff1a;使用CORS1、自定 web filter 实现跨域(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、 CorsFilter(全局跨域)4、使用CrossOrigin注解 (局部跨域) 一、什么是跨域…

社交网络的未来:Facebook如何塑造数字社交的下一章

引言 社交网络已成为我们生活中不可或缺的一部分&#xff0c;而Facebook作为其领军者&#xff0c;一直在塑造着数字社交的未来。本文将深入探讨Facebook在未来如何塑造数字社交的下一章&#xff0c;并对社交网络的发展趋势进行展望和分析。 1. 引领虚拟社交的潮流 Facebook将…

小白从0学习ctf(web安全)

文章目录 前言一、baby lfi&#xff08;bugku-CTF&#xff09;1、简介2、解题思路1、解题前置知识点2、漏洞利用 二、baby lfi 2&#xff08;bugku-CTF&#xff09;1.解题思路1、漏洞利用 三、lfi&#xff08;bugku CTF&#xff09;1、解题思路1、漏洞利用 总结 前言 此文章是…

Java复习第十二天学习笔记(JDBC),附有道云笔记链接

【有道云笔记】十二 3.28 JDBC https://note.youdao.com/s/HsgmqRMw 一、JDBC简介 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet&#xff0c;每个数据库厂商实现了这套接口&#xff0c;例如MySql公司实现了&#xff1a;MySql驱动…

手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210&#xff0c;将在线训练的模型部署在K210&#xff08;代码后面给出&#xff09;上&#xff0c;能够识别卡皮巴拉水杯&#xff08;没错&#xff0c;卡皮巴拉&#xff0c;情绪稳定&#xff0c;真的可爱&#xff01;&#xff09;。数据集是用K210拍…

linux下minio部署和nginx配置

1 下载minio wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio #启动minio&#xff0c;文件数据存放在/data目录 ./minio server /data2 部署minio 下载minio后赋予可执行权限就可以运行了&#xff0c;这里我整理了遇到的坑和解决问题的最终配置…

算法打卡day21(开始回溯)

今日任务&#xff1a; 1&#xff09;77.组合 77.组合 题目链接&#xff1a;77. 组合 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;带你学透回溯算法-组合问题&#xff08;对应力扣题目&#xff1a;77…