sâmbătă, ianuarie 05, 2008

Cum să compari datele din două sesiuni GPS.

Să presupunem că ai două sesiuni de măsurători GPS şi vrei să le compari rapid, din punct de vedere al suprapunerii datelor de la sateliţi. Să mai presupunem că vrei să faci asta folosind programe opensource.

Ai nevoie în primul rând de excelentele aplicaţii de la GPS Toolkit (găzduit şi la Sourceforge) şi apoi de GnuPlot.

Presupuneri. Din motive de comoditate exagerată, voi face câteva presupuneri:
  1. Datele sunt în format RINEX. Dacă nu le aveţi aşa, în suita GPSTk se găsesc tot felul de conversii din diverse formate comune spre RINEX.
  2. Datele sunt numai de la sateliţi GPS. Dacă aveţi măsurători care includ GLONASS va trebui să ajustaţi graficul corespunzător.
  3. Mediul de lucru este asemănător Unix (adică acceptă redirectări şi pipe-uri)
  4. Utilizatorul nu este idiot. Deşi este destul de sigur să faceţi copy/paste codului de mai jos, în cele mai multe situaţii va trebui să adaptaţi diverşi parametri pentru problema specifică. Presupun că se poate scrie relativ uşor un script care să ia în calcul diverse variabile, aşa că dacă sunt voluntari...

Pregătirea datelor. Din fişierele cu date va trebui să ne extragem observaţiile satelitare într-un format lizibil. Vom folosi programul RinexDump din GPSTK astfel:

$ RinexDump fisier1.07o --num --format "%d-%m-%Y,%H:%M:%S" | sort -g -k 2 > sat1.dat

Suntem nevoiţi să folosim --format pentru a scoate timpul într-un format lizibil de către gnuplot, iar --num scoate datele strict numeric pentru a le putea folosi în grafic. De asemenea, este de menţionat că data (%d-%m-%Y) nu este necesară dacă nu avem observaţii care se întind pe mai multe zile, iar sort nu modifică cu nimic graficul, dar ajută la gruparea observaţiilor pe sateliţi pentru a putea fi analizate ulterior.

Plotarea graficului. Cu orice editor de text ASCII scriem scriptul de mai jos şi-l salvăm ca satdata.gnuplot (să zicem):

#Il dam ca poza
set term png enhanced size 1024,768 notruecolor

#Titluri si indicative
set title "Vizibilitatea satelitilor"
set ylabel "Numarul satelitului"
set xlabel "Ora"

#Pe axa X (orizontal) avem timp, deci preluam datele corect...
set xdata time
set timefmt "%d-%m-%Y,%H:%M:%S"

#...si afisam corespunzator
set format x "%H:%M\n%d.%m" #ora pe un rand si data mai jos
#Punem un marcaj la fiecare 2h
set xtics "01-01-2000,00:00:00", "01-01-2000,02:00:00"
set mxtics 4 #divizam in patru (la fiecare 1/2h)

#Pe axa Y (vertical) avem numarul satelitului
set format y "G%g" #Satelitii GPS au denumirea de forma G1, G2...
set ytics 1,1,32 #...si incep de la unu pana la 32, inclusiv
set mytics 0 #nu avem nimic intermediar
set yrange [0:33]

set key box outside #punem legenda afara din grafic, sa nu incurce
set grid ytics #o mica grila
set grid xtics

#Graficul propriu-zis
plot 'sat1.dat' using 1:($2+0.2) title 'sat1.dat' with points 1,\
'sat2.dat' using 1:($2-0.2) title 'sat2.dat' with points 14

Atenţie la numele fişierelor cu date care sunt scrise direct în script, dacă le modificaţi, modificaţi-le şi mai sus. Acestea fiind spuse, nu ne rămâne decât să:

$ gnuplot satdata.gnuplot > grafic.png

Ieşirea este în format PNG şi este scrisă pe ieşirea standard (stdout). Acestea fiind spuse aştept sugestii şi completări.

Notă: Nu am testat decât pe un sistem Linux, dar teoretic ar trebui să meargă şi pe Windows (folosind cygwin).

Un comentariu:

pretzeL spunea...

rock bottom...

Trimiteți un comentariu

Ţineţi minte, ne plac mai mult comentariile favorabile.