根据信号强度查找位置(圆圈之间的交叉区域)

我试图根据从4个Wi-Fi接入点收到的信号强度来估计一个位置。 我测量位于100平方米(10x10)的方形房间每个角落的4个接入点的信号强度。 我使用Android手机将已知位置(x,y)=(9.5,1.5)的信号强度记录下来。 现在我想检查在这种情况下多边测量方法的准确性。 使用MATLAB,我应用了一个公式来计算使用信号强度的距离。 以下MATLAB函数显示了公式的应用:

    function [ d_vect ] = distance( RSS )
    % Calculate distance from signal strength
    result = (27.55 - (20 * log10(2400)) + abs(RSS)) / 20;

    d_vect = power(10, result);

    end

输入RSS是在测试点(x,y)=(9.5,1.5)中测量的四个信号强度的矢量。 RSS矢量如下所示:

    RSS =

    -57.6000
    -60.4000
    -44.7000
    -54.4000

并且具有到每个接入点的所有估计距离的合成矢量如下所示:

   d_vect =

   7.5386
   10.4061
   1.7072
   5.2154

现在我想根据这些距离和接入点位置估计我的位置,以便找到估计位置和已知位置(9.5,1.5)之间的误差。 我想找到四个圆圈之间的交叉区域(为了估计位置),其中每个接入点是其中一个圆的中心,距离是圆的半径。

我想要查找此图像中显示的灰色区域:http://www.biologycorner.com/resources/venn4.gif


如果您想要估算位置的另一种方式,而不估计圆的交点,则可以使用三边测量。 在给定一组距离测量值的情况下,在导航(例如GPS)中估计位置是常用的技术。

另外,如果你想要这个区域,因为你还需要对位置的不确定性进行估计,我建议用最小二乘法来解决三边测量问题,这样可以很容易地给出所涉及参数的估计值和误差传播以产生位置。


所以基本上你需要相交4圈。 可以有很多方法,并且有两个方法可以生成确切的交叉区域。

第一种方法是从一个圆开始,与第二个圆相交,然后用第三个圆相交所得区域,依此类推。 也就是说,在每一步你知道当前的交集区域,并且你将它与新的圆相交。 相交区域将始终是由圆弧限定的区域,因此要与沿着该区域边界行走的新圆相交,并检查每个边界圆弧是否与新圆相交。 如果是这样,那么只留下位于新圆圈内的圆弧部分,请记住,您应该继续使用新圆形的圆弧,并继续遍历边界,直到找到下一个交点。

另一种似乎导致时间复杂性更差的方法,但对于4个圈子来说,这并不重要,因为找到两个圈子的所有交点并仅选择那些对您感兴趣的点,也就是位于所有其他圈子里面。 这些点将是您所在地区的角落,然后重建该地区相当容易。 谷歌搜索了一下之后,我甚至发现了这种方法的现场演示。


我发现了一个完美解决问题的解决方案。 它在这个链接中有详细的解释:

https://gis.stackexchange.com/questions/40660/trilateration-algorithm-for-n-amount-of-points

我也为这个问题开发了一些MATLAB代码。 这里是:

估算距离接入点的距离:

function [ d_vect ] = distance( RSS )
    result = (27.55 - (20 * log10(2400)) + abs(RSS)) / 20;
    d_vect = power(10, result);
end

三角测量功能:

function [] = trilat( X, d, real1, real2 )
cla
circles(X(1), X(5), d(1), 'edgecolor', [0 0 0],'facecolor', 'none','linewidth',4); %AP1 - black
circles(X(2), X(6), d(2), 'edgecolor', [0 1 0],'facecolor', 'none','linewidth',4); %AP2 - green
circles(X(3), X(7), d(3), 'edgecolor', [0 1 1],'facecolor', 'none','linewidth',4); %AP3 - cyan 
circles(X(4), X(8), d(4), 'edgecolor', [1 1 0],'facecolor', 'none','linewidth',4); %AP4 - yellow
axis([0 10 0 10])
hold on
tbl = table(X, d);
d = d.^2;
weights = d.^(-1);
weights = transpose(weights);
beta0 = [5, 5];
modelfun = @(b,X)(abs(b(1)-X(:,1)).^2+abs(b(2)-X(:,2)).^2).^(1/2);
mdl = fitnlm(tbl,modelfun,beta0, 'Weights', weights);
b = mdl.Coefficients{1:2,{'Estimate'}}
scatter(b(1), b(2), 70, [0 0 1], 'filled')
scatter(real1, real2, 70, [1 0 0], 'filled')
hold off

结束

哪里,

X:具有AP坐标的矩阵

d:距离估计向量

real1:真实位置x

真实2:真实位置y

链接地址: http://www.djcxy.com/p/84917.html

上一篇: Find Position based on signal strength (intersection area between circles)

下一篇: Best method to determin distance with WI