实现了利用四个已知位置的岛礁基站(R0、R1、R2、R3)和目标到基站的时间差数据(tdoa)来确定目标位置的功能。
具体步骤如下:
首先定义四个岛礁基站的坐标位置,并进行可视化和标注。
读取第一问数据中的时间差数据(tdoa),并将其转换为目标到岛礁基站 2、3、4 的距离(dr1、dr2、dr3)。
初始化目标位置(Rm)和模糊误差(Mohu_Error)。
通过循环计算每个数据点对应的目标位置:
构建矩阵 A,用于后续计算。
计算一些中间变量(k1、k2、k3、p、q 等)。
根据不同情况(判别式的值)来确定目标位置:
当判别式为 0 时,根据特定公式计算目标位置。
当判别式大于 0 时,根据不同情况进行准确定位或模糊定位处理。
当判别式小于 0 或其他情况时,目标位置设为 NaN,表示无法定位。
对于无法定位的点,进行插值处理:
找到无法定位的点的索引。
对于无法定位的点,采用相邻点的均值进行插值。
采用保形三次样条插值进一步处理目标位置数据。
最后保存目标位置数据并绘制目标位置的二维图。
代码主要功能是根据四个岛礁基站的坐标以及目标到基站的时间差数据来确定目标的位置。首先定义了四个岛礁基站的坐标,然后读取数据并将时间差转换为目标到基站的距离。接着通过一系列的矩阵运算和条件判断来求解目标位置,并对无法定位的点进行插值处理。最后将插值后的位置数据保存并绘制目标位置的二维图形。
%% 第一问
% 初始定位四个站台分别为R0,R1,R2,R3
R0 = [ 1967515.7577, -4588670.5554, 2094235.8726];
R1 = [ 1970612.7036, -4588165.6483, 2095107.7092];
R2 = [ 1973180.2822, -4577062.0503, 2096470.2824];
R3 = [ 1960491.4285, -4583990.7575, 2097371.0443];
plot(R0(1),R0(2),'ro',R1(1),R1(2),'bo',R2(1),R2(2),'bo',R3(1),R3(2),'bo');
text(R0(1),R0(2),'岛礁基站1');
text(R1(1),R1(2),'岛礁基站2');
text(R2(1),R2(2),'岛礁基站3');
text(R3(1),R3(2),'岛礁基站4');
hold on
load djtdoa % 读取第一问数据 (tdoa时间差)直接引数据
% 把tdoa转换成目标到岛礁基站234的距离
dr1 = djtdoa(:,1) * 3E8;
dr2 = djtdoa(:,2) * 3E8;
dr3 = djtdoa(:,3) * 3E8;
% 初始化目标Rm位置
Rm = zeros(size(djtdoa,1),3);
% 初始化模糊误差
mohu_error = 5
Mohu_Error = zeros(size(djtdoa,1),