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.