# Seismometer Positioning System

Or maybe Seismic Local Positioning System? Or Seismic Triangulating Positioning System?

Using a system of seismometers (or perhaps accelerometers pressed into service as seismometers) that are networked together, it should be possible, with accurate clocks, to analyze input over, say, a 1-second rolling time window for frequency and amplitude to determine the source (epicenter) of the vibration. The time-window and frequency matching helps ensure the observed vibrations are from the same source. The venerable Fourier Transform will be used to determine frequencies and amplitudes.

Amplitude and timing are used to determine distance. Timing is the primary factor for determining distanceâ€“assume speed of sound traveling through soft wood (see table below). Amplitude can be used as a sanity check (e.g. the sensor with the greatest amplitude should be closest).

Ultimately, the system will need to be calibrated. The goal is to track foot steps, which should not vary in frequency too much and also follow common pathways to sensorsâ€“once the sensors are calibrated.

## Speed of Sound in Various Materials

 Medium Velocity (m/s) (ft/s) Aluminum, shear - longitudinal wave 3100 - 6400 10200 - 21060 Beryllium 12890 42530 Brass 3475 11400 Brick 4176 13700 Concrete 3200 - 3600 10500 - 11800 Copper 4600 15180 Cork 366 - 518 1200 - 1700 Diamond 12000 39400 Glass 3962 13000 Glass, Pyrex 5640 18500 Gold 3240 10630 Granite 5950 19635 Hardwood 3962 13000 Iron 5130 16830 Lead 1960 - 2160 6430 - 7087 Lucite 2680 8790 Rubber, butyl 1830 6039 Rubber 40 - 150 130 - 492 Silver 3650 12045 Steel 6100 20000 Steel, stainless 5790 19107 Titanium 6070 20031 Wood (hard) 3960 13000 Wood 3300 - 3600 10820 - 11810

## Back of Envelope Math

My house is an L-shape, about 50ft by 50ft with a quadrant missing. Assume speed of sound in soft wood to be 3400 m/s (see above table).

If 3 sensors were placed at each corner of the house, the farthest distance a sensor ever could be would be about 70ft or 21 meters. It would take about 6ms for sound to reach from one sensor to the next farthest.

Thus, sub milisecond time resolution is required. The multiplicative inverse gives a rough idea of necessary sampling frequency (regards to Nyquist). 167hz. Given the ready availability of of 1000+ Mhz processors, capable of sampling at or around clock speed (E.G. a Raspberry Pi), fast enough sampling and processing to get satisfactory accuracy should not be a problem.

## Desirable Output

Once calculations have been made, the data should be presented via some graphical interface (web based, or a TK canvas) that overlays the calculated vibration epicenters on a map of the house.

The net effect should be a graphical, real-time or near-real-time tracking of foot steps.

## Communication Protocol

The higher level bits will be written in Tcl, thus Tcl structures (strings, lists) will be used within the protocol. The combination of seismometer and MCU/Control board will be referred to as a node. There will be 3 (or more) nodes. Each node upon detection of a vibrations above a certain amplitude within a certain frequency range (to be empirically determined) will be transmitted to a central server via TCP. The data transmitted will be a line-delineated (and line-buffered) tcl list consisting of, in order, a time-stamp in microseconds, a list of 2-element lists each consisting of a frequency and corresponding amplitude.

E.G. If node1 sensed at 1455909894376591 microseconds epoch time a 60hz signal at 0.2 amplitude and a 45hz signal at 0.6 amplitude, it would send

`  1455909894376591 {60 0.2} {45 0.6}\n`

Plan B:

The above method may be too slow. the devices may need to stream raw vibration data directly to the central server via UDP. IP communication induces its own lag, but the devices could perhaps be calibrated to take this into account.

Plan C:

Plan B may also be too slow. Perhaps a hybrid solution? A small C-program continually takes measurements and continually pushes microsecond timestamped data samples to a central server that handles all processing.

E.G. Node 1 would, as fast as possible push out binary data in the form of

`  <long unsigned int ts><double sample>`

Where `long unsigned int ts` is the epoch timestamp in microseconds and `double sample` is the raw data coming off the ADC.

It would then be up to the server to buffer the data from each node into a signal and perform a Fourier Transform to determine frequency and amplitude.