It is a range estimation problem, as shown in the figure.
The blue circles are the anchor node' positions, which are produced by one moving anchor (the moving direction is shown with black arrow). The brown circle is the unknown user.
I set the interval of each virtual anchor node is 0.2m, the distance from the unkown user to the trajactery is about 3.0m. I obtain the distance differences between any two adjacent anchor nodes, for example, using TDOA metric. There are three cases in the figure, which mean different anchor start points corresponding to user.
Generally, we can calculate the distances from any anchor postion to the user based on distance differences, such as the least square (LS) method. But since the distance difference between two adjacent anchors is small, using the LS method will cause great errors in practical measurement (noise, measurement errors, etc involved).
An intuitive method is choosing two groups of anchor positions with large distance differences to calculate the distance, then obtain all distance estimations based on the other distance differences. But for three cases above, there seems no unified standard.
So, is there any standard/method to solve this problem? or somebady can provide some guides/tips?
Clarify the question: I have the distance differences $\Delta d_{(i+1,i)}=d[i+1]-d[i]$ to the user of adjacent virtual antennas (where $d[i]$ is the distance from $i$-th antenna position to the user), and want to estimate the distances from antennas to user $d[i], i=1,2,...,N$, where $N$ is the number of antenna positions.
To clarify the question further, I would like to say how I solved this problem before, and also a figure is showed the parameters involved.
As I mentioned above, I know the distance difference $\Delta d_{(i+1,i)}=d[i+1]-d[i]$, and the moving distance (I set 0.2m here). To solve this problem, I set the distance from the user to the antenna is $y$, namely $|UO|=y$, and the distance from point $O$ to the antenna psotion $A_i$ is $x$, namely $|OA_i|=x$. So we can obtain the distance $d_i$, that is $$d_i=\sqrt{x^2+y^2},$$ then we can also obtain $$d_{i+1}=\sqrt{(x+0.2)^2+y^2}.$$ Now we have the distance difference $\Delta d_{(i+1,i)}$. So we can solve this problem with one more formula (one more position). It is what I said Hyperbolic Positioning. Then if we have $N$ positions, so we can construct $N-1$ fomulas. So I used the least square to combine these fomulas and overestimate the result, namely $x, y$. It is easy to understand my method, so I do not input all the details here.
Note that: In my case, the distance of any two adjacent antenna positions is small compared with $y$ (the distance from user to antenna trajactory).
One specific example:
I set $|A_iA_{i+1}|=0.2$m, $y=3$m, $x=0.1$m, then you see $d_i=\sqrt{3^2+0.1^2}$ and $d_{i+1}=\sqrt{3^2+0.3^2}$, so the distance difference $\Delta d_{(i+1,i)}$ will be very small. Once the measurement errors, noise, or other error source involved, if we use two adjacent differeces to calculate the distance, just like I used hypobolic+LS above, the results are not good enough.
The intuitive idea is choosing two positions with large distance differences to do the job, since the difference will suffer little from errors relatively.
Using Cedron's method, I did the preliminary work as follow. Some differenct setting: the antenna's moving step is 0.1m, the distance from the user to trajactery is about 1m. Here the distance differences are given as $y_{1\times 20}$:
y=[-0.043423795 -0.039331481 -0.035474273 -0.025309761 -0.019823501 -0.017748271 -0.010301581 -0.004165145 0.002257333 0.009348566 0.008298607 0.022343171 0.035716244 0.043296065 0.039169621 0.042370574 0.041379915 0.045609152 0.079869062 0.064377786].
Matlab code to fit function $f(n)$ is given here:
%% data fitting
clear;clc;
load('y.mat'); % replace with the provided data above **NOTE: it's a column here**
t=[1:1:numel(y)]';
plot(0.1*t-0.1,y,'ro') % 0.1 is the moving step in meter
%% fitting
F=@(x,xdata)(sqrt((xdata*0.1-x(1)).^2+x(2))-sqrt(((xdata-1)*0.1-x(1)).^2+x(2)));
x0=[1 1];
[x,~,~,~,~] = lsqcurvefit(F,x0,t,y);
title('F(n)-Fitting')
hold on
plot(0.1*t-0.1,F(x,t)); % 0.1 is the moving step in meter
xlabel('X [m]');
ylabel('Distance difference [m]');
%% find zero-crossing
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Zero-Crossing Indices
t_find=[1:1e-6:numel(y)];
fitFunc=sqrt((t_find*0.1-x(1)).^2+x(2))-sqrt(((t_find-1)*0.1-x(1)).^2+x(2));
zx = zci(fitFunc);
plot(0.1*t_find(zx(1))-0.1, fitFunc(zx(1)), 'kp');
legend('Distance difference','F(n)-fitting curve','Zero-crossing');
hold off
The first fitting result (without toss the outlier) is shown in the figure below.
As expected, the user's coordinate $x$ is accurate while $y$ is far from the truth (the definition of user's position $(x,y)$ is given in Cedron's method below). One tip: we dont't need to calculate the slope of $f(n)$, since we can obtian it with $y=\sqrt{x(2)}$, where $x(2)$ is the second fitting parameter in my matlab codes, also $x(2)=(y_{ant}-y_{user})^2$. Indeed, I also obtained similar results using LS, namely, the estimation of $y$ is not good, also the distance estimation. I do believe which results from no relative motion along Y-scale.
So the question turns a reasonable outlier detection method and improving the fitting effect, if the zero-crossing method is adopted. It may be not easy...
I'd like to share my results as above. So this question is still open...