AFH er en spread spectrum-teknik, der dynamisk udelukker støjende kanaler i 2,4 GHz-båndet og sikrer stabil Bluetooth-forbindelse. Her gennemgår jeg kanalkort, kanalvælgelsesalgoritme #2, scanneintervaller og implementering i Bluetooth LE.

Hvad er adaptiv frekvensspringning, og hvorfor betyder det noget?

Adaptiv frekvensspringning (AFH) er en spread spectrum-teknik, hvor sender og modtager hele tiden skifter transmissionsfrekvens efter en fælles hoppesekvens – og samtidig udelukker de kanaler, der er støjende. Ideen er at slippe for interferens fra Wi-Fi, mikrobølgeovne og alt muligt andet, der deler det åbne 2,4 GHz ISM-bånd. I stedet for at hoppe blindt rundt over alle kanaler holder forbindelsen altså øje med kanalkvaliteten og bruger kun dem, der faktisk virker. Det er netop derfor, AFH er en af de vigtigste mekanismer bag Bluetooths robusthed i tæt befolkede radio miljøer.

Bluetooth SIG har opdelt 2,4 GHz-båndet i 40 kanaler, og i Bluetooth Low Energy er de 37 af dem almindelige datakanaler. Før AFH blev taget i brug, benyttede Bluetooth classic hele 79 ud af de 83,5 tilgængelige kanaler og hoppede 1600 gange i sekundet. Derudover er AFH et krav, hvis du vil sende med en TX-effekt på over +10 dBm. Tilbage i 2020 blev der produceret mere end 4 milliarder Bluetooth- og BLE-enheder på verdensplan, så det siger lidt om, hvor central den her teknik er for moderne trådløs kommunikation.

AFH bliver tit beskrevet som en pseudorandom frekvenstildeling, og det er faktisk en meget rammende beskrivelse: sender og modtager holder hele tiden styr på hinandens frekvenser og følger den samme hoppesekvens. For hver forbindelseshændelse bliver der valgt en kanal – det sker deterministisk ud fra de kanaler, der er tilgængelige, via en kanalvælgelsesalgoritme. Derefter skifter enhederne til den pågældende kanal og kommunikerer videre over en række kanaler, der skifter hyppigt gennem hele 2,4 GHz-båndet. På den måde bliver energien spredt ud, og risikoen for vedvarende konflikt med en fast interferenskilde falder altså markant.

Hvordan virker AFH? Kanalkort, hopning og interferensdetektion

Den primære enhed holder styr på et kanalkort, hvor hver enkelt kanal er markeret som enten i brug eller ubrugt. Det kort deler den med den sekundære enhed gennem en link layer-procedure – og selve opdateringsproceduren har været en del af Bluetooth 4.0-specifikationen siden dengang, hvor det kun er central/master-enheden, der kan sætte den i gang. Hvis en kanal først har kørt fint, men så begynder at blive dårlig, bliver kanalkortet opdateret, så kanalen ryger ud. Går det den anden vej – altså at en dårlig kanal bliver bedre igen – opdateres status tilsvarende, og kanalen kan lukkes ind i varmen igen.

For at holde styr på kanalkvaliteten tager enhederne nogle metoder i brug, som er specifikke for den enkelte implementering. De to mest almindelige måder at vurdere en kanal på er RSSI (Received Signal Strength Indication) og PER (Packet Error Rate). Kort fortalt måler RSSI, hvor stærkt signalet er, når det når frem, mens PER ser på, hvor stor en del af pakkerne der ikke kommer rigtigt igennem. Tilsammen siger de altså noget om, hvorvidt en kanal overhovedet er egnet til at sende data over – og de kan med fordel kombineres i den løbende kanalklassificering.

