Skip to main content

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

  1. Install Poetry if you haven't already:
curl -sSL https://install.python-poetry.org | python3 -
  1. Clone the repository:
git clone https://github.com/yourusername/chirp-64.git
cd chirp-64
  1. 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

  1. Generate signal with default parameters:
poetry run chirp-64 -o output.wav
  1. Generate and visualize signal:
poetry run chirp-64 -vv -o output.wav
  1. Process input file with custom parameters:
poetry run chirp-64 -v -i input.wav --baud-rate 200 --f-start 2000 --f-end 2400
  1. Full debug mode with all plots:
poetry run chirp-64 -vvv -o output.wav

Development

Setting up Development Environment

  1. Clone the repository:
git clone https://github.com/yourusername/chirp-64.git
cd chirp-64
  1. Install development dependencies:
poetry install --with dev
  1. 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:

  1. Preamble (8 bits): For frame detection
  2. Start Frame Delimiter (8 bits): For frame synchronization
  3. Payload Size Field (16 bits): Indicates payload length
  4. Payload (variable length): User data
  5. 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

  1. Fork the project
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Install development dependencies (poetry install --with dev)
  4. Make your changes
  5. Run tests (poetry run pytest)
  6. Format code (poetry run black chirp_64)
  7. Commit your changes (git commit -m 'Add amazing feature')
  8. Push to the branch (git push origin feature/amazing-feature)
  9. 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

chirp_64-1.0.0.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chirp_64-1.0.0-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file chirp_64-1.0.0.tar.gz.

File metadata

  • Download URL: chirp_64-1.0.0.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.2.0-39-generic

File hashes

Hashes for chirp_64-1.0.0.tar.gz
Algorithm Hash digest
SHA256 69f81de23aaa56506a7510ba9fc1be8879e8f02b06ad06044710c4024c225940
MD5 ae5fe597581fbe73101b29ed378835e9
BLAKE2b-256 02be61963da8d6628c86003bd7d0ff8a9b2aeb43d691e63939690dc4fb836f7e

See more details on using hashes here.

File details

Details for the file chirp_64-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: chirp_64-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.2.0-39-generic

File hashes

Hashes for chirp_64-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b025b9e0ce56e23b89ffec8a76bb7cbec88d52755fcfea8ec953ccc1ee35c240
MD5 ff63189d3ee46505bc03918afaddc55b
BLAKE2b-256 5d03d5299c118b409af08224b63a18013e3afd900873f231490bd0d3feff834b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page