Parses rtl_power scans and finds quiet frequencies
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-16 13:23:34 -06:00
scans feat: First revision of analyzer 2026-09-14 17:58:01 -06:00
src/analyzer feat: Move to click for CLI, add noise floor calculations 2026-09-16 13:08:46 -06:00
.gitignore feat: First revision of analyzer 2026-09-14 17:58:01 -06:00
.python-version feat: First revision of analyzer 2026-09-14 17:58:01 -06:00
pyproject.toml chore: Version bump to 1.0.0 2026-09-16 13:23:34 -06:00
README.md chore: Update README again 2026-09-16 13:22:36 -06:00
uv.lock feat: Move to click for CLI, add noise floor calculations 2026-09-16 13:08:46 -06:00

MeshCore Analyzer

A utility for processing rtl_power outputs and finding channels that are quieter

Getting Started

  • Install uv
  • Run uv sync to install dependencies
  • Run the analyzer with uv run analyzer

Usage

Usage: analyzer [OPTIONS] COMMAND [ARGS]...

  Utility for finding suitable bands for mesh networks

Options:
  --help  Show this message and exit.

Commands:
  merge  Merge rtl_power csv files
  parse  Analyze rtl_power csv files

Merger Usage

Usage: analyzer merge [OPTIONS] [INPUT_PATH]...

  Merge multiple rtl_power csv/csv.gz files into a single csv.gz file

Positional arguments:
  [INPUT_PATH]...  one or more rtl_power CSV files (.csv or .csv.gz) and/or
                   directories of CSV files

Options:
  -o, --output-file PATH  CSV file to write to  [required]
  -p, --pattern TEXT      glob pattern used when an input path is a directory
                          (default: matches *.csv and *.csv.gz; pass multiple
                          times to match more than one pattern)
  -r, --recursive         when an input path is a directory, also search
                          subfolders
  --help                  Show this message and exit.

Parser Usage

Usage: analyzer parse [OPTIONS] [INPUT_PATH]...

  Find the N quietest (lowest average power) frequency bands of a given width
  across one or more rtl_power CSV logs.

  Point it at a single CSV, several CSVs, and/or a folder of CSVs (e.g.
  recordings taken at different times of day) and it will combine them into
  one average spectrum before searching for quiet bands. Gzipped logs
  (.csv.gz) are read transparently, uncompressed on the fly.

Positional arguments:
  [INPUT_PATH]...  one or more rtl_power CSV files (.csv or .csv.gz) and/or
                   directories of CSV files

Options:
  -p, --pattern TEXT     glob pattern used when an input path is a directory
                         (default: matches *.csv and *.csv.gz; pass multiple
                         times to match more than one pattern)
  -r, --recursive        when an input path is a directory, also search
                         subfolders
  -b, --block-list PATH  CSV file of frequency bands to exclude (rows:
                         start_freq,end_freq[,label] - e.g.
                         462.5625M,462.7375M,GMRS). Any candidate band
                         overlapping a blocked band is skipped.
  -t, --top INTEGER      number of quietest bands to report  [default: 10]
  -o, --csv-out PATH     Optionally write results to this CSV file
  --band-width INTEGER   band width in Hz to search for  [default: 500000]
  --min-freq FLOAT       ignore data below this frequency, in Hz  [default:
                         902000000.0]
  --max-freq FLOAT       ignore data above this frequency, in Hz  [default:
                         928000000.0]
  --allow-overlap        allow reported bands to overlap each other
  --weight-by-samples    weight every individual sample equally across all
                         files combined, instead of weighting every file
                         equally (default: every file/recording counts
                         equally)
  --help                 Show this message and exit.

Blocked Frequencies

Blocked frequencies can be defined with a CSV. An example is provided below:

start_freq,end_freq,label
908.500M,909.000M,MT LongTurbo
906.750M,907.000M,MT LongFast
913.000M,913.250M,MT MediumFast
910.49375M,910.55625M,MC Default
902.000M,903.400M,AARL Lower
927.000M,928.000M,AARL Upper