Positionsbestimmung mit Sender und mehreren Empfängern



  • Ich möchte mit drei Empfängern den Standort einer Schallquelle bestimmen.

    Die Empfänger r1, r2 und r3 sind dazu in einer Ebene angeordnet, z.B. bei (0;0), (100;0) und (0;100).

    Die Uhr des Senders s ist nicht mit den Uhren der Empfänger synchronisiert, diese untereinander aber schon. Es werden die drei Zeiten gemessen, zu denen das Signal beim jeweiligen Empfänger ankommt.

    Die Entfernungen zwischen den Empfängern und dem Sender sind
    a := d(s, r1)
    b := d(s, r2)
    c := d(s, r3)

    Beispiel für gemessene Zeiten:
    t1 = 1.354165s
    t2 = 1.271163s
    t3 = 1.237125s

    Daraus kann man die Differenzen bilden:
    dt12 = -0.0830015s
    dt23 = -0.0340378s
    dt31 = 0.1170393s

    Und daraus mit der Schallgeschwindigkeit c=340m/s die Entfernungsdifferenzen:
    dd12 = -28.2205m
    dd23 = -11.5729m
    dd31 = 39.7934m

    Es ergibt sich das Gleichungssystem:
    a + dd12 = b
    b + dd23 = c
    c + dd31 = a

    Oder umgeformt:

    | 1 -1  0 |   |a|   |-dd12|
    | 0  1 -1 | * |b| = |-dd23|
    |-1  0  1 |   |c|   |-dd31|
    

    Leider hat die Matrix nicht vollen Rang und lässt sich nicht invertieren, daher können a, b und c so nicht berechnet werden. Aus denen wollte ich aber abschließend die Koordinaten x und y des Senders berechnen. Was muss ich da anders machen?



  • Du kannst dir aus der Lauzeit- bzw. Entfernungsdifferenz zwischen jeweils zwei Empfängern eine Hyperbel berechnen, auf der der Sender liegen könnte. Anschließend mußt du nur noch den Schnittpunkt dieser Hyperbeln bestimmen.
    (ja, das lässt sich nicht mehr mit einem linearen Gleichungssystem berechnen)



  • Danke für die Antwort. Ich habe mal Funktionen für die Empfänger r1 und r2 aufgestellt.

    Es gilt:
    a + dd12 = b
    a^2 = x^2 + y^2
    b^2 = (100 - x)^2 + y^2

    Also mit d:=dd12 und m:=100:
    sqrt(x^2 + y^2) + d = sqrt((m-x)^2 + y^2)

    Das habe ich nach y auflösen lassen:
    y11 = +sqrt(d4-2*d2*m2+4*d2*m*x-4*d2*x2+m4-4*m3*x+4*m2*x2)/(2*d)
    y12 = -sqrt(d4-2*d2*m2+4*d2*m*x-4*d2*x2+m4-4*m3*x+4*m2*x2)/(2*d)

    Für Sender 1 und 3:
    c + dd31 = a
    a^2 = x^2 + y^2
    c^2 = x^2 + (100 - y)^2

    Also mit g:=dd31 und n:=100:
    sqrt(x^2 + (n-x)^2) + g = sqrt(x^2 + y^2)

    Aufgelöst:
    y21 = +sqrt(g2+2*g*sqrt(n2-2*n*x+2*x2)+n2-2*nx+x^2)
    y22 = -sqrt(g2+2*g*sqrt(n2-2*n*x+2*x2)+n2-2*n
    x+x^2)

    Gleichsetzen liefert folgendes Bild:
    www.phynet.de/private/snOOfy/position.png

    Außer dem im Beispiel gesuchten Schnittpunkt (80;90) gibt es noch drei weitere, die Lösung ist also nicht eindeutig. Muss ich einen vierten Empfänger benutzen, damit das eindeutig wird? Und wie kann ich die Gleichungen (z.B. in einem C++ Programm) am geschicktesten gleichsetzen?



  • Du kannst mit dem Vorzeichen der Differenz einschränken, auf welchem Ast der jeweiligen Hyperbel du dich bewegen mußt - dadurch kannst du die übrigen Schnittpunkte ausschließen.



  • Ah gute Idee! Und das Gleichsetzen mache ich dann, indem ich die Funktionen voneinander abziehe und die Nullstelle der Differenz mit dem Newton-Verfahren suche.


Anmelden zum Antworten