【WSN定位】基于chan算法实现无源定位附matlab代码

1 内容介绍

Chan 算法是 TDOA 定位方法的一个很赞的 trick。但是很多方法一旦从学术的角度去看,就罩上了奇异的光环。TDOA,the time differnces of arrival,到达时间差。Chan 算法1是非递归双曲线方程组解法,具有解析表达式解。其主要的特点为在测量误差服从理想高斯分布时,它的定位精度高、计算量小。该算法的推导的前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。

读取基站经纬度---获取每个基站测到目标信号的时间--根据速度*时间求其基站与基站到目标的距离差,得到两组方程--使用CHAN算法求解该双曲线方程组--舍弃无效解,得到目标位置,与GPS定位进行比较,使用大地主题公式求其距离误差。

2 仿真代码

% TDOA定位的Chan算法Matlab源码

clc;

clear all;

close all

weizhi=xlsread('4月21日.xlsx','实验四','B1:C3');

shijian=xlsread('4月21日.xlsx','实验四','D1:D150');

gps=xlsread('4月21日.xlsx','实验四','B4:C4');

cc = 3e8;%g光速

length=floor(length(shijian)/3);

x=zeros(1,length);

y=zeros(1,length);

x3=zeros(1,length);

y1=zeros(1,length);

[X(1,1),X(1,2)]= jingwei(weizhi(1,1),weizhi(1,2));   %网关1

[X(2,1),X(2,2)]= jingwei(weizhi(2,1),weizhi(2,2));   %网关2

[X(3,1),X(3,2)]= jingwei(weizhi(3,1),weizhi(3,2));   %网关3

% X(1,1)=weizhi(1,1);X(1,2)=weizhi(1,2);   %网关1

% X(2,1)=weizhi(2,1);X(2,2)=weizhi(2,2);   %网关1

% X(3,1)=weizhi(3,1);X(3,2)=weizhi(3,2);   %网关1

X=X';

for i=1:length

    

    for j= 1:3

        K(j)=X(1,j)^2 + X(2,j)^2;

    end

%% 方差

m=mean(diff,2);

var=sum((diff(1,:)-m).^2)/100 ;

    %% 画图

    figure(1)

    t=1:100;

    plot(t,diff,'bo-');

    xlabel('次数');

    ylabel('误差大小(m)');    axis([0 100 0 700])

    title('实验四')

  disp(['平均误差为',num2str(mean(diff,2)),'方差为',num2str(var)]);

    figure(2)

    plot( weizhi(1,1),weizhi(1,2),'rs','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','r',...

        'MarkerSize',10);hold on

    plot(weizhi(2,1),weizhi(2,2),'rs','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','m',...

        'MarkerSize',10);hold on

    plot(weizhi(3,1),weizhi(3,2),'rs','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','g',...

        'MarkerSize',10);hold on

    plot(gps(1,1),gps(1,2),'yo','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','y',...

        'MarkerSize',10);hold on

     title('实验四')

     xlabel('经度');

     ylabel('纬度');

    for i=1:length

        plot(xx(i),yy(i),'bo');hold on

    end

     axis([108.93 108.95 34.05 34.09]);

    legend('基站1','基站2','基站3','目标真实位置','TDOA定位结果');

         figure(3);

     plot( weizhi(1,1),weizhi(1,2),'rs','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','r',...

        'MarkerSize',10);hold on

    plot(weizhi(2,1),weizhi(2,2),'rs','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','m',...

        'MarkerSize',10);hold on

    plot(weizhi(3,1),weizhi(3,2),'rs','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','g',...

        'MarkerSize',10);hold on

    plot(gps(1,1),gps(1,2),'yo','LineWidth',2,...

        'MarkerEdgeColor','k',...

        'MarkerFaceColor','y',...

        'MarkerSize',10);hold on

      legend('基站1','基站2','基站3','目标真实位置');

     title('实验四')

     xlabel('经度');

     ylabel('纬度');

3 运行结果

4 参考文献

[1]沙勇. 基于Matlab的WSN定位算法仿真设计[J]. 齐齐哈尔大学学报:自然科学版, 2017, 33(6):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 6
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值