Stream FM radio using SDR (Software Defined Radio), decoding raw I/Q signal

Overview

py-fm-stream

Listen to FM radio from raw I/Q signals from a Software Defined Radio.

This is intended as an example of how to handle and decode FM radio, there are many ways that this can be improved. Please have fun with trying out different arguments to see how it impacts the audio quality.

Installation & Execution

Python dependencies are in requirements.txt and can be installed with:

# for windows
python -m pip install -r requirements.txt

# linux
pip install -r requirements.txt

# use pip or pip3

The code can be run with:

python3 fm_stream.py

Arguments

The following arguments are available:

  1. -l: list devices available for audio playback
  2. -d: device selected
  3. -a: amplitude, to reduce or increase volume
  4. -b: bandwidth, bandwidth of signal capture in Hz
  5. -s: samplerate, samplerate of signal capture
  6. -buffer: buffersize, size of the buffer for storing processed signal
  7. -samples: samplesize, the number of samples obtained per run

Default arguments can be observed in the code or printed upon execution

Sources

Check out the following sources:

  1. https://www.rtl-sdr.com/
  2. https://pysdr.org/index.html
  3. https://pysdr.org/content/rds.html#
  4. https://howtotrainyourrobot.com/reading-amateur-radio-frequencies-with-rtlsdr-device-and-python/
  5. https://python-sounddevice.readthedocs.io/en/0.4.5/
  6. https://pyrtlsdr.readthedocs.io/en/latest/index.html
  7. https://witestlab.poly.edu/blog/capture-and-decode-fm-radio/
  8. https://python-sounddevice.readthedocs.io/en/0.4.5/examples.html

Limitations

This audio stream is mono only, and depending on computation speed, it might not be able to keep up with the audio stream.

Equipment used:

  1. Raspberry Pi Model 4B
  2. RTL2832U from https://www.rtl-sdr.com/
  3. Dipole Antenna Base with 60cm RG174
You might also like...

misp-guard is a mitmproxy addon that inspects the events that MISP is attempting to syncronize with external MISP instances via PUSH or PULL and applies a set of customizable rules defined in a JSON file.

misp-guard is a mitmproxy addon that inspects the events that MISP is attempting to syncronize with external MISP instances via PUSH or PULL and applies a set of customizable rules defined in a JSON file.

Nov 23, 2022

Nemo is a web service whose main task is to display the online status of any maturity model for any project defined in it

Nemo is a web service whose main task is to display the online status of any maturity model for any project defined in it. It also provides some other facilities such as setting a goal to reach a level in maturity model and more.

Oct 26, 2022

Simple wrapper that invokes ruff with settings defined in flake8 config files.

flake8-ruff-wrapper This is a package that allows you to use ruff as a replacement to flake8 without migrating your configuration to pyproject.toml an

Oct 16, 2022

Let computers do all your DNA decoding for you - Created on 3/24/22

DNA Decoder Your science teacher gave you some very time-consuming DNA decoding homework? Don't worry, let computers do all the hard labor for you. Si

Apr 1, 2022

[SIGIR 2022] CenterCLIP: Token Clustering for Efficient Text-Video Retrieval. Also, a text-video retrieval toolbox based on CLIP + fast pyav video decoding.

[SIGIR 2022] CenterCLIP: Token Clustering for Efficient Text-Video Retrieval. Also, a text-video retrieval toolbox based on CLIP + fast pyav video decoding.

CenterCLIP CenterCLIP achieves state-of-the-art text-video retrieval performance and decent computation cost reduction on MSVD, MSRVTT, LSMDC, and Act

Nov 17, 2022

On-screen QR decoding tool. Built with Python and leverages the Windows Snipping Tool.

On-screen QR decoding tool. Built with Python and leverages the Windows Snipping Tool.

QRDecoder A lightweight, on-screen QR decoding tool for Windows. Built on top of Python leveraging the Windows Snipping Tool. Overview • Usage • Credi

Sep 30, 2022

A proof of concept for automating qrcode decoding based on a search query.

Description A proof of concept for QR code crawling/decoding based on images. Fetchs images based on selected dated and query. Analyse images and trie

Jun 16, 2022

A python based webshell discovery and decoder for static packet captures. Designed to be extended for easy identification and decoding of many webshell families.

Mothra A python based webshell discovery and decoder for static packet captures. Designed to be extended for easy identification and decoding of many

Aug 31, 2022

A seq2seq neural network model based on multi-head self-attention mechanism at encoding stage and adopting pointer generator, coverage mechanism at decoding stage to handle out of vocabulary and repetition words.

A seq2seq neural network model based on multi-head self-attention mechanism at encoding stage and adopting pointer generator, coverage mechanism at decoding stage to handle out of vocabulary and repetition words.

Sep 24, 2022
Owner
flipthedog
Software, Data, Digital, Robotics Engineering
flipthedog
BTLE-R is a sniffing module for an open source software-defined radio (HackRF One) Bluetooth Low Energy software experiment kit.

BTLE-R BTLE-R is a sniffing module for an open source software-defined radio (HackRF One) Bluetooth Low Energy software experiment kit. Currently unde

Migraine 16 Nov 8, 2022
Convert the message type of SMS messages in Signal, to look more like native Signal messages

signal-message-changer Alter the message type of the messages in the Signal database Signal have made a decision to delete all of your SMS messages th

Alex Lance 4 Nov 1, 2022
Python script to export SDRSharp favorites to a format that can be imported in SDR++

export-sdrsharp-favs Python script to export the Frequency Manager favorites in SDR# to a format that can be imported into SDR++ I couldn't find any s

Kyle Claisse 1 Oct 16, 2022
Smart jammer based on SDR with frequency hopping 🐇

CleverJAM Smart jammer based on SDR with frequency hopping ⚠️ WARNING ⚠️ Jamming is illegal ! Prerequisites SDR devices that is enabled to transmit si

CrTx0 44 Nov 16, 2022
As a common task in NLP, it permits the identification of free-text document based on pre-defined classes.

Text-document-Categorization As a common task in NLP, it permits the identification of free-text document based on pre-defined classes. Why Text-Docum

Grace Ugochi Nneji 2 Mar 29, 2022
Quart-Rate-Limiter is an extension for Quart to allow for rate limits to be defined and enforced on a per route basis.

Quart-Rate-Limiter Quart-Rate-Limiter is an extension for Quart to allow for rate limits to be defined and enforced on a per route basis. The 429 erro

Phil Jones 9 Oct 9, 2022
A discord bot which allows users to have only the highest role in a defined list.

DISCORD HIERARCHY ROLE BOT A discord bot which allows users to have only the highest role in a defined list. The bot will not modify any user's roles

null 2 May 9, 2022
Text classification is one of the popular tasks in NLP that allows a program to classify free-text documents based on pre-defined classes.

Deep-Learning-for-Text-Document-Classification Text classification is one of the popular tasks in NLP that allows a program to classify free-text docu

Happy  N. Monday 2 Mar 17, 2022
dbt-yaml-check checks that columns defined in YAML also exist in SQL.

dbt-yaml-check dbt-yaml-check checks that columns defined in YAML also exist in SQL. This is particularly useful for identifying extraneous columns an

Kshitij Aranke 28 Nov 8, 2022
Soda Core is a free, open-source, command-line tool that enables you to use the Soda Checks Language to turn user-defined input into aggregated SQL queries.

Soda Core is a free, open-source, command-line tool that enables you to use the Soda Checks Language to turn user-defined input into aggregated SQL queries.

Soda Data Reliability 1.1k Nov 26, 2022