Cross-correlation based digital mode reciever/simulator for amateur radios
Project description
Chirp Modem Simulator
A Python-based simulator for chirp modulation communication systems. This project implements a complete modem system using chirp signals for binary data transmission, including frame synchronization, payload handling, and error detection.
Features
- Configurable chirp-based modulation
- Frame synchronization using preamble and Start Frame Delimiter (SFD)
- CRC32 error detection
- Configurable noise simulation
- Detailed signal visualization and analysis tools
- Support for WAV file input/output
- Multiple verbosity levels for debugging
Project Structure
chirp-64/
├── pyproject.toml # Poetry configuration
├── src/
| ├── chirp_64/ # Main package directory
| │ ├── __init__.py
| │ ├── __main__.py # Entry point
| │ ├── config.py # Configuration parameters and validation
| │ ├── signal_processor.py # Signal processing utilities
| │ ├── modem.py # Transmitter, Receiver, and Channel classes
| │ └── plotter.py # Visualization tools
├── tests/ # Test directory
│ └── __init__.py
└── README.md # This file
Requirements
- Python 3.8+
- Poetry for dependency management
Installation
- Install Poetry if you haven't already:
curl -sSL https://install.python-poetry.org | python3 -
- Clone the repository:
git clone https://github.com/yourusername/chirp-64.git
cd chirp-64
- Install dependencies using Poetry:
poetry install
Usage
Basic Usage
With Poetry, run the module using:
Generate and transmit a new signal:
poetry run chirp-64 -o output.wav
Process an existing WAV file:
poetry run chirp-64 -i input.wav
Running Directly from Source
Alternatively, you can run using Python module syntax:
poetry run python -m chirp_64 -o output.wav
Verbosity Levels
The program supports multiple verbosity levels:
- Default: Only warnings and errors
-v: Basic info (SNR, BER, status messages)-vv: Info + signal plots-vvv: Debug info + all plots including correlations
Configuration Parameters
All major parameters can be configured via command-line arguments:
poetry run chirp-64 -o output.wav \
--fs 48000 \ # Sampling frequency (Hz)
--baud-rate 200 \ # Symbols per second
--f-start 2000 \ # Start frequency for chirps (Hz)
--f-end 2400 \ # End frequency for chirps (Hz)
--amplitude 0.8 \ # Chirp amplitude
--noise-power 0.5 \ # Noise power
--preamble "11001100" \ # Preamble bit sequence
--sfd "11111111" \ # Start Frame Delimiter sequence
--payload-length 128 \ # Number of payload bits
--max-bits 1000 # Maximum bits to annotate in plots
Example Commands
- Generate signal with default parameters:
poetry run chirp-64 -o output.wav
- Generate and visualize signal:
poetry run chirp-64 -vv -o output.wav
- Process input file with custom parameters:
poetry run chirp-64 -v -i input.wav --baud-rate 200 --f-start 2000 --f-end 2400
- Full debug mode with all plots:
poetry run chirp-64 -vvv -o output.wav
Development
Setting up Development Environment
- Clone the repository:
git clone https://github.com/yourusername/chirp-64.git
cd chirp-64
- Install development dependencies:
poetry install --with dev
- Activate the virtual environment:
poetry shell
Running Tests
poetry run pytest
Code Formatting
Format code using black:
poetry run black chirp_64
Signal Structure
The transmitted frame consists of:
- Preamble (8 bits): For frame detection
- Start Frame Delimiter (8 bits): For frame synchronization
- Payload Size Field (16 bits): Indicates payload length
- Payload (variable length): User data
- CRC32 (32 bits): Error detection
Output Files
- WAV files containing the modulated signal
- Plot visualizations (when using -vv or -vvv):
- Transmitted signal with bit annotations
- Received signal with frame structure markers
- Correlation plots for frame detection
Logging Output
The program provides different levels of logging:
- Transmission data (payload, CRC)
- Reception data (received payload, CRC)
- Signal-to-Noise Ratio (SNR)
- Bit Error Rate (BER)
- Frame detection status
- Various debug information at higher verbosity levels
Advanced Usage
Custom Frame Parameters
poetry run chirp-64 -o output.wav \
--preamble "10101010" \
--sfd "11110000" \
--payload-length 128
Noise Testing
poetry run chirp-64 -o output.wav --noise-power 2.0
High-Speed Communication
poetry run chirp-64 -o output.wav --baud-rate 200 --fs 48000
Contributing
- Fork the project
- Create your feature branch (
git checkout -b feature/amazing-feature) - Install development dependencies (
poetry install --with dev) - Make your changes
- Run tests (
poetry run pytest) - Format code (
poetry run black chirp_64) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
MIT License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chirp_64-0.0.4.tar.gz.
File metadata
- Download URL: chirp_64-0.0.4.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.7 Linux/6.2.0-39-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84696dfc21d2395605bdb354b8214ca413bd3f63da58c2cc55792cc747fa4573
|
|
| MD5 |
cf82df9f4d7cbbbb70fa72c48dc5278e
|
|
| BLAKE2b-256 |
d593d06af6c61dad5c7942d3ef6286c367f173826ffc56fc7a2281b5d2d953f4
|
File details
Details for the file chirp_64-0.0.4-py3-none-any.whl.
File metadata
- Download URL: chirp_64-0.0.4-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.7 Linux/6.2.0-39-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8dc72fcb718d6d1b28d1554f3ade936a082d005b216bf440d5cab193803a59f
|
|
| MD5 |
59a3d1a9ef18a3c3b4073bdc144dd0f2
|
|
| BLAKE2b-256 |
5902b37335d35ea6936fedb287ddc453e2a34b25c175d3f9411a781abcaf8736
|