From 62623aab18447e0b8bff602a9daf5873b424d88d Mon Sep 17 00:00:00 2001 From: Mark Jessop Date: Fri, 5 Feb 2021 20:00:44 +1030 Subject: [PATCH] Added dual 4FSK script. --- start_dual_4fsk.sh | 108 ++++++++++++++++++++ start_dual_rx.sh => start_dual_rtty_4fsk.sh | 0 2 files changed, 108 insertions(+) create mode 100755 start_dual_4fsk.sh rename start_dual_rx.sh => start_dual_rtty_4fsk.sh (100%) diff --git a/start_dual_4fsk.sh b/start_dual_4fsk.sh new file mode 100755 index 0000000..7531d77 --- /dev/null +++ b/start_dual_4fsk.sh @@ -0,0 +1,108 @@ +#!/usr/bin/env bash +# +# Dual Horus Binary Decoder Script +# Intended for use with Dual Launches, where both launches have 4FSK payloads closely spaced (~10 kHz) +# +# The SDR is tuned 5 kHz below the Lower 4FSK frequency, and the frequency estimators are set across the two frequencies. +# Modem statistics are sent out via a new 'MODEM_STATS' UDP broadcast message every second. +# + +# Receive requency, in Hz. This is the frequency the SDR is tuned to. +RXFREQ=434195000 + +# Where in the passband we expect to find the Lower Horus Binary (MFSK) signal, in Hz. +# For this example, this is on 434.290 MHz, so with a SDR frequency of 434.195 MHz, +# we expect to find the signal at approx +5 kHz. +# Note that the signal must be located ABOVE the centre frequency of the receiver. +MFSK1_SIGNAL=5000 + +# Where in the receiver passband we expect to find the higher Horus Binary (MFSK) signal, in Hz. +# In this example, our second frequency is at 434.210 MHz, so with a SDR frequency of 434.195 MHz, +# we expect to find the signal at approx +15 kHz. +MFSK2_SIGNAL=15000 + +# Frequency estimator bandwidth. The wider the bandwidth, the more drift and frequency error the modem can tolerate, +# but the higher the chance that the modem will lock on to a strong spurious signal. +RXBANDWIDTH=5000 + +# Receiver Gain. Set this to 0 to use automatic gain control, otherwise if running a +# preamplifier, you may want to experiment with different gain settings to optimize +# your receiver setup. +# You can find what gain range is valid for your RTLSDR by running: rtl_test +GAIN=0 + +# Bias Tee Enable (1) or Disable (0) +# NOTE: This uses the -T bias-tee option which is only available on recent versions +# of rtl-sdr. Check if your version has this option by running rtl_fm --help and looking +# for it in the option list. +# If not, you may need to uninstall that version, and then compile from source: https://github.com/osmocom/rtl-sdr +BIAS=0 + +# Receiver PPM offset +PPM=0 + + + + +# Check that the horus_demod decoder has been compiled. +DECODER=./build/src/horus_demod +if [ -f "$DECODER" ]; then + echo "Found horus_demod." +else + echo "ERROR - $DECODER does not exist - have you compiled it yet?" + exit 1 +fi + +# Check that bc is available on the system path. +if echo "1+1" | bc > /dev/null; then + echo "Found bc." +else + echo "ERROR - Cannot find bc - Did you install it?" + exit 1 +fi + +# Use a local venv if it exists +VENV_DIR=venv +if [ -d "$VENV_DIR" ]; then + echo "Entering venv." + source $VENV_DIR/bin/activate +fi + + +# Calculate the frequency estimator limits +# Note - these are somewhat hard-coded for this dual-RX application. +MFSK1_LOWER=$(echo "$MFSK1_SIGNAL - $RXBANDWIDTH/2" | bc) +MFSK1_UPPER=$(echo "$MFSK1_SIGNAL + $RXBANDWIDTH/2" | bc) + +MFSK2_LOWER=$(echo "$MFSK2_SIGNAL - $RXBANDWIDTH/2" | bc) +MFSK2_UPPER=$(echo "$MFSK2_SIGNAL + $RXBANDWIDTH/2" | bc) + +echo "Using SDR Centre Frequency: $RXFREQ Hz." +echo "Using MFSK1 estimation range: $MFSK1_LOWER - $MFSK1_UPPER Hz" +echo "Using MFSK2 estimation range: $MFSK2_LOWER - $MFSK2_UPPER Hz" + +BIAS_SETTING="" + +if [ "$BIAS" = "1" ]; then + echo "Enabling Bias Tee." + BIAS_SETTING=" -T" +fi + +GAIN_SETTING="" +if [ "$GAIN" = "0" ]; then + echo "Using AGC." + GAIN_SETTING="" +else + echo "Using Manual Gain" + GAIN_SETTING=" -g $GAIN" +fi + +STATS_SETTING="" + +if [ "$STATS_OUTPUT" = "1" ]; then + echo "Enabling Modem Statistics." + STATS_SETTING=" --stats=100" +fi + +# Start the receive chain. +rtl_fm -M raw -F9 -s 48000 -p $PPM $GAIN_SETTING$BIAS_SETTING -f $RXFREQ | tee >($DECODER -q --stats=5 -g -m binary --fsk_lower=$MFSK1_LOWER --fsk_upper=$MFSK1_UPPER - - | python -m horusdemodlib.uploader) >($DECODER -q --stats=5 -g -m binary --fsk_lower=$MFSK2_LOWER --fsk_upper=$MFSK2_UPPER - - | python -m horusdemodlib.uploader) > /dev/null diff --git a/start_dual_rx.sh b/start_dual_rtty_4fsk.sh similarity index 100% rename from start_dual_rx.sh rename to start_dual_rtty_4fsk.sh