SDR distributed direction finding

From CECS wiki
Jump to navigation Jump to search

This is one of the options for the remote SDR project.

The plan is to synchronize multiple widely spaced SDR/pi combos through a central server to implement direction finding through several methods. Internet connectivity helps, but hamnet or local wifi may also work.

Target implementation language: julia

Direction finding methods[edit]

  • (phase 1) range circles determined by signal strength and antenna height (simplest method)
  • (phase 2) DF by time difference of arrival [1]
  • other DF methods [2]

Implementation tasks[edit]

(1,2,3 indicates implementation phase, to help prioritization)

  • 1 julia / rtl-sdr API code (may be expanded)
  • 1 UI to inject commands (any or all of gui, cli, web)
  • 1 Pi/sdr/antenna network
  • 1 Network protocol
  • 1 Pi client software
  • 1 Server software: dispatcher
  • 1 DF by proximity and coverage circles
  • 1c Aprs xmitter
  • 1c Map software
  • 1d,2d Portable server w/WiFi
  • 2 Fcc db filtered (Postgres)
  • 2a Server software: frequency search and manager
  • 2b broadcast beacon scan / strength detect
  • 2b Server software: df by TDOA (xlate and rewrite matlab demo code to julia partly done)
  • 3 Software: voice recognition and call extraction
  • 3 Software: tx id fingerprinting

Network protocol features[edit]

Implementation philosophy:

  • initial registration via http / https : exchange stats, negotiate ports
  • retain connection via tcp (if firewall allows) or udp (with keep alive)
  • if tcp connection is available, all communication except live capture is done via tcp
  • new tcp conn from old client starts with id, time, hash(id+time)
  • all udp packets after first start with ID+time+hash(cookie+id+time+data) (packet id is time)
  • captured samples are sent via tcp or http post (except over RF?)
  • all udp packets (except ack and live sample) require ack (if hash is ok) ack=id+(acktime)+hash
  • report stats during capture?
  • upload samples via http (requires prior registration to prevent DoS)
  • Server listens on tcp/udp
  • Http bridge to local server; commodity http server relays data to synchronizing server around firewall
    • use http to set up intial udp connection
    • use udp for low latency direct connect
    • use http for large posts of data (<10G?) when using udp
    • use non-http tcp (with keepalive) when possible for constant connection

Network protocol commands and data payloads:

  • STAT/HELLO exchange: ID, (cookie), system stats, proto versions, location
  • SETLOC set location to (gps) (server->client after calibration sample)
  • SETTIME set time? / request time (against calibration sample?)
  • CAP1 schedule single capture: sample ID, frequency, time, duration, trigger (immediate, time, signal strength; tx fingerprint, voice fingerprint, voice command), mode (I/Q, FMn, FMw, ??), target port
  • CAP2 schedule dual capture: sample ID, freq1 freq2 time duration2(?) trigger
  • CAPCAL calibration capture: sample ID, list of freqs to capture; fixed sample length for each
  • LIVECAP live capture (freq, mode, duration, target port) ; repeated commands with same values extends duration, any other sample command cancels live capture, no ack expected for samples
  • POSTCAP post capture sample: sample ID, length (via tcp/http only)
  • BQUERY Query beacon db (client/server exchange), filter criteria (location, distance? height?), returns info about beacons from FCC database and/or local data

Phase 3[edit]

Security concerns[edit]

  • Unauthorized clients could attempt to inject bad data
  • Authorized clients could inject corrupt data
  • Unauthorized clients could attempt buffer overruns
  • Unauthorized clients could attempt to impersonate authorized clients
  • Unauthorized clients could attempt to extract sensitive data

Results[edit]

  • first attempt at data collection [4]
    • images, poor sensitivity, SNR works for broadcast anyway

Other external links and applications[edit]