Skip to content

Latest commit

 

History

History
112 lines (91 loc) · 4.95 KB

README.md

File metadata and controls

112 lines (91 loc) · 4.95 KB

PopoSDR

Warning

This code is still experimental and was only tested on very specific conditions.

C/C++ Based SDR library with multithreaded pipelined DSP blocks

Available Blocks:

Sources:
  • Network Source (UDP or TCP | Server or Client) ✅
Sinks:
  • Terminal Sink (F32 or CF32) ✅
Filters:
  • FIR Filter (Decimating or Interpolating) ✅
  • Polyphase FIR (Decimating or Interpolating) ✅ - "Faster" Polyphase implementation useful for resampling.
  • FIR Taps Generator (Gaussian, Lowpass, Root Raised Cosine) ✅
  • CIC Filter (Decimating or Interpolating) ⚠️
General:
  • AGC (Automatic Gain Control) ✅
  • FM Modulator ✅
  • FM Demodulator (Differentiate & Delay) ⚠️
  • Constellation Mapper (Converts Bits to Symbols) ✅
  • Constellation Demapper (Converts Symbols to Bits) ✅
Synchronizers:
  • Carrier Recovery (Decision-Directed, ML) ✅
  • Timing PLL (Decision-Directed Timing Recovery) ⚠️
Utils:
  • Wave File Writing (.wav) for debugging tests

Some blocks are [EXPERIMENTAL] and marked with the ⚠️ this means they have some strange behaivour in some cases or just haven't been tested enough.

Modems (STILL IN DEV)

  • Afsk Modulator (BELL 202 Like 1200Bd FSK Modulator)

  • Gmsk Modulator (GMSK 4800bd Modulator)

Little Build Guide:

You will need a C++ Compiler with support for C++17 or greater, CMake and Make or Ninja...

1 - Clone the repo and cd into it:

git clone https://github.com/Paulo-D2000/PopoSDR.git
cd PopoSDR

2 - Now create a build folder and run cmake inside:

mkdir build
cd build
cmake ..

3 - Then run make OR ninja:

make
ninja

4 - Try some examples :)

Examples (EXPERIMENTAL)

Simulation:
  • AFSK Test ✅ - Generates AFSK Packets and demodulates them writing some debug Wave files.

  • GMSK Test ✅ - Generates GMSK Packets with CCSDS Syncword and demodulates them printing the detected syncwords, also writes debugging Wave files.

  • Main Test ⚠️ - This is just some general testing code, ignore it please.

Network sources:
  • WFM Mono UDP ✅ - Reads S16-LE IQ samples at 1 MHz SampleRate from one local UDP client on port 1234 feeds them to one WFM (Wide FM Station) demodulates the Mono chanel and writes one 48KHz S16-LE audio stream on stdout.

  • GMSK Rx ⚠️ - Reads S16-LE IQ samples at 1MHz SampleRate from one local TCP server on port 1234 feeds them to a 1200Bd GMSK BT=0.5 demodulator that searches for the 0x1ACFFC1D Syncword and prints their data to stderr. It also outputs one S16LE 4800Hz stream on stdout for debugging.

  • QAM RX ⚠️ - Reads S16-LE IQ samples at 48KHz SampleRate from one local TCP and feeds them to the experimental 16-QAM Demodulator outputting the synchronized IQ symbols via stdout as one 6000Hz IQ S16-LE stream... This is still on the testing phase!

Info:

  • S16-LE - 16 bit signed integer
  • IQ - Quadrature signal, 2 channels, Real & Imaginary
  • The TimingPLL Block has 2 variants, Real (F32) and Complex (CF32), the first one was inspired on DireWolf's AFSK PLL while the second one uses a Maximum Likelyhood (ML-TED) with a Polyphase FIR Bank Interpolator. The Interpolator can set to (MMSE) 'Minimum Mean Square Error' having 128 arms or to (PFB) 'Matched Polyphase FIR Bank' with a variable number of filter arms.

// TODO

  • ✅ Upload code.
  • ✅ Get a modem example working.
  • ✅ Fix the modulator code to generate the GMSK waveform again - AFSK1200 right now...
  • ✅ Split the lib and modem code
  • ⬜ Refactor modulator code.
  • ⬜ Make the demodulator class & cleanup main
  • ⬜ Make a modem class.
  • ✅ Move main code to examples
  • ✅ Setup CMake to build the lib / modems / examples
  • ⬜ Refactor the TimingPLL class.
  • ⬜ Add one build guide.
  • ⬜ Document some of the API.
  • ⬜ Add more blocks.

// Future plans / Goals

  • ✅ Implement AFSK modulator
  • ✅ Implement one PSK modulator
  • ⬜ Implement one Burst PSK demodulator (FFT-based)
  • ✅ Implement one Decision directed synchronizer (a * conj(â))
  • ⬜ Add SoapySDR ?
  • ⬜ Add one Example with Real Harware + SDR Modem
  • ⬜ Implement more advanced synchronizers
  • ⬜ Complete GMSK modem
  • ⬜ Complete FSK / AFSK modems
  • ⬜ Complete M-PSK / QAM / APSK modems
  • ⬜ Add OFDM ?
  • ⬜ Add DSSS / CDMA ?