Loading [MathJax]/jax/output/CommonHTML/jax.js

User Tools


Multilateration

Previous derivations on this topic were made in years passed to enable calculations with limited numbers of hydrophone channels. This page provides a generalized algorithm for locating a pinger in 3D in a robust, linear manner with an arbitrary number of arbitrarily placed hydrophones. This solution is an unambiguous, precise result that evaluates at all distances and does not require that the signal originate in the far-field.

This method of calculation requires 5 or more hydrophones. Substituting a depth sensor for one of the required hydrophones is possible, and covered below. The submarine does not need to be held level to make use of the depth sensor.

The exact math to implement for the solution can be found by scrolling directly to the bottom of this page.

Problem Setup

Apart from a minimum number of hydrophones, there are no constraints on the set-up of the system. One hydrophone h0 is used as a reference and lies at the origin by definition. A second hydrophone h1 serves as a static reference point against the origin hydrophone. It may still be placed at an arbitrary location. All other hydrophones hn for n>1 are evaluated against these two hydrophones.

h0 is at location h0=(0,0,0)
h1 is at location h1=(x1,y1,z1)
hn is at location hn=(xn,yn,zn)

The ping source is at location ppinger=(X,Y,Z)

When a ping is received by the hydrophones, the hardware outputs differences in time-of-arrival from the origin, Δtn, which corresponds to the difference in time between when the ping was received by h0 and hn, which is a function of their pathlengths to the pinger.

Δtn=(Xxn)2+(Yyn)2+(Zzn)2X2+Y2+Z2cs

These time differences Δtn are multiplied by the speed of sound cs (~1500m/s) to find path-length differences Δrn

Δrn=Δtncs=(Xxn)2+(Yyn)2+(Zzn)2X2+Y2+Z2

With these measured values, xn,yn,zn,Δrn, for each hydrophone, we can fill in all values for the linear expression between our measurements, and theposition of the pinger (X,Y,Z).

Linear Equation

The linear equation takes the form:

Anx=CnBn[|2x12xnΔr1Δrn|,|2y12ynΔr1Δrn|,|2z12znΔr1Δrn|][XYZ]=[|(x21+y21+z21)(x2n+y2n+z2n)Δr1Δrn|][|Δr21Δr2nΔr1Δrn|]

This linear relationship is valid for all n>1. Note that the straight lines in the equations denote 2×2 determinants.

In order to get a definitive answer for the three unknown values X,Y, and Z, we need at least three of these linear relations. Hence we need at least 3 hydrophones apart from the origin hydrophone h0 and the static reference hydrophone h1. Or a total of 5 hydrophones minimum.

Ax=CB[Ax2Ay2Az2Ax3Ay3Az3Ax4Ay4Az4][XYZ]=[C2C3C4][B2B3B4][|2x12x2Δr1Δr2|,|2y12y2Δr1Δr2|,|2z12z2Δr1Δr2||2x12x3Δr1Δr3|,|2y12y3Δr1Δr3|,|2z12z3Δr1Δr3||2x12x4Δr1Δr4|,|2y12y4Δr1Δr4|,|2z12z4Δr1Δr4|][XYZ]=[|(x21+y21+z21)(x22+y22+z22)Δr1Δr2||(x21+y21+z21)(x23+y23+z23)Δr1Δr3||(x21+y21+z21)(x24+y24+z24)Δr1Δr4|][|Δr21Δr22Δr1Δr2||Δr21Δr23Δr1Δr3||Δr21Δr24Δr1Δr4|]

Which would then be resolved as X=A1(CB)[XYZ]=[Ax2Ay2Az2Ax3Ay3Az3Ax4Ay4Az4]1([C2C3C4][B2B3B4])

Rotation

In the event the submarine is rotated off of the default orientation R(ψ,ϕ,θ)=R(0,0,0) then the relative estimation of the pinger's position will be off, and a correction must be made to get the absolute coordinates ppinger=(X,Y,Z).

If the array is rotated by R then the relative position of the pinger has been rotated in the local frame by the inverse RT

RTXglobal=Xlocal=A1(CB)

Therefore:

Xglobal=RA1(CB)

Which is our desired solution. Working backwards, we can also properly write the linear system for each individual hydrophone as: AnRTXglobal=(CnBn)

Depth Sensor Substitution

Now that the evaluation of (X,Y,Z) is part of a linear system, it is easy to see how direct measurements of any of the states can substitute for hydrophone measurements.

