mode-s-demodulator
v1.0.1
Published
A JavaScript module for demodulating and decoding Mode S / ADS-B messages from aviation aircrafts
Downloads
33
Maintainers
Readme
mode-s-demodulator
A JavaScript module for demodulating and decoding Mode S / ADS-B messages from aviation aircrafts.
Mode S is an aviation transponder interrogation mode used by Secondary Surveillance Radar (SSR) and Automatic Dependent Surveillance-Broadcast (ADS-B) systems.
For an example of this module in use, see AirplaneJS.
Installation
npm install mode-s-demodulator --save
Usage
const Demodulator = require('mode-s-demodulator')
const demodulator = new Demodulator()
// data contains raw IQ samples from an RTL-SDR device
demodulator.process(data, data.length, function (message) {
// got new Mode S message from an airplane
console.log(message)
})
Tip: Use together with the rtl-sdr module to get raw IQ samples that can be processed by this module.
API
Demodulator.UNIT_FEET
A constant indicating that the unit used to encode message.altitude
is
feet. Check against message.unit
.
message
is an object given as the first argument to the
demodulator.process
or demodulator.detectMessage
callback.
Demodulator.UNIT_METERS
A constant indicating that the unit used to encode message.altitude
is
meters. Check against message.unit
.
message
is an object given as the first argument to the
demodulator.process
or demodulator.detectMessage
callback.
demodulator = new Demodulator([options])
Initialize a new demodulator object.
Arguments:
options
- An optional options object
The available options are:
fixErrors
- Set tofalse
to disable automatic error correction (default:true
)aggressive
- Set totrue
to use an aggressive error correction algorithm (default:false
)checkCrc
- Set tofalse
to disable checksum validation (default:true
)crcOnly
- Set totrue
to only validate the checksum of the Mode S messages without trying to decode them any further than necessary in order to validate the checksum (default:false
)mag
- An optional pre-initialized magnitude Uint16Array used by theprocess
function. If not provided it's expected thatprocess
will always be called with the same amount of data
demodulator.process(data, size, onMsg)
A convenience function that takes care of everything related to
processing the provided data
.
It handles initializing a magnitute array (if not provided to the
Demodulator
constructor) and calling computeMagnitudeVector
and
detectMessage
respectively.
Arguments:
data
- A buffer object containing raw IQ samplessize
- The size of thedata
bufferonMsg
- Called for each new message detected indata
. Will be called with the message as the only argument.
demodulator.computeMagnitudeVector(data, mag, size[, signedInt])
Calculate the magnitude of each sample in the signal.
Arguments:
data
- A buffer object containing raw IQ samplesmag
- AnUint16Array
to which the magnitude of each sample will be written. Since each IQ sample indata
consists of two bytes, the array should be at least half the size of thedata
buffersize
- The size of thedata
buffersignedInt
- Optional boolean indicating if the IQ samples are encoded as signed integers (default:false
)
demodulator.detectMessage(mag, size, onMsg)
Detect Mode S messages in the magnitute array.
Arguments:
mag
- Themag
array computed usingcomputeMagnitudeVector()
size
- The size of themag
arrayonMsg
- Called for each new message detected inmag
. Will be called with the message as the only argument.
Acknowledgement
This project is a JavaScript port of the popular dump1090 project by Salvatore Sanfilippo. It modularizes the code into separate functions and removes all non-essentials, so that only the demodulation and decoding logic is left.
License
MIT