There may be a case for extending the reach of a repeater or even creating a split base repeater where there is no possibility of a Duplexer/Cavity Filters either for cost or space reasons.
In either case, this will require the installation of SvxLink at the Transmitter site, and an internet connection with a publically accessible IP address at the remote receiver RaspberryPi running remotetrx.
Several years ago, I was managing the F5ZGM repeater that was situated in the east of the Haute-Vienne at PainPot, Peyrat-le-Chateau. It was running svxlink of an early version, but had considerable power output, and due to the height of the antenna, it had considerable reach. However despite this capability, there was a stretch of the A20 crossing the River Vienne in Limoges, that was low-lying, and although the repeater could be heard at this point, transmissions from there were difficult if not impossible.
However as the internet for F5ZGM was fed by a system of hi-intensity WiFi by Parabolic antennas from Limoges, I was able to install a receiver running remotetrx, that fed its input to the main repeater on the same network. Just because in this scenario the network was the same, it is not a stopping point for similar systems.
The principle with svxlink and remotetrx, is that they work in concert. The two applications (already in the svxlink package) link by secure connection on a UDP port. The main repeater instead of having a single receiver has a voter in the software that determines the strongest receiver for the moment of reception.
This voter operates continuously as the signal path may change to the main receiver at any time, with a level of hysteresis.
What follows is the code for the remotetrx set for a single remote receiver, and the settings to change for the master repeater. This principle can be set, so that a repeater can be constructed with separate site for Transmit and Receive, thus avoiding the use of a duplexer, provided there is adequate separation between the two elements. The remotetrx can also have additional receivers to its own voter system, so can have perhaps a VHF and UHF receivers. The remote receiver must have its own raspberry pi and usb sound interface, with svxlink installed but running remotetrx as a service instead of svxlink.
########################################################################### remotetrx.conf
#
# Configuration file for the RemoteTrx application. A remote transceiver
# for the SvxLink server system.
# In this package
# [GLOBAL][NetUplinkTrx][NetTrxAdapter][Rx1] only are to be configured
# In this conf file the AUTH_KEY Change this key now! will match that
# the matching segment of the svxlink.conf in the repeater
########################################################################
[GLOBAL]
TRXS=NetUplinkTrx
#CFG_DIR=remotetrx.d
TIMESTAMP_FORMAT="%c"
CARD_SAMPLE_RATE=48000
CARD_CHANNELS=1
[NetUplinkTrx]
TYPE=Net
RX=Rx1
TX=NONE
LISTEN_PORT=5210
#FALLBACK_REPEATER=1
AUTH_KEY="Change this key now!"
#MUTE_TX_ON_RX=1000
#TX_JITTER_BUFFER_DELAY=100
[RfUplinkTrx]
TYPE=RF
RX=Rx1
TX=Tx1
UPLINK_TX=UplinkTx
UPLINK_RX=UplinkRx
MUTE_UPLINK_RX_ON_TX=1
LOOP_RX_TO_TX=0
#DETECT_1750=1000
#DETECT_CTCSS=136.5:1000
[Voter]
TYPE=Voter
RECEIVERS=Rx1,Rx2,Rx3
VOTING_DELAY=200
BUFFER_LENGTH=0
#REVOTE_INTERVAL=1000
#HYSTERESIS=50
#SQL_CLOSE_REVOTE_DELAY=500
#RX_SWITCH_DELAY=500
#COMMAND_PTY=/dev/shm/voter_ctrl
#VERBOSE=1
[NetTrxAdapter]
TYPE=NetTrxAdapter
LISTEN_PORT=5210
#RX_ID=?
RX_SIGLEV=1
[Rx1]
TYPE=Local
#RX_ID=?
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=0
#AUDIO_DEV_KEEP_OPEN=0
#LIMITER_THRESH=-6
SQL_DET=GPIOD
SQL_GPIOD_CHIP=gpiochip0
SQL_GPIOD_LINE=23
SQL_START_DELAY=0
SQL_DELAY=0
SQL_HANGTIME=20
#SQL_EXTENDED_HANGTIME=1000
#SQL_EXTENDED_HANGTIME_THRESH=15
#SQL_TIMEOUT=600
#VOX_FILTER_DEPTH=20
#VOX_THRESH=1000
#CTCSS_MODE=2
#CTCSS_FQ=136.5
#CTCSS_SNR_OFFSET=0
#CTCSS_SNR_OFFSETS=88.5:-1.0,136.5:-0.5
#CTCSS_OPEN_THRESH=15
#CTCSS_CLOSE_THRESH=9
#CTCSS_BPF_LOW=60
#CTCSS_BPF_HIGH=270
#CTCSS_EMIT_TONE_DETECTED=0
#SERIAL_PORT=/dev/ttyS0
#SERIAL_PIN=CTS
#SERIAL_SET_PINS=DTR!RTS
#EVDEV_DEVNAME=/dev/input/by-id/usb-SYNIC_SYNIC_Wireless_Audio-event-if03
#EVDEV_OPEN=1,163,1
#EVDEV_CLOSE=1,163,0
#GPIO_PATH=/sys/class/gpio
#GPIO_SQL_PIN=gpio30
#SQL_GPIOD_CHIP=gpiochip0
#SQL_GPIOD_LINE=22
#SQL_GPIOD_BIAS=PULLDOWN
#PTY_PATH=/tmp/rx1_sql
#HID_DEVICE=/dev/hidraw0
#HID_SQL_PIN=VOL_DN
#SIGLEV_DET=TONE
#SIGLEV_SLOPE=1
#SIGLEV_OFFSET=0
#SIGLEV_BOGUS_THRESH=120
#TONE_SIGLEV_MAP=100,84,60,50,37,32,28,23,19,8
#SQL_SIGLEV_OPEN_THRESH=30
#SQL_SIGLEV_CLOSE_THRESH=10
#DEEMPHASIS=0
#SQL_TAIL_ELIM=300
#PREAMP=6
#PEAK_METER=1
DTMF_DEC_TYPE=INTERNAL
DTMF_MUTING=1
DTMF_HANGTIME=40
#DTMF_SERIAL=/dev/ttyS0
#DTMF_PTY=/tmp/rx1_dtmf
#DTMF_MAX_FWD_TWIST=8
#DTMF_MAX_REV_TWIST=4
#1750_MUTING=1
#SEL5_DEC_TYPE=INTERNAL
#SEL5_TYPE=ZVEI1
FQ=433475000
MODULATION=FM
#WBRX=WbRx1
#OB_AFSK_ENABLE=0
#OB_AFSK_VOICE_GAIN=6
#IB_AFSK_ENABLE=0
#LADSPA_PLUGINS=hpf:1000,@Rx1_Compressor
#[Rx1_Compressor]
#LABEL=tap_dynamics_m
#Attack=4
#Release=500
#Offset Gain=15
#Makeup Gain=15
#Function=13
[WbRx1]
#TYPE=RtlUsb
#DEV_MATCH=0
#HOST=localhost
#PORT=1234
#CENTER_FQ=435075000
#FQ_CORR=0
#GAIN=0
#PEAK_METER=1
#SAMPLE_RATE=960000
[DevcalRtlRx]
TYPE=Ddr
WBRX=WbRx1
FQ=145700000
[Tx1]
TYPE=Local
TX_ID=T
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=0
#AUDIO_DEV_KEEP_OPEN=0
LIMITER_THRESH=-6
PTT_TYPE=NONE
PTT_PORT=/dev/ttyS0
PTT_PIN=DTRRTS
#HID_DEVICE=/dev/hidraw0
#HID_PTT_PIN=GPIO3
#SERIAL_SET_PINS=DTR!RTS
#GPIO_PATH=/sys/class/gpio
#PTT_GPIOD_CHIP=gpiochip0
#PTT_GPIOD_LINE=17
#PTT_HANGTIME=1000
#TIMEOUT=300
TX_DELAY=500
#CTCSS_FQ=136.5
#CTCSS_LEVEL=-24
PREEMPHASIS=0
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_DIGIT_PWR=-15
#MASTER_GAIN=0.0
#OB_AFSK_ENABLE=0
#OB_AFSK_VOICE_GAIN=-6
#OB_AFSK_LEVEL=-12
#OB_AFSK_TX_DELAY=100
#IB_AFSK_ENABLE=0
#IB_AFSK_LEVEL=-6
#IB_AFSK_TX_DELAY=100
#LADSPA_PLUGINS=hpf:1000,@Tx1_Compressor
#[Tx1_Compressor]
#LABEL=tap_dynamics_m
#Attack=4
#Release=500
#Offset Gain=15
#Makeup Gain=15
#Function=13
[UplinkRx]
TYPE=Local
#RX_ID=?
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=1
SQL_DET=VOX
SQL_START_DELAY=0
SQL_DELAY=0
SQL_HANGTIME=2000
#SQL_TIMEOUT=600
VOX_FILTER_DEPTH=20
VOX_THRESH=1000
#CTCSS_MODE=2
CTCSS_FQ=136.5
#CTCSS_SNR_OFFSET=0
#CTCSS_SNR_OFFSETS=88.5:-1.0,136.5:-0.5
#CTCSS_OPEN_THRESH=15
#CTCSS_CLOSE_THRESH=9
#CTCSS_BPF_LOW=60
#CTCSS_BPF_HIGH=270
SERIAL_PORT=/dev/ttyS0
SERIAL_PIN=CTS
#SERIAL_SET_PINS=DTR!RTS
#EVDEV_DEVNAME=/dev/input/by-id/usb-SYNIC_SYNIC_Wireless_Audio-event-if03
#EVDEV_OPEN=1,163,1
#EVDEV_CLOSE=1,163,0
#GPIO_SQL_PIN=gpio30
#SQL_GPIOD_CHIP=gpiochip0
#SQL_GPIOD_LINE=22
#SQL_GPIOD_BIAS=PULLDOWN
#PTY_PATH=/tmp/uplinkrx_sql
#HID_DEVICE=/dev/hidraw0
#HID_SQL_PIN=VOL_DN
#SIGLEV_DET=TONE
SIGLEV_SLOPE=1
SIGLEV_OFFSET=0
#SIGLEV_BOGUS_THRESH=120
#TONE_SIGLEV_MAP=100,84,60,50,37,32,28,23,19,8
SQL_SIGLEV_OPEN_THRESH=30
SQL_SIGLEV_CLOSE_THRESH=10
DEEMPHASIS=0
#SQL_TAIL_ELIM=300
#PREAMP=6
PEAK_METER=1
DTMF_DEC_TYPE=INTERNAL
DTMF_MUTING=1
DTMF_HANGTIME=40
DTMF_SERIAL=/dev/ttyS0
#DTMF_PTY=/tmp/uplink_dtmf
#DTMF_MAX_FWD_TWIST=8
#DTMF_MAX_REV_TWIST=4
#SEL5_DEC_TYPE=INTERNAL
#SEL5_TYPE=ZVEI1
#FQ=433475000
#MODULATION=FM
#WBRX=WbRx1
[UplinkTx]
TYPE=Local
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=1
PTT_TYPE=NONE
PTT_PORT=/dev/ttyS0
PTT_PIN=DTRRTS
#SERIAL_SET_PINS=DTR!RTS
#HID_DEVICE=/dev/hidraw0
#HID_PTT_PIN=GPIO3
#GPIO_PATH=/sys/class/gpio
#PTT_GPIOD_CHIP=gpiochip0
#PTT_GPIOD_LINE=17
TIMEOUT=300
TX_DELAY=500
#CTCSS_FQ=136.5
#CTCSS_LEVEL=9
PREEMPHASIS=0
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_DIGIT_PWR=-15
#TONE_SIGLEV_MAP=100,84,60,50,37,32,28,23,19,8
#TONE_SIGLEV_LEVEL=10
#OB_AFSK_ENABLE=0
#OB_AFSK_CENTER_FQ=5500
#OB_AFSK_SHIFT=170
#OB_AFSK_BAUDRATE=300
#OB_AFSK_LEVEL=-6
#OB_AFSK_VOICE_GAIN=-6
#MASTER_GAIN=0.0Now in the svxlink.conf of the master repeater we need to make some small changes. Only the changed segments will be shown here. The remainder of the svxlink.conf will remain unchanged.
[GLOBAL]
#MODULE_PATH = /usr/lib/arm-linux-gnueabihf/svxlink
LOGIC_CORE_PATH = /usr/lib/arm-linux-gnueabihf/svxlink
LOGICS = RepeaterLogic,ReflectorLogic
CFG_DIR = svxlink.d
TIMESTAMP_FORMAT = "%c"
CARD_SAMPLE_RATE = 48000
CARD_CHANNELS = 2
LOCATION_INFO = LocationInfo
LINKS = LinkToReflector
[RepeaterLogic]
TYPE = Repeater
RX = Voter
TX = MultiTx
MODULES = ModuleHelp,ModuleParrot,ModuleMetarInfo,ModuleEchoLink
[Voter]
TYPE = Voter
RECEIVERS = Rx1,NetRx
VOTING_DELAY = 200
BUFFER_LENGTH = 0
REVOTE_INTERVAL = 1000
HYSTERESIS = 50
SQL_CLOSE_REVOTE_DELAY = 500
RX_SWITCH_DELAY = 500
COMMAND_PTY = /dev/shm/voter_ctrl
#VERBOSE = 1
[NetRx]
TYPE = Net
HOST = IP address of the remote receiver site
TCP_PORT = 5210
#LOG_DISCONNECTS_ONCE = 0
AUTH_KEY = "Change this key now!"
CODEC = S16
#SPEEX_ENC_FRAMES_PER_PACKET = 4
#SPEEX_ENC_QUALITY = 4
#SPEEX_ENC_BITRATE = 15000
#SPEEX_ENC_COMPLEXITY = 2
#SPEEX_ENC_VBR = 0
#SPEEX_ENC_VBR_QUALITY = 4
#SPEEX_ENC_ABR = 15000
#SPEEX_DEC_ENHANCER = 1
#OPUS_ENC_FRAME_SIZE = 20
#OPUS_ENC_COMPLEXITY = 10
#OPUS_ENC_BITRATE = 20000
#OPUS_ENC_VBR = 1
So in all cases where this is the receiver or sub-receiver of the master repeater, then it should be the designated frequency of the repeater. However there is a use case where a receiver on a different band could be used as an engineering channel for the master repeater, that avoiding the case where there was a blocking signal on the normal input of the repeater.
Multiple sites could easily be configured limited only by an internet connection. There is a use case of a transmitter receiver pair to be connected such as providing a full repeater on two occluded sites, with obvious awareness of the possibilty of heterodynes. We aren’t up for quasi-synchronisation just yet.
The other pair could be on another channel of course, or even another band…. just a thought.