[Ax2Ay2Az2Ax3Ay3Az3001][XYZ]=[C2C3zpinger][B2B3zsub]

Which requires only 4 hydrophones, h0,h1,h2, and h3 plus the depth sensor measuring zsub to compared against the known depth of the pinger zpinger.

However, the depth sensor will always measure the absolute depth of the submarine regardless of the submarine's orientation R(ψ,ϕ,θ). Thus the difference measured will always be zpingerzsub=Zglobal.

Thus in order to properly set up the system, we must use the formula derived in the Rotation section:

AnRTXglobal=(CnBn)

Which properly applied gives us the full equation:

[[Ax2Ay2Az2Ax3Ay3Az3][R]T[001]][XYZ]=[C2C3zpinger][B2B3zsub]

Which finally lets us calculate the full solution:

Full Solution

[XYZ]=[[Ax2Ay2Az2Ax3Ay3Az3][R]T[001]]1([C2C3zpinger][B2B3zsub])

With polar bearings:

Azimuth=arctan(YX),Inclination=arctan(ZX2+Y2),Range=X2+Y2+Z2

given: R=R(ψ,ϕ,θ),Δrn=Δtncs,hn=(xn,yn,zn)Axn=det|2x12xnΔr1Δrn|,Ayn=det|2y12ynΔr1Δrn|,Azn=det|2z12znΔr1Δrn|,Bn=det|Δr21Δr2nΔr1Δrn|,Cn=det|(x21+y21+z21)(x2n+y2n+z2n)Δr1Δrn|

Coding Implementation

The elements of the linear equations all being determinates is enumerated as such to maintain the underlying structure of the calculations. However, calculating all those determinates is cumbersome for a real implementation. Because the results are all 2×2 determinates with common 2nd rows, we can simplify the calculation significantly. As such, the following implementation may be preferable:

ARTXglobal=CBA=[|2x12x2Δr1Δr2|,|2y12y2Δr1Δr2|,|2z12z2Δr1Δr2||2x12x3Δr1Δr3|,|2y12y3Δr1Δr3|,|2z12z3Δr1Δr3||2x12x4Δr1Δr4|,|2y12y4Δr1Δr4|,|2z12z4Δr1Δr4|]=[Δr2Δr100Δr30Δr10Δr400Δr1]2[x1y1z1x2y2z2x3y3z3x4y4z4]C=[|(x21+y21+z21)(x22+y22+z22)Δr1Δr2||(x21+y21+z21)(x23+y23+z23)Δr1Δr3||(x21+y21+z21)(x24+y24+z24)Δr1Δr4|]=[Δr2Δr100Δr30Δr10Δr400Δr1][(x21+y21+z21)(x22+y22+z22)(x23+y23+z23)(x24+y24+z24)]B=[|Δr21Δr22Δr1Δr2||Δr21Δr23Δr1Δr3||Δr21Δr24Δr1Δr4|]=[Δr2Δr100Δr30Δr10Δr400Δr1][Δr21Δr22Δr23Δr24]

We've taken the 2×2 determinate operation and transformed it into a matrix product. Now all the elements more clearly become the result of the measurements and the position of the hydrophones:

[Δr2Δr100Δr30Δr10Δr400Δr1]2[x1y1z1x2y2z2x3y3z3x4y4z4][R]T[XYZ]=[Δr2Δr100Δr30Δr10Δr400Δr1]([(x21+y21+z21)(x22+y22+z22)(x23+y23+z23)(x24+y24+z24)][Δr21Δr22Δr23Δr24])rdet=[Δr2Δr100Δr30Δr10Δr400Δr1],H=[x1y1z1x2y2z2x3y3z3x4y4z4]rdet2HRTXglobal=rdet(|H|2Δr2)Xglobal=inv(rdet2HRT)rdet(|H|2Δr2)

Which is a much simpler implementation. Only rdet and Δr2 need to be re-calculated upon every measurement.

A few notes:

- rdet cannot be factored out of the equation because it is not a full-rank invertible matrix.

- The role of rotation matrix R(ψ,ϕ,θ) is much more evident here. The submarine being rotated off of alignment with the global coordinate space is equivalent to the positions of all the hydrophones H being rotated by the same amount.

- When mixing in the depth sensor in place of your fourth non-reference hydrophone h4, remove the 4th row from H and Δr2, as well as the third row and fourth column from rdet.