Silicon Labs har en ret konkret AFH-implementering, som jeg ofte vender tilbage til i mit udviklerarbejde. Her kører en periodisk baggrundsopgave, der fejer alle kanaler igennem og måler den modtagne effekt. Ligger effekten over -71 dBm, bliver kanalen blokeret. Efter hver fejning dannes et nyt kanalkort, som centralen sender videre til slaverne. Selve fejningen af de 40 kanaler tager omkring 10 ms, og det ekstra energiforbrug ender på cirka 240 uW. En kanal holdes blokeret i minimum 8 afh_scan_intervals, og for at ophæve blokeringen skal der til gengæld 8 målinger i træk uden interferens til.

Forskningen bag eAFH, som Valentin Poirot og Olaf Landsiedel står bag i et samarbejde mellem Kiel University og Chalmers University of Technology (arXiv:2112.03046v1, 6. december 2021), tager kanalklassificeringen et skridt videre. Her indføres nemlig det, man kan kalde informeret udforskning, når kanaler skal udelukkes eller lukkes ind igen. I stedet for blot at reagere på øjeblikkelige målinger bruger eAFH tidligere målinger til at vurdere, hvilke frekvenser der med størst sandsynlighed vil have gavn af at komme i brug igen. Det giver et mere retvisende billede af kanalernes faktiske kvalitet over tid. Resultaterne taler da også for sig selv: 98-99,5 % pålidelighed på link-laget under dynamisk Wi-Fi-interferens, et kontroloverhead på kun 1 % og hele 40 % højere kanaldiversitet end sammenlignelige state-of-the-art-metoder.

AFH i Bluetooth vs Bluetooth Low Energy: kanaler og specifikationer

Forskellen på Bluetooth classic og Bluetooth Low Energy handler især om, hvor mange kanaler de bruger, og hvordan kanalvalget foregår. Bluetooth classic havde før AFH 79 kanaler og hoppede 1600 gange i sekundet, mens Bluetooth LE nøjes med 40 kanaler, hvoraf de 37 er datakanaler. Til BIS PDUs anvender Bluetooth LE Channel Selection Algorithm #2, og det står beskrevet i Vol. 6 Part B af core-specifikationen. Tabellen nedenfor samler de vigtigste parametre.

ParameterBluetooth classicBluetooth Low Energy
Kanaler i alt79 af 83,540
Datakanaler7937
Hop-hastighed1600 hop/sekundKanalvælger pr. forbindelseshændelse
Minimumskanaler ved AFHMindst 20Mindst 20
KanalvælgelseAFH-kanalkortChannel Selection Algorithm #2

Bluetooth-specifikationen stiller et minimumskrav: der skal være mindst tyve kanaler til rådighed, når AFH tages i brug. Den grænse er der en god grund til at tage alvorligt — kommer man under den, bliver hoppesekvensen for let at forudsige, og så svækkes både robustheden og sikkerheden. Samtidig hænger AFH tæt sammen med sendestyrken: vil man sende med mere end +10 dBm, er AFH ikke valgfrit, men et krav. Det betyder i praksis, at enheder med højere effekt også skal kunne håndtere kanalklassificeringen ordentligt.

Når man sender lyd over Bluetooth, ligger trafikken typisk omkring 300 kbit/s, og der sendes data cirka hvert 15. millisekund. Det sætter AFH under et reelt pres, for lyd er ikke glad for hverken tabte pakker eller svingende latenstid – selv små forsinkelser kan høres. Derfor har AFH-scanningen høj prioritet i linklaget, så kanalkortet hele tiden holdes opdateret. Men det har også en bagside: falder flere opgaver inden for samme 10 ms-vindue, kan AFH-scanningen skubbe dem af vejen og dermed blokere andre operationer.

Implementering af AFH: scanneintervaller, blokering og udvikler-API'er

I Silicon Labs' Bluetooth SDK aktiveres AFH ved at installere AFH-softwarekomponenten. Funktionen sl_bt_init_afh() kaldes automatisk inde i sl_bt_init() af kodegeneratoren, så du behøver ikke kalde den manuelt i nyere SDK-versioner. I ældre SDK'er, eksempelvis Bluetooth SDK v2.9, v2.10 og v2.11, kalder du i stedet gecko_init_afh() efter gecko_init(&config). Dette er relevant for EFR-enheder og SDK v3.x, hvor API-navnene kan variere en smule.

