ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알기 쉬운 GPS 측량 :: 4장 GPS 관측값 및 수신기 위치 결정
    항법연구실/GPS와 데이터 2026. 1. 18. 23:04

    GPS는 사용자에게 단방향으로 지구에 정보를 뿌린다. 이 정보는 전파 형태로 지구에 도달하며 이 정보를 이용하기 위해 지난 3장에서 파장과 주파수, 그리고 이 전파 속에 들어있는 정보들에 대해서 알아봤다. 

     

     

    GPS관측과 내 위치 찾기 

     

    신호를 숫자로 바꾸자 ! 

     

    GPS 수신기는 GPS위성으로부터 수신된 신호(반송파 자체의 위상 정보 + 반송파에 실려 온 코드 정보)로 위성과 수신기 사이의 거리정보를 추출한다. 수신된 신호로부터 얻은 거리 정보를 의사거리(Pseudorange, 말 그대로 '가짜' 값이다. 여기에는 수많은 오차가 함께하고 있기에 보정을 통해 '진짜와 가까운' 값을 구해야한다.)라고 하며 반송파를 이용한 위상 의사거리(phase pseudorange), 코드를 이용한 코드 의사거리(code pseudorange)로 분류한다. 

     

    코드 의사거리와 반송파 의사거리는 서로 성격이 다르다. 코드는 정확도는 낮은 반면 빠르게 '어디쯤' 있는 지 알 수 있다. 

    반송파 의사거리는 정확도는 높은 반면 처음 위성과 수신기 간의 거리를 구하는 것이 시간이 오래 걸린다. 처음부터 '어디쯤'있는지는 알기 어렵다. 서로 상호보완적인 관계가 있는데 코드는 대략적인 거리를 알고 반송파 의사거리는 정확한 위치 변화를 알 수 있다. 

     

     

    1. 코드 의사거리 

    시간차를 이용하는 코드 의사거리는 패턴 매칭을 찾는 숨은 그림 찾기와 비슷하다. 위성과 수신기는 서로 약속된 암호문인 PRN코드를 동시에 생성한다. 하지만 위성에서 쏜 신호는 지구까지 오는 데 시간이 걸리니 수신기가 받은 신호는 수신기가 만든 신호보다 조금 뒤에(지연되어) 있다. 

    출처 : 알기 쉬운 GPS측량

    더보기

    '동시에'의 의미 

    필자는 공부를 하며 '동시에' 생성한다는 말이 이해가 잘 되지 않았다. 

    위성과 수신기가 통신을 하기 위해 서로 신호를 주고 받고 떨어진 거리만큼 시간차가 발생하니 이를 통해 거리를 아는건데 어떻게 동시에 코드를 생성할 수 있지? 라는 의문이 들었다.

     

    결론은 수신기가 위성 발신 시점을 미리 아는 것이 아니라 수신기가 일단 코드를 계속 만들고 위성에서 온 신호와 겹쳐질 때까지옆으로 밀어보면서 이때 쐈구나 ! 라고 역으로 찾아내는 것이다.

    이론적으로는 위성과 수신기 시계가 완벽히 동일할 때 매 정각마다 코드를 시작하므로 '동시'라고 표현한다. 

    그리고 현실적으로는 수신기는 일단 자기 시계 기준으로 코드를 만들고 위성 신호와 비교하면서 그 차이를 알아내는 과정이다. 

     

    노래에 비유해볼 수 있는데 

    위성과 내가 동일한 악보(PRN코드)를 가지고 위성은 하늘에서 노래를 부르고 나는 내 방에서 노래를 부른다. 

    하지만 위성의 목소리가 내 귀에 들릴 땐 박자가 조금 늦어져있는 상태일 것이다. 그럼 나는 위성과 함께 노래를 부르기 위해 노래를 잠시 멈췄다가 위성의 박자에 맞춰 다시 시작한다. 이 때 멈췄던 시간만큼이 전파가 날아온 시간이다! 

     

    즉, 수신기가 위성의 발신 시점을 알고 PRN코드를 생성하는 것이 아니라 맞춰보고 찾아낸다는 것이다. 

     

    2. 반송파 의사거리 

     

    반송파는 수신기가 위성 신호를 수신 시작하는 시점에서 위성과 수신기 간에 몇 개의 파장이 있는지를 모호정수로 두고 위상차를 계산한다. 위상차를 비교하여 이전 시점과의 거리 변화를 알 수 있다. L1파장이 19cm이므로 코드보다 훨씬 정밀하게(오차범위 mm~cm) 위치 변화를 감지 할 수 있다는 장점이 있다. 

    반송파를 이용할때는 꼭 모호정수에 대한 개념을 알아야하는데, 모호 정수(N)처음 수신 시점에서의 GPS 위성과 수신기 사이의 반송파 파장의 개수를 의미한다. 이 값은 이후 위성을 계속 추적하는 동안 변하지 않는 상수(constants)로 남아있게 된다. 만약 신호의 끊김이나 단절 현상인 *Cycle sleep 또는 loss of lock 현상이 발생하지 않는 한 다시 측정할 필요가 없지만 이러한 현상이 나타난다면 모호정수(N)을 다시 측정해야한다. 

     

     

    더보기

    * Cycle sleep(끊김): 신호를 계속 잡고 있지만 일시적 장애(나무, 건물 사이, 전리층 교란 등)가 발생하여 파장 개수를 세다가 박자를 놓쳐 툭 튀는 현상 

    loss of lock(단절) : 신호를 완전히 놓친 경우로 터널 진입, 지하 주차장, 수신기 전원 꺼짐 등으로 발생. 신호가 끊겨서 처음부터 다시 잡아야함 

     


    데이터의 표준, RINEX : Receiver Independent EXchange format 

    이름에서 알 수 있듯, 수신기(Receiver)에 관계없이(Independent) 사용하기 위한 데이터이다. 

    RINEX는 GPS/GNSS 수신기에서 기록한 관측데이터와 항법 데이터를 표준화된 교환 포맷으로 ASCII형태로 되어있어 메모장에서도 쉽게 꺼내 읽을 수 있다. 

     

    RINEX파일은 .n확장자의 ephmeris 파일(navigation Data files: NAV files)과 .o확장자의 raw measurement(observation file)로 구성되어있다. 

    - n 파일 : 위성 궤도 정보 포함 (그래서 궤도력을 의미하는 ephmeris file) 

    - o 파일 : 수신기에서 관측한 관측값 (그래서 raw data) 

     

    observation file 

    관측 데이터를 살펴보면 메타 데이터의 역할을 하는 Header와 실제 데이터가 담겨있는 Body로 나눌 수 있다. 

     

    header :

    관측자, 관측일시, 관측 기관, 관측소, 수신기, 안테나 정보, 수신기의 대략적인 위치 정보(XYZ), 윤초, 그리고 중요한 어떤 관측값들이 있는지(관측 타입) 등의 정보가 포함되어 있다. 

     

    여기서는 L1 L2 L5 C1 P1 P2 C5 코드와 반송파 정보가 담겨있으며 바디에 똑같은 순서대로 정보가 나열된다. 

     

     

    Body :
    실제 관측된 데이터가 적히는 곳이다. 

     

    이 데이터에서는 헤더에서 L1 L2 L5 C1 P1 P2 C5라고 했으므로,

    #sat L1 L2 L5 C1  P1   
    G25 123441189.849 36187926.57445 92180105.667 23490051.086 23490064.719 ... 
    R20 119713887.049 93110672.688   22387083.094 107383136.520 ...
    G24 ... .. .. .. .. ..

    이런식으로 정리할 수 있다. L1,L2,L5와 같은 반송파를 기록할 때는 초기화 이후 파장의 개수가 얼마나 변했는지를 기록하고, 

     C1, C2, P 같이 코드를 기록할 땐 의사거리를 기록한다. 의사거리를 통해 GPS위성이 약 2만 km정도 떨어져있음을 확인할 수있다. 

     


    내 위치 계산하기(코드 거리 기반) 

    코드기반 의사거리를 측정하여 수신기위치를 결정할 수 있는데, 이는 테일러 시리즈와 최소제곱법(least square)을 활용하여 복잡한 식을 푼다. 이 내용을 서브주제로 다루기엔 양도 많고 어려워서 MATLAB코드와 어떤 내용인지 따로 담아보겠다. 

     


    결과물 확인하기(GPX & NMEA) 

    GPS데이터를 여러 포맷으로 활용하여 나타낼 수 있는데 교재에 나온 것이 바로 GPX와 NMEA 프로토콜이다. 

     

    GPX : the GPS eXchange Format

    GPS데이터를 여러 어플리케이션 및 인터넷에서 활용하기 쉽게 XML데이터 형식으로 만들어진 포맷이다. 

    단순히 위도, 경도를 리스트로 나타내며 관측값은 포함하지 않고 최종 위치 결과값만 포함하고 있기 때문에 경로에 많이 사용된다. 

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    
    <gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="Oregon 400t" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">
      <metadata>
        <link href="http://www.garmin.com">
          <text>Garmin International</text>
        </link>
        <time>2009-10-17T22:58:43Z</time>
      </metadata>
      <trk>
        <name>Example GPX Document</name>
        <trkseg>
          <trkpt lat="47.644548" lon="-122.326897">
            <ele>4.46</ele>
            <time>2009-10-17T18:37:26Z</time>
          </trkpt>
          <trkpt lat="47.644548" lon="-122.326897">
            <ele>4.94</ele>
            <time>2009-10-17T18:37:31Z</time>
          </trkpt>
          <trkpt lat="47.644548" lon="-122.326897">
            <ele>6.87</ele>
            <time>2009-10-17T18:37:34Z</time>
          </trkpt>
        </trkseg>
      </trk>
    </gpx>

     

    출처 : 위키피디아

     

    NMEA : National Marine Electronics Association 

    라즈베리파이 등을 이용하여 GPS모듈에서 실시간으로 위치정보를 받아 사용하는 사용자를 위해 개발업무용으로 만든 GPS 인터페이스 프로토콜이다. 

    GGA, GSA, GSV, RMC 등은 어떤 데이터를 담고 있는지 종류를 나타낸다. 

    자세한 정보는 이전 포스팅에서 확인 ! ! 

     

    GPS raw 데이터 분석 - NMEA(GPGGA, GRPMC)

    NMEA란 NMEA(NMEA 0183)은 시간, 위치, 방위 등의 정보를 전송하기 위한 규격이다. 미국 NMEA(The National Marine Electronics Association)에서 정의해두었다. NMEA약어에서 알 수 있듯 항해 데이터를 위한 규격으로

    0lrlokr.tistory.com

     


Designed by Tistory.