Delvis baserat på en artikel av Tom Clark (W3IWI) som heter ”How a GPS Receiver Gets a Lock”.
En GPS-mottagare som skall låsa på en satellitsignal för att kunna beräkna sin position behöver utföra en två-dimensionell sökning efter signalen för att kunna hitta den. Den första dimensionen är i tiden — signalstrukturen hos en GPS signal består av en 1023 bitar långt pseudo random number (PRN) i en sekvens som sänds ut med en hastighet av 1.023 megabit/sekund, dvs hela sekvensen sänds en gång per millisekund.
![DSC_8958](http://farm1.static.flickr.com/26/45540646_18b519ed8a.jpg)
För att kunna låsa i den här dimensionen måste mottagaren ställa in en intern klocka till det korrekta av alla 1023 möjliga värden inom en millisekund dvs timeslots (tidluckor) som kan innebära starten på telegrammet. Det görs som regel genom att man provar sig fram med möjliga värden och försöker hitta det som stämmer. De flesta mottagare behöver ett par millisekunder för att avgöra om en viss timeslot är den rätta eller inte så detta innebär att denna sökning tar ungefär 1-2 sekunder per satellit.
Den andra dimensionen är frekvens. Mottagaren måste korrigera för dopplerskift genom att försöka finjustera mottagningsfrekvensen till signalens frekvens och doppleravdriften. Genom anledningar som vi inte går in på här — men de involverar ovan nämna 1 ms timeslot samt en gammal kändis som hette Nyquist — så är de grövsta möjliga stegen man kan ta när man försöker finjustera signalen 500 Hz.
Mottagarens oscillator är dock oftast inte bättre än ± 10 kHz ungefär och det innebär att ca 20 olika frekvensinställningar kommer behöva provas av. Också denna process görs för varje satellit som skall användas och därför är den initiala proceduren för att erhålla en låsning ganska tidsödande och arbetsintensiv. Det är inte förrän de senaste åren som man faktiskt lyckats bygga relativt strömsnåla mottagare, delvis pga detta.
Den vanligaste strategin för att så snabbt som möjligt få låsning på satelliterna är att man börjar med att välja en oscillatorfrekvens baserat på vad man vet om sin position just nu. Den behöver inte vara exakt, några grader fel är inget problem. Detta baseras på att man antingen sparar ner positionen man hade sist man hade låsning eller helt enkelt frågar användaren var han befinner sig ungefär. Åtminstone vilken världsdel. Sedan gäller det att veta något om var satelliterna befinner sig och detta data finns också lagrat sedan föregående gång och nu behöver vi veta vad klockan är ungefär så det brukar också mottagaren kunna fråga efter.
När vi vet detta kan vi beräkna den apparenta hastigheten satelliterna bör ha och därmed välja en hygglig initial gissning för dopplerskiftet och sedan kan vi börja prova vilken time slot som verkar vara rätt. Då har vi 1023 kombinationer kvar att testa och sedan kanske vi behöver ändå skifta dopplerkompenseringen något eller några steg så i runda slängar behöver vi göra ett par tusen tester och de tar några ms var att göra. En sak till behöver vi också kontrollera och det är våran egen referensoscillators fel. Vi har kanske en uppskattning sedan tidigare kontakter med satelliterna men den driver med temperatur och kanske andra faktorer så vi måste eventuellt prova ytterligare kombinationer för att säkra att vi inte missar signalen vi letar efter.
Så mottagaren börjar på en kvalificerad gissning, hittar den ingenting provar den nästa time slot och så vidare. När den provat alla 1023 möjligheter lägger vi på en offset på vår referensoscillator baserad på den uppskattade felvisningen och nästa steg i vår dopplertabell som vi kan använda oss av. Sedan är det bara att testa ytterligare 1023 time slots.
Det här gäller förstås när vi vet något om läget. När vi gör en helt kall start och inte vet någonting måste vi gå igenom initialsökläget. Där får vi plötsligt väldigt många kombinationer att titta igenom och det här läget kan vi hamna i om vi trots vår kvalificerade gissning enligt tidigare inte hittar någon signal. Det kan hända att mottagaren har rest en längre sträcka, det kan hända att den har aktiverats inomhus där mottagningen är dålig, det finns inget sätt för oss att veta detta utan vi får helt enkelt prova kombinationer tills mottagaren hittar något som den känner igen som ett GPS-telegram.
Så fort mottagaren börjar hitta en signal som verkar stämma så etableras två stycken tracking loops eller faslåsningsslingor. En är en faslåst slinga i frekvensdomänen som skall försöka spåra satellitens doppler och justera mottagaren efter detta. Den andra är den tidslåst slinga som håller fast vid just denna kanals time slot eller tidslucka. Så målet är att vi skall alltid veta fasen och vilken kod signalen använder.
Så fort detta villkor har uppfyllts så börjar vi extrahera data ur GPS-telegrammet som skickas från satelliten. Telegramstrukturen innehåller ett 1500 bitar långt meddelande som skickas med 50 bitar/sekund och det tar 30 sekunder att skicka ett helt telegram. De flesta mottagarna kräver att man tar emot ett fullt obrutet telegram innan man får ut själva datat vilket betyder att om man kommer ”in i” ett redan sändande telegram kan det ta upp till 30 s innan man får samma telegrams start igen, sedan måste man läsa in det telegrammet och det kan då ta upp till 60 s att få det första telegrammet ”helt” ur mottagaren. I snitt sker detta alltså på ca 45 s för de flesta mottagare.
För att få en rå positionsfix i 2D krävs det att mottagarens klocka också går korrekt. Detta kan man få fram genom att man lyssnar på telegrammen från tre olika satelliter. Man kan då i ett enkelt ekvationssystem korrigera bort sitt eget fel och det förbättras om man väljer de satelliter som ligger högst i rymden. Efter att man har fått dessa första 3 satelliter kan man börja visa en position men fortfarande är noggrannheten oftast inte så bra, en upplösning på 25-50 meter eller så brukar man kunna förvänta sig i det här läget.
När man nu så har tre stycken katter i säcken kan man fortsätta och leta satelliter. Varje satellit man hittar och får lås på ger ytterligare tillskott till datamängden och minskar felet och man kan mer och mer korrigera sin egen klocka och använda sig av medelvärdesbildning mellan de olika satelliternas telegram och därmed också kunna öka noggrannheten ännu mer. Det tar ungefär 45 s att hitta varje satellit för varje mottagare som arbetar med att leta.
Varje satellit skickar också i sitt telegram en förkortad almanacka som ger information om satellitbanorna, eventuella deviationer som förekommer och detta lagrar de flesta mottagare pliktskyldigt för att underlätta låsningen nästa gång. Ju längre man lyssnar på fler satelliter desto mer komplett blir almanacksdatat och det blir då lättare att låsa när man startar upp sin GPS-mottagare igen. Har den legat avslagen länge — ett par månader eller så — kan det hända att almanackdatat åtminstone för några satelliter inte stämmer längre så väl. Almanackdatat tar upp ca 25 av de 30 sekunder som varje satellits telegram sänds på och det tar totalt 12 minuter och 30 sekunder att få ner en full uppsättning almanacksdata för hela nätverket. Därför är det en bra ide att alltid låta sin GPS-mottagare vara igång en kvart eller så efter den fått låsning.
![gps-status gps-status](/wp-content/uploads/2009/09/gps-status.jpg)
Har mottagaren helt felaktig eller saknar almanacksdata finns inget annat sätt än att göra en all sky search vilket kan ta 20 minuter eller mer. Då provar man slaviskt kombination efter kombination tills man hittar satelliterna så man kan få ner almanacksdatat och därmed börja bygga upp den information man behöver för att kunna erhålla låsning inom ett par minuter. Det är mycket ovanligt att mottagare idag startar i det här läget. Det finns nämligen vissa grundförutsättningar som är så pass vanliga att man direkt kan utesluta ett antal testfall man aldrig behöver göra. Och frågar man dessutom användaren ungefär var han befinner sig och vad klockan är kan man också dra vissa slutsatser baserat på grundförutsättningarna för GPS-systemet och dess satelliters grundbanor.
När man har hittat fler än 3 satelliter kan man även få en 3D-låsning vilket innebär att man kan börja kalkylera vilken höjd man befinner sig på. Denna kalkyl är dock inte riktigt lika noggrann som positionen, man brukar säga att felvisningen kan vara upp till 3 ggr så stor på höjden som den beräknade positionsfelet uppgår till.
Moderna GPS-mottagare som sitter i mobiltelefoner fuskar ordentligt. Om de har täckning går de helt enkelt ut på mobilnätet och kontrollerar vad klockan är. Många operatörer skickar också en grov koordinat till mobilen från basstationen (det är basstationens egen koordinat som skickas) och då har ju mobilen redan en hel del information att börja arbeta med när det gäller att hitta satelliter.
Det skall också sägas att mycket av det ovan beskrivna när det gäller att hitta satelliter och få låsning sker parallellt. De flesta mottagare på marknaden idag har åtminstone 12 parallella mottagare så de kan söka av de möjliga kombinationerna 12 ggr så snabbt som de tidiga enkanaliga mottagarna.
Dessutom har man lagt till ett nytt system som heter EGNOS[1] här i Europa med ytterligare satelliter som via markstationer skickar ut kompletterande deviationsdata. I USA har man en motsvarighet som kallas WAAS[2] Har man en mottagare som klarar EGNOS-signalen (och den är tillräckligt bra för att kunna användas) så får man ytterligare kompletterande information och noggrannheten på mottagaren kan då bli 2-3 meters felvisning vilket är helt otroligt egentligen.
För bilnavigation behöver man som regel en noggrannhet på runt 15 meter, blir den sämre kan det bli svårt att ha framförhållning och för den som går i skog och mark kanske man inte ens behöver ha bättre än 100 meters felvisning medan på sjön vill man gärna ha 5 meter eller bättre för att undvika en grynna.
[1] EGNOS betyder European Geostationary Navigation Overlay System alltså det Europeiska systemet för geostationär navigationsdata.
[2] WAAS betyder Wide Area Augmentation Service som betyder ungefär service för förbättning av vidsträckt område och det är underförstått att det är navigationsdata man försöker förbättra.