You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
mach327 236e69585c simulatenously - typo or joke? you decide 2 years ago
fixes fooling around with radios now 2 years ago
www very basic hack to web browser map working 2 years ago
.gitignore multiple places, multiple sources, faster BScope, PPI overhaul (MUCH better) 2 years ago
Dockerfile.processor gaw_rewrite merged 2 years ago
README.md simulatenously - typo or joke? you decide 2 years ago
__init__.py well, it kinda works - needs a FULL rewrite though 3 years ago
celery_test.py working with GAW, though still needs work obviously 2 years ago
clean.py clean.py added to clear queues 2 years ago
gaw.json gaw_rewrite merged 2 years ago
makefile multiple places, multiple sources, faster BScope, PPI overhaul (MUCH better) 2 years ago
places.json working w&&w/o celery, GAW 2 years ago
playground.py very basic hack to web browser map working 2 years ago
processing.py fooling around with radios now 2 years ago
radars.json multiple places, multiple sources, faster BScope, PPI overhaul (MUCH better) 2 years ago
requirements.txt very basic hack to web browser map working 2 years ago
requirements.txt_unpinned very basic hack to web browser map working 2 years ago
run . 4 years ago
settings.py playing around with waveforms again 2 years ago
simulator.py playing around with waveforms again 2 years ago
simulator_test.py fooling around with radios now 2 years ago
soapy_testing.py README added 2 years ago
tacview.py working with GAW, though still needs work obviously 2 years ago
utils.py multiple places, multiple sources, faster BScope, PPI overhaul (MUCH better) 2 years ago
viewing.py very basic hack to web browser map working 2 years ago
viewing_test.py very basic hack to web browser map working 2 years ago

README.md

DSP Playground

This started out as a way to play around with numpy and some basic concepts in digital signal processing - thinks like heterodyning and pulse compression. It quickly became a way for me to play around with more radio and radar concepts - not always accurately, mind you, but making mistakes is learning.

Now it is primarily a distributed radar simulator, and recently I've even been fooling around with this code and actual software defined radios using Soapy. There's ... not a lot to see yet, in that area.

Overview

Look at the makefile and playground.py to get a quick overview of what's available.

It starts with a list of locations (just latitude and longitude), and a list of targets (lat, lon, altitude, speed, heading...). (See playground.py and simulator.py)

Each simulated radar location then gets a list of the relevant targets at which the simulated radar antenna is pointing, calculates the timing, amplitude, doppler shift, etc of the returned pulses for each target, and sums them all up with some noise. This becomes the received data for that bearing.

The transmitted pulse is convolved or correlated with the received data, (See processing.py) and then this can be visualized in a number of different ways. (See viewing.py)

Data sources

The data source for targets to simulate can be from adsbexchange, dump1090 aircraft.json files, or DCS World style objects (Primarily for the GAW GCI servers right now), and it is easy to add new data sources. I will probably add Tacview format support shortly. Multiple data sources with multiple simulated radars can be simulated simultaneously, though you'll pay the price in processing time, naturally.

Known limitations

  • Transmitted frequency is not actually taken into effect in the radar equation.
  • Currently deals almost entirely in "real" samples rather than complex.
  • Slow, far too slow for actual signals.
  • OpenCL "pulse compression" is actually slower than numpy by an order of magnitude (which is fine, it was actually just an excuse to play with OpenCL).
  • ADSBExchange closed their public API, so the VRS target support is old.
  • ...
  • Incredibly poor testing and documentation. Sorry, this is primarily for me still, though if you're interested I'd love to chat!