2

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) で測定された 4 つの信号強度を含むベクトルです。RSS ベクトルは次のようになります。

    RSS =

    -57.6000
    -60.4000
    -44.7000
    -54.4000

そして、各アクセス ポイントまでのすべての推定距離を含む結果のベクトルは次のようになります。

   d_vect =

   7.5386
   10.4061
   1.7072
   5.2154

ここで、これらの距離とアクセス ポイントの位置に基づいて自分の位置を推定し、推定された位置と既知の位置 (9.5、1.5) の間の誤差を見つけたいと考えています。各アクセスポイントがいずれかの円の中心であり、距離が円の半径である 4 つの円の間の交差領域 (位置を推定するため) を見つけたいです。

この画像に示すように灰色の領域を見つけたい: http://www.biologycorner.com/resources/venn4.gif

4

4 に答える 4

1

質問を完全に解決する回答を見つけました。このリンクで詳しく説明されています。

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

real2: 実位置 y

于 2015-11-03T13:18:56.647 に答える
0

したがって、基本的には 4 つの円と交差する必要があります。これには多くのアプローチがあり、正確な交差領域を生成する方法は 2 つあります。

最初のアプローチは、1 つの円から開始し、それを 2 番目の円と交差させ、次に結果の領域を 3 番目の円と交差させるというものです。つまり、各ステップで現在の交差領域を把握し、それを新しい円と交差させます。交差領域は常に円弧で囲まれた領域になるため、新しい円と交差するには、領域の境界に沿って歩き、各境界円弧が新しい円と交差するかどうかを確認します。その場合、新しい円の内側にある円弧の部分だけを残します。新しい円からの円弧を続行し、次の交点が見つかるまで境界を横断し続ける必要があることに注意してください。

時間の複雑さが悪化するように見える別のアプローチですが、4 つの円の場合、これは重要ではありません。2 つの円の交点をすべて見つけて、関心のある点のみを選択することです。他のすべての円の内側にあります。これらのポイントはエリアのコーナーになり、エリアを再構築するのはかなり簡単です。少しグーグルで調べた後、このアプローチのライブデモも見つけました。

于 2015-07-28T10:28:30.883 に答える