FHSS
IMPLEMENTERING
This page explains how FHSS protects drone communication links against enemy electronic warfare jamming, and how ELRS implements it at 300 MHz (mil-band) for European operations.
Problemet — fienden stör din radio
Din FPV-drönare kommunicerar med markstationen på en radiofrekvens — 300 MHz militärband i FSG-A-systemet. Om fienden vet vilken frekvens du använder kan de rikta en störsändare mot just den frekvensen och överrösta din signal med brus. Resultatet: du tappar kontroll och drönaren kraschar eller initierar failsafe. Hela den elektroniska krigföringen handlar om att kontrollera detta förhållande mellan signal och brus.
Om din radio stannar på en fast frekvens behöver fienden bara en störsändare på den frekvensen. De lyssnar, hittar din frekvens (tar 0,1–5 sekunder med en SDR), riktar störsändaren och din länk dör. En fast frekvens mot en modern EK-kapabel motståndare har en överlevnadstid på sekunder, inte minuter.
Lösningen — hoppa mellan kanaler
Istället för att stanna på en frekvens hoppar FHSS snabbt mellan många olika kanaler. Vid 150 hopp per sekund: radion stannar på varje kanal i 6,7 millisekunder innan den hoppar vidare. Fiendens störsändare hinner knappt detektera kanalen innan du redan lämnat den. Resultatet: även om störsändaren träffar enskilda kanaler missar den majoriteten av hoppen.
Hoppmönstret ser slumpmässigt ut men bestäms faktiskt av en delad hemlighet (seed-nyckel) som bara sändare och mottagare känner till. Båda beräknar exakt samma kanalsekvens från seed-nyckeln — de hoppar synkroniserat utan att behöva kommunicera hoppsekvensen över radio. En fiende utan seed-nyckeln kan inte förutsäga nästa kanal.
ELRS vid 300 MHz militärband använder ungefär 80 kanaler utspridda tvärs det tilldelade militära frekvensbandet. Vid 150 hopp per sekund besöks varje kanal ungefär 2 gånger per sekund. Störaren måste blockera alla 80 kanaler simultant (bredbandsstörning) för att vara 100 procent effektiv — detta kräver 80× mer sändareffekt än punktstörning av en enda kanal.
Hur ELRS implementerar FHSS
MANET 300 MHz (mil-band) FHSS PARAMETERS
ELRS kombinerar faktiskt TVÅ störskyddstekniker. FHSS (kanalhoppning) gör det svårt att hitta signalen. LoRa-modulering (spread spectrum) gräver ner signalen under brusgolvet — mottagaren extraherar data ur brus med kodningsmarginal. Tillsammans: fienden måste först hitta kanalen (svårt vid 150 hopp/s) OCH sedan leverera tillräckligt med brus för att övervinna LoRa:s kodningsmarginal (ytterligare 10–15 dB).
Avvägningar: hastighet mot räckvidd mot störresistens
Högre hoppfrekvens = svårare att störa men kortare räckvidd. Vid 500 Hz byter du kanal var 2:a millisekund — störaren har ingen chans. Men varje hopp bär minimal data (2 ms × 19 kbps = 38 bit) och overhead per hopp reducerar nettodatagenomströmningen. Vid 50 Hz: varje hopp bär 380 bit — 10× mer data, men störaren har 20 ms att reagera.
För militära FPV-operationer i störmiljö rekommenderas 150 Hz som kompromiss: tillräckligt snabb för att besegra alla kända taktiska störsändare (omställningstid 1–5 ms — för långsam vid 6,7 ms per hopp), och tillräckligt långsam för att upprätthålla 10+ km räckvidd med acceptabel datagenomströmning för telemetri och lågupplöst video.
Vad FHSS inte kan skydda mot
Matematisk härledning — varför FHSS besegrar smalbandsjamming
Den fullständiga fyrstegs-härledningen av varför FHSS fungerar publiceras på den engelska versionen. Matematiken är standard sannolikhetslära (Proakis & Salehi, Digital Communications, McGraw-Hill 2008, kap. 12) specialiserad till ELRS och Silvus kanalantal. Sidans bidrag: att visa de konkreta paketförlustkonsekvenserna och power-ratio som krävs för barrage-jamming.
Kortfattat: (1) Sannolikhet att en smalbandsstörare blockerar en hopp = J/N där J är antal störda kanaler, N totalt. (2) K konsekutivt blockerade hopp har sannolikhet (J/N)^K. (3) Med M störare på olika frekvenser: P_blocked = M·J/N (linjär skalning). (4) Barrage-jamming kräver N× mer effekt än smalband för att matcha PSD per kanal.
Bearbetat exempel 1 — ELRS saturerat av 10 smalbandsstörare
Ryska taktiska störare (Lesochek-klass) täcker typiskt 1 MHz vardera. 10 störare × 1 MHz = 10 MHz blockerad bandbredd. ELRS arbetar i 7 MHz ISM-band (863–870 MHz). 10 MHz > 7 MHz → FULL SATURATION. Operativ slutsats: ELRS är OLÄMPLIGT för bestridd RF-miljö och måste ersättas med fiberoptisk FPV (immun mot RF) eller migrera till militärt band. Verifierat i provable_claims.py under FHSS_ELRS_SATURATED_10JAMMERS.
Bearbetat exempel 2 — Silvus MANET överlever 100 taktiska störare
100 smalbandsstörare × 40 kanaler vardera = 4 000 blockerade av 4 600. Återstående: 600 kanaler = 13 % tillgänglighet. Per hopp-överlevnad 13 %, 3-pakets-fönster-förlust (0,87)³ = 66 %. Länken degraderas till ~1 Mbps (från 34 Mbps) men förblir funktionell — graciös degradering vs katastrofal failfas. Verifierat i FHSS_SILVUS_100JAMMERS_SURVIVAL.
Varför denna härledning är operativt viktig
Fyra operativa beslut beror på att FHSS-matematiken är korrekt. Bandval för taktiskt vs strategiskt bruk: ELRS 7 MHz-bandet är saturerat av 10 störare — en realistisk rysk taktisk utplacering. Slutsats: ELRS är OLÄMPLIGT för bestridda RF-miljöer. FSG-A måste antingen använda fiberoptisk FPV eller migrera till militära band. Silvus MANET-motivering: 100 störare ger bara 13 % kanaltillgänglighet — graciös degradering är den matematiska anledningen till att Silvus specificeras för bataljon-och-uppåt. Barrage-jamming-hotbedömning: 4600× effekt-ratio för Silvus betyder ~230 kW — endast stora fordonsmonterade ryska system (Krasukha-4, Shipovnik-Aero) når detta. Strategiska tillgångar, sällsynta och lätt att rikta ISR mot. Nyckelrotations-intervall: 24 timmar balanserar kryptografisk marginal mot operativ praktikalitet — 2²⁵⁶-nyckelrymden är säker på längre tid ändå.
Implementering
# FHSS Channel Hopping Demonstration
import hashlib, struct
def fhss_hop_sequence(seed_key, n_channels=4600, hops_per_sec=100):
"""Generate deterministic pseudo-random hop sequence."""
channels = []
for hop_index in range(hops_per_sec * 60): # 1 minute of hops
# HMAC-based channel selection (both sides have same seed)
h = hashlib.sha256(seed_key + struct.pack(">I", hop_index)).digest()
channel = struct.unpack(">H", h[:2])[0] % n_channels
channels.append(channel)
return channels
# Silvus StreamCaster: 140-600 MHz, 100 kHz channels
# 460 MHz / 100 kHz = 4,600 channels
hops = fhss_hop_sequence(b"SECRET_KEY_256BIT", n_channels=4600)
print(f"First 10 hops: {hops[:10]}")
print(f"Unique channels in 1 min: {len(set(hops[:6000]))}")
# Narrowband jammer on one channel: misses 4599/4600 = 99.98% of hops
# Barrage jammer across ALL 4600: needs 4600× more power
Källor
ExpressLRS-protokolldokumentation (expresslrs.org, 2024). Semtech LoRa-moduleringsspecifikationer. Silvus StreamCaster FHSS-konfiguration. Ukrainsk EK-erfarenhet med FHSS 2023–2025.
Kanalhoppningssekvensens säkerhet
Hoppsekvensen i Silvus StreamCaster genereras från en delad seed-nyckel med AES-256. Seed-nyckeln laddas vid start från operatörens USB (aldrig lagrad på enheten). Även med full kunskap om FHSS-algoritmens matematiska struktur kan en motståndare inte förutsäga sekvensen utan seed-nyckeln — detta motsvarar att bryta AES-256 kryptering, vilket är beräkningsmässigt omöjligt med dagens teknik.
En motståndare med en bredbandsmottagare (SDR som spänner 140–600 MHz simultant) kan observera alla 80 kanalers aktivitet och kartlägga hoppmönstret statistiskt över tid. Med tillräcklig observationstid (minuter) kan angriparen identifiera vilka kanaler som används och rikta störning selektivt. Motåtgärd: rotera seed-nyckeln var 30:e minut — angriparens statistiska modell ogiltigförklaras och analysen måste börja om från noll.