PySDR: A Guide to SDR and DSP using Python is a guide to software-defined radio (SDR) and RF signal processing using Python code examples, live at https://pysdr.org. It is a free online textbook that provides a gentle introduction to wireless communications and SDR using an abundance of diagrams, animations, and code examples. From FFTs to filters to digital modulation to receiving and transmitting from SDRs in Python, PySDR has you covered! This repo specifically contains the source content used to generate the textbook, including the body text and Python scripts to generate the figures. For questions/comments/suggestions feel free to submit an issue at the top of this page, or if you want to propose a change to the textbook (e.g. fix or improvement), you can use a Pull Request. Those who submit valuable feedback/fixes be permanently added to the acknowledgments section. Not good at Git but have changes to suggest? Feel free to email Marc at marc@pysdr.org.
Note that the website is now automatically built and deployed with each push/merge into master branch, using the GitHub action build-and-deploy.yml and the GitHub pages system for hosting the actual textbook.
For testing changes to the textbook locally, you can build using the following steps:
Look at .github/workflows/build-and-deploy.yml and run the apt/pip installs, then:
make html
make html-fr
make html-nl
make html-ukraine
make html-zh
make html-jaIn _build there should be an index.html that represents the main page of the English site
Note: on one machine I had to add ~/.local/bin to PATH
Install pre-requisite software with:
- From the Microsoft Store install Python 3.10 (3.8-3.12 is fine too if you already have it installed).
- In a PowerShell terminal (click start menu then type powershell, or open a terminal in VSCode) run
pip install sphinx sphinxcontrib-tikz patreon setuptools cdto the directory you cloned PySDR
Build the English version only using:
python -m sphinx.cmd.build -b html . _build
The first time running this it might take a while because it has to download LaTeX packages.
Test the javascript part with the following to avoid CORS errors:
cd _build
python -m http.server
Not fully working yet due to animated gifs, they all need to be removed for this to not error out:
sudo apt-get install -y latexmk
sphinx-build -b latex . _build/latex
make latexpdf
Ideas for future chapters:
- Equalization, would be the last step needed to finish the end-to-end communications link
- OFDM, simulating OFDM and CP, show via Python how it turns freq selective fading into flat fading
- How to create real-time SDR apps with GUIs in Python using pyqt and pyqtgraph, or even just matplotlib with updating
- Python code that lets the Pluto (or RTL-SDR) act as an FM receiver, like with sound output
- End-to-end example that shows how to detect start of packet and other concepts not covered in RDS chapter
- Intro to radar
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 Unported License.

