rtlsdrjs

Turn your Realtek RTL2832U based device into an SDR receiver using JavaScript

Usage no npm install needed!

<script type="module">
  import rtlsdrjs from 'https://cdn.skypack.dev/rtlsdrjs';
</script>

README

📡 rtlsdr.js

Turn your Realtek RTL2832U based device into an SDR (Software Defined Radio) receiver using JavaScript.

Supports Node.js and WebUSB compatible browsers.

Requirements

Hardware

  • Realtek RTL2832U based USB adapter with R820T tuner chip

Software

Setup

Node.js

Install: npm i rtlsdrjs

Require: const RtlSdr = require('rtlsdrjs');

Browser

Download a rtlsdr.js build from a release.

Include rtlsdr.js in you HTML page: <script src="path/of/rtlsdr.js"></script>

Usage

let readSamples = true;

async function start() {
  //
  // request a device
  // - displays prompt in browser
  // - selects first device in Node.js
  //
  // RtlSdr.getDevices() can be used to get a list of all RTL SDR's attached to system
  //
  const sdr = await RtlSdr.requestDevice();

  //
  // open the device
  //
  // supported options are:
  // - ppm: frequency correction factor, in parts per million (defaults to 0)
  // - gain: optional gain in dB, auto gain is used if not specified
  //
  await sdr.open({
    ppm: 0.5
  });

  //
  // set sample rate and center frequency in Hz
  // - returns the actual values set
  //
  const actualSampleRate = await sdr.setSampleRate(2000000);
  const actualCenterFrequency = await sdr.setCenterFrequency(1090000000);

  //
  // reset the buffer
  //
  await sdr.resetBuffer();

  while (readSamples) {
    //
    // read some samples
    // - returns an ArrayBuffer with the specified number of samples,
    //   data is interleaved in IQ format
    //
    const samples = await sdr.readSamples(16 * 16384);

    //
    // process the samples ...
    //
  }
}

Acknowledgements

This library is based on Jacobo Tarrío's (@jtarrio) work in Google's Radio Receiver Chrome app, which used work from the RTL-SDR project. The Chrome USB API layer has been replaced with node-usb on Node.js and WebUSB when running in the browser.

License

Apache 2.0