Theory says that an individual magnetic sensor pointing in
direction
and observing
a magnetic source of strength
oriented
in the direction
at a distance
will observe a magnetic field
An array of sensors, numbered
,
usually has all the directions
known and fixed.
The sensors are not all in the same location,
so their distances
to the magnetic source will not be equal. These distances
are the difference
of the sensor positions relative
to the center of the array
and the magnetic source position relative to that center
.
Thus,
We can write equation 1 for each of the
magnetic sensors. We have equations that relate
known
values of
with
known constants
and
unknown values
and
.
Providing we have
, a solution is possible.
The computation is not merely non-linear due to the
dot-products such as equation 2,
but especially due to the term
which expands to
This can be solved using an iterative descent by brute force, but this has an unpredictable execution time and is thus inappropriate for a system seeking a predictable performance.
A popular method involves separating both and
into
their unit vectors
and magnitudes
and rewriting the equations.
Assuming we place our sensors in an array pattern that
makes tracking possible, we can compute an intermediate result
called the magnetic field tensor gradient.
This result is nine linear combinations of the
values
(the actual combinations are dependent on the array pattern)
which can be
used to deduce
and
using some
nasty calculations[2].
Although nasty, the execution time can be predicted and
so this calculation is preferred for a real time system.
Once those values are known, a separate computation step
uses all the original
to compute the
and
.
This entire calculation sequence was prototyped in MATLAB to analyze recorded data files, working from Tucson AZ. The data was usually acquired by personnel in San Diego CA, since someone needed to move the desired target object past the sensor array in a predictable path. For certain kinds of testing, the object could be hung over the array as a pendulum. This could be left swinging for remote algorithm developers to collect additional data whenever they needed it.
Once the algorithm was demonstrably tracking objects, it was translated directly into C and installed on a Linux computer. After verifying that it generated the same tracking results as the MATLAB version, lab staff could stream data from any of the hardware systems to the algorithm development computer over the network (and/or VPN). The track results were delivered to a nearby computer with a 3D graphics and perspective capable display for inspection.
Now that the algorithm is stabilized and reliable, it may be installed locally on all computers that are easily fast enough to perform the floating point math. In general, therefore, Pentium-class and above have the tracking algorithm, while 386 and 486 do not.