Varje GPS-satellit sänder kontinuerligt ut radiosignaler på två frekvenser: 1575,42 Megahertz och 1227,60 Megahertz. Skälet till att de sänder på två frekvenser samtidigt är att olika frekvenser påverkas olika av atmosfäriska störningar. Har man då två signaler av olika frekvens kan man jämföra dem och på så sätt räkna ut och korrigera störningarna.
På den första frekvensen, 1575,42 Megahertz, som kallas L1, ligger både den noggranna P-koden och den icke fullt så noggranna C/A-koden, samt navigationsdata (uppgifter om satelliternas banor, om någon satellit blivit avstängd och liknande). På den andra frekvensen, L2 (1227,60 Megahertz) ligger enbart P-koden och navigationsdata. För att en mottagare skall kunna utnyttja en frekvens måste den i förväg kunna koden som sänds ut. P-koden brukar krypteras så att civila användare inte skall hitta den. Då kan de alltså bara hitta L1-frekvensen som ju både bär på den okrypterade C/A-koden och den krypterade P-koden, men inte L1-frekvensen som bara bär på den krypterade P-koden. Och eftersom civila användare inte kan hitta L2 kan de inte räkna ut de exakta atmostfäriska störningarna.
P-koden är en mycket lång serie databitar som endast upprepas en gång per vecka. En ny bit sänds ut var tiomiljondels sekund (Som en jämförelse kan nämnas att processorn i en Pentium 200-PC hanterar sina databitar tjugo gånger snabbare). P-koden krypteras genom att XOR-adderas med en hemlig kod, Y-koden, så att bara godkända användare kan utnyttja den.
Denna sekvens av bitar används för att modulera L1-frekvensen: Varje gång biten är en nolla inverteras signalen, och varje gång den är en etta släpps signalen fram omodifierad.
Bitsekvensen i P-koden är unik för varje satellit. När mottagaren har identifierat koden, har den sådeles även fastställt från vilken satellit den kommer.
L1-signalen
P-koden.
L1-signalen efter att den modulerats av P-koden
Skälet till att man skickar en bestämd bitsekvens som inte upprepar sig är att mottagaren då kan se exakt var i bitsekvensen den inkommande signalen ligger, och jämföra det med sin egen version av bitsekvensen. På så sätt kan den räkna ut hur långt efter satelliten är, det vill säga hur lång tid signalen har tagit på sig för att färdas från satelliten till mottagaren. Och eftersom mottagaren vet hur fort radiosignalen färdas (den färdas med ljusets hastighet, ca 300000 kilometer per sekund) så kan den räkna ut avståndet från mottagaren till satelliten.
C/A-koden är betydligt kortare än P-koden (bara 1023 bitar lång) och sänds ut tio gånger långsammare. På grund av detta blir mätningar gjorda enbart med C/A-koden inte lika exakta som mätningar gjorda med P-koden. Dessutom kan C/A-koden göras avsiktligt felaktig, så att felet blir ännu större.
Liksom P-koden är C/A-koden unik för varje enskild satellit, och den moduleras på samma sätt (genom att invertera L1 varje gång C/A-koden är en nolla)
CA-koden
Den fördröjda L1-signalen
Den fördröjda L1-signalen efter att den modulerats av CA-koden
Iden bakom C/A-koden är påskynda positionsbestämningen. Mottagaren kan använda C/A-koden, som är lättare att uppfatta, för att lokalisera signalen från en viss satellit och kan därefter övergå till att dekryptera P-koden och ge en mer noggrann positionsbestämning.
Dessutom är C/A-koden avsedd för civila tillämpningar. Om du går ut och köper en GPS-mottagare i handeln så är C/A-koden den enda den kan utnyttja.
Just innan signalerna går in i satellitens L1-sändare blandas P-koden och C/A-koden med en viss fördröjning för att man senare skall kunna separera dem igen. Hade de varit i fas när de blandades hade det varit omöjligt att se skillnad på dem, då de sänds på samma frekvens.
Den slutliga utsignalen pä L1-frekvensen