Scanintervallet styres via AFH_SCAN_INTERVAL_CONFIG_KEY 7. Enheden er 10 ms, og standardværdien er 1 sekund, hvilket svarer til 100 enheder. Du ændrer værdien ved at sætte afh_scan_interval og kalde sl_bt_system_linklayer_configure eller gecko_cmd_system_linklayer_configure. Tabellen nedenfor viser de centrale implementeringsparametre fra Silicon Labs' AFH-dokumentation.

ParameterVærdi
Standard scanneinterval1 sekund
Enhed for afh_scan_interval10 ms
Tid for fejning af 40 kanalerCa. 10 ms
EnergiforbrugCa. 240 uW
Effekttærskel for blokering-71 dBm
BlokeringsvarighedMindst 8 scanneintervaller
Ophævelse af blokering8 målinger uden interferens

Nordic Semiconductor har tilsvarende værktøjer til nRF5340-chippen og dokumenterer kanalklassificering i Nordic DevZone. Zebra og Honeywell SPS har produktreferenceguider til TC57 og PS30, hvor AFH-adfærd beskrives i forbindelse med støjende miljøer. Texas Instruments' swra487 er en anden nyttig kilde til forståelse af sameksistens mellem Bluetooth og Wi-Fi. Fælles for alle er, at AFH-fejningen har højeste prioritet og kan blokere andre operationer, hvis flere opgaver falder inden for 10 ms.

Fordele, begrænsninger og sameksistens med Wi-Fi

AFH giver markant bedre interferensresistens, fordi dårlige kanaler dynamisk udelukkes i stedet for at kræve manuel deaktivering. Sammenlignet med ikke-adaptiv kanalblokering, hvor du selv skal slå kanaler fra, tilpasser AFH sig løbende. Det forbedrer også sikkerheden, fordi de pseudorandom frekvensskift gør det sværere at aflytte eller forstyrre forbindelsen målrettet. Endelig optimerer AFH spektrumudnyttelsen ved at allokere frekvenser dynamisk i stedet for at spilde båndbredde på kanaler, der alligevel er ubrugelige.

Begrænsningerne er dog reelle. Der kører ikke AFH under opkobling og opdagelse af enheder, så den indledende fase er mere sårbar. Alle enheder i et piconet skal understøtte AFH, ellers falder man tilbage til ikke-adaptiv adfærd. Genindlæsning af kanaler er svær i dynamiske miljøer, fordi en kanal kan skifte kvalitet hurtigt. AFH-fejningen har højeste prioritet og kan blokere andre operationer, hvis flere opgaver falder inden for 10 ms. Endelig har FHSS generelt lavere gennemstrømning end visse bredbåndsmetoder.

Sameksistens med Wi-Fi er et af de mest praktiske argumenter for AFH. Wi-Fi optager store dele af 2,4 GHz-båndet, og uden AFH ville Bluetooth-forbindelser opleve hyppige pakketab. Ved at udelukke kanaler, hvor Wi-Fi-interferensen er høj, kan Bluetooth og Wi-Fi dele spektret med færre konflikter. eAFH-undersøgelsen viser netop, at informeret kanalgenindlæsning kan opnå 98-99,5 % pålidelighed selv med dynamisk Wi-Fi-interferens og kun 1 % kontroloverhead.

AFH i LE Audio, IoT og fremtidige trådløse systemer

Ifølge en diskussion på Nordic DevZone bruges AFH primært i forbindelse med BR/EDR-supporttilstand. For LE Audio-broadcast beskriver core-specifikationen kanalklassificering og Channel Selection Algorithm #2 på LE-linklaget, men host-kanalklassificering var på det tidspunkt ikke understøttet i den opstrøms Zephyr Bluetooth-hoststack. Det betyder, at AFH-lignende mekanismer findes i LE Audio, men at implementeringen afhænger af hoststacken og ikke kun af controlleren.

I IoT-sammenhæng er AFH afgørende, fordi mange enheder deler det samme 2,4 GHz-bånd med Wi-Fi, Zigbee og andre protokoller. EFR-enheder fra Silicon Labs og nRF5340 fra Nordic Semiconductor understøtter AFH som en del af deres linklagsfunktioner. CDEBYTE og ITU Online har ligeledes materiale om, hvordan AFH bruges i praksis i industrielle og kommercielle produkter. For udviklere betyder det, at AFH ikke er en valgfri optimering, men en forudsætning for stabil drift i tætte radio miljøer.

Fremtidige trådløse systemer vil sandsynligvis bygge videre på de principper, som AFH og eAFH repræsenterer. Når flere enheder og flere protokoller deler spektret, bliver dynamisk kanalklassificering og informeret genindlæsning vigtigere end statiske hoppesekvenser. Samtidig er der en iboende afvejning mellem gennemstrømning og robusthed, som FHSS-arkitekturer altid vil skulle håndtere. For Bluetooth-økosystemet er AFH derfor fortsat en central byggesten.

Hvad er forskellen mellem AFH og fast frekvensspringning?

Fast frekvensspringning bruger en fast sekvens af kanalhop, mens AFH dynamisk tilpasser sin hoppesekvens til det skiftende miljø. AFH identificerer faste interferenskilder og udelukker dem fra listen over tilgængelige kanaler, hvorimod ikke-adaptiv hopning ikke kan undgå konflikter med andre trådløse teknologier. Det er netop denne adaptive adfærd, der gør AFH i stand til at opretholde forbindelsen i miljøer med vedvarende Wi-Fi-trafik.

I praksis betyder forskellen, at AFH kan opretholde en højere pakkeleveringsrate og lavere PER under skiftende forhold. Fast hopning kan kun give forudsigelig adfærd, men ikke tilpasning. Derfor er AFH et krav for TX-effekt over +10 dBm og en forudsætning for pålidelig Bluetooth-kommunikation i tætte bymiljøer og industrielle installationer.

Hvordan aktiverer og konfigurerer jeg AFH i praksis?

I Silicon Labs' Bluetooth SDK installerer du AFH-softwarekomponenten. I nyere SDK'er kaldes sl_bt_init_afh() automatisk inde i sl_bt_init() af kodegeneratoren. I ældre SDK'er kalder du gecko_init_afh() efter gecko_init(&config). For at ændre scanneintervallet definerer du AFH_SCAN_INTERVAL_CONFIG_KEY 7, sætter afh_scan_interval til den ønskede værdi og kalder sl_bt_system_linklayer_configure eller gecko_cmd_system_linklayer_configure.

Husk, at afh_scan_interval er i enheder af 10 ms, så værdien 100 svarer til 1 sekund. En fejning af 40 kanaler tager cirka 10 ms, og effektforbruget ligger på omkring 240 uW. Kanaler med modtaget effekt over -71 dBm blokeres i mindst 8 scanneintervaller, og de lukkes først ind igen efter 8 på hinanden følgende målinger uden interferens. Denne konfiguration giver en god balance mellem reaktionsevne og strømforbrug i batteridrevne IoT-enheder.

Hvilke kanaler og specifikationer gælder for AFH?

AFH arbejder inden for 2,4 GHz ISM-båndet, hvor Bluetooth LE har 40 kanaler og Bluetooth classic havde 79 af 83,5 kanaler. Bluetooth-specifikationen kræver mindst tyve kanaler, når AFH anvendes. Channel Selection Algorithm #2 bruges til BIS PDUs i Bluetooth LE, jf. Vol. 6 Part B i core-specifikationen. Kanalopdateringsproceduren er en del af Bluetooth 4.0-specifikationen og kan kun initieres af central/master-enheden.

For lyd over Bluetooth genererer trafikken typisk 300 kbit/s med dataoverførsel hvert 15 ms. Det stiller krav til, at AFH-fejningen ikke skaber for store forsinkelser. Samlet set er AFH en moden og standardiseret teknik, der har været en del af Bluetooth-specifikationen siden 4.0, og som fortsat udvikles gennem forskning som eAFH.

Ofte stillede spørgsmål om adaptiv frekvensspringning

Hvad er adaptiv frekvensspringning (AFH)?

AFH er en spread spectrum-teknik, der forbedrer modstandsdygtigheden over for radiofrekvensinterferens ved hurtigt at skifte bærefrekvens og undgå overfyldte kanaler. I Bluetooth overvåger forbundne enheder løbende deres miljø og opdaterer et kanalkort, så støjende kanaler udelukkes, og kun kendte gode kanaler bruges.

Hvordan virker adaptiv frekvensspringning i Bluetooth Low Energy?

Ved hvert forbindelseshændelse vælger forbundne enheder en kanal via en kanalvælgelsesalgoritme og hopper til den. Den primære enhed vedligeholder et kanalkort, der klassificerer kanaler som brugte eller ubrugte, deler det med den sekundære enhed og opdaterer det, efterhånden som interferensen ændrer sig, så kommunikationen spredes over 2,4 GHz-båndet.

Understøtter Bluetooth LE Audio adaptiv frekvensspringning?

Ifølge en diskussion på Nordic DevZone bruges AFH primært i forbindelse med BR/EDR-supporttilstand. For LE Audio-broadcast beskriver core-specifikationen kanalklassificering og Channel Selection Algorithm #2 på LE-linklaget, men host-kanalklassificering var på det tidspunkt ikke understøttet i den opstrøms Zephyr Bluetooth-hoststack.

Hvad er forskellen mellem AFH og fast frekvensspringning?

Fast frekvensspringning bruger en fast sekvens af kanalhop, mens AFH dynamisk tilpasser sin hoppesekvens til det skiftende miljø. AFH identificerer faste interferenskilder og udelukker dem fra listen over tilgængelige kanaler, hvorimod ikke-adaptiv hopning ikke kan undgå konflikter med andre trådløse teknologier.

Hvordan aktiverer og konfigurerer jeg AFH i praksis?

I Silicon Labs' Bluetooth SDK installerer du AFH-softwarekomponenten. I nyere SDK'er kaldes sl_bt_init_afh() automatisk inde i sl_bt_init() af kodegeneratoren. I ældre SDK'er kalder du gecko_init_afh() efter gecko_init(&config). For at ændre scanneintervallet definerer du AFH_SCAN_INTERVAL_CONFIG_KEY 7, sætter afh_scan_interval til den ønskede værdi og kalder sl_bt_system_linklayer_configure eller gecko_cmd_system_linklayer_configure. Husk, at afh_scan_interval er i enheder af 10 ms, så værdien 100 svarer til 1 sekund. En fejning af 40 kanaler tager cirka 10 ms, og effektforbruget ligger på omkring 240 uW. Kanaler med modtaget effekt over -71 dBm blokeres i mindst 8 scanneintervaller, og de lukkes først ind igen efter 8 på hinanden følgende målinger uden interferens. Denne konfiguration giver en god balance mellem reaktionsevne og strømforbrug i batteridrevne IoT-enheder.

Hvilke kanaler og specifikationer gælder for AFH?

AFH arbejder inden for 2,4 GHz ISM-båndet. Bluetooth classic opdeler båndet i 79 kanaler med 1600 hop i sekundet, mens Bluetooth Low Energy bruger 40 kanaler, hvoraf 37 er datakanaler. Bluetooth-specifikationen kræver et minimum på mindst 20 kanaler, når AFH anvendes, fordi for få kanaler gør hoppesekvensen forudsigelig og svækker robusthed og sikkerhed. I Bluetooth LE bruges Channel Selection Algorithm #2 til BIS PDUs, jf. Vol. 6 Part B i core-specifikationen. AFH er desuden et krav for at bruge TX-effekt over +10 dBm. Disse grænser sikrer tilstrækkelig kanaldiversitet og sameksistens med Wi-Fi og andre teknologier i det åbne bånd.