Nick, Jeff,

Thank you for the detailed feedback. I am indeed doing multilateration on ADS-B 
signals, will investigate procuring a GPSDO for accurate timing.

The way I understand it, once I’m using the GPSDO to acquire an accurate 
timestamp the offset added to each message will still be at a minimum 500ns (at 
2Msps). Is there anything that can be done to decrease this amount?

Thanks,

Adam Gorski
Virginia Tech Applied Research Corporation (VT-ARC)
Wireless Communications Systems Engineer
410-818-3188

From: Nick Foster <[email protected]>
Sent: Sunday, June 21, 2020 7:01 PM
To: Adam Gorski <[email protected]>
Cc: [email protected]
Subject: Re: Modifying Offset Stream Tag

I think you are misunderstanding what the tag offset represents. The timestamp 
is coming from datetime.datetime.utcnow() in init(), and the tag offset added 
to that is just the offset (samples since the flowgraph started) of the burst 
divided by the sample rate. Because the burst offset is in samples and not 
seconds, its resolution is limited to 1/samp_rate. Thus, at 2Msps, the 
resolution is limited to 500ns. In any case, Gnuradio knows nothing at all 
about time -- it only knows about samples.

To play Clippy for a bit, it sounds like you're trying to do multilateration on 
ADS-B signals. The approach being used in gr-adsb will not work for this. You 
cannot use the host clock (i.e., datetime) because its accuracy is nowhere near 
what is required (if you're using PTP/IEEE-1588 with a local timeserver you'll 
be closer, but it will still be a mess). You need to synchronize the radio to 
GPS time either using a built-in GPSDO, or an external one.

If the radio is not synchronized to a GPSDO, then instead of one problem you 
will have two: the initial time (since it's CPU time) will be wrong, and the 
time offset will drift over time (since the sample rate of the radio will not 
be synchronized).

Nick

On Sun, Jun 21, 2020 at 2:56 PM Adam Gorski 
<[email protected]<mailto:[email protected]>> wrote:
Hello community,

I am currently using an out of tree module (gr-adsb) with GNU Radio 3.7 that 
captures received ADSB messages. I would like to change the timestamp 
resolution for each message received from microseconds to nanoseconds. The 
timestamp of each message is declared in the demod.py (attached) by adding the 
start time of the block to the offset stream tag (line 111 in demod.py).

The offset stream tag is not declared within the out of tree module, but 
somewhere in the GNU Radio source code. There are a handful of python files 
within the GNU Radio source code that include the offset tag, however I believe 
the declaration may lie in one of the following files (these have essentially 
the same code):

  *   ~/gnuradio/gnuradio-runtime/python/gnuradio/gr/packet_utils.py
  *   ~/gnuradio/gr-digital/python/digital/utils/tagged_streams.py

I would like to declare the offset tag with a nanosecond resolution. I have 
been able to accomplish this type of declaration with the demod block start 
time by calling a c function within a shared library, however I’m unsure how to 
do the same within GNU Radio source code as any sort of test print statements 
within the two files listed above never gets displayed in the flowgraph output.

My questions:

  *   Is one (or both) of the files indicated above the correct file to modify?
  *   How do I test modifications to GNU Radio source code files?
  *   Are there other methods of changing the offset tag resolution I should 
consider?

The c function and shared library code is as follows. I chose this way due to 
the flowgraph code builder in GNU Radio 3.7 using python2; if I used a python3 
function I believe I’d have to rewrite the flowgraph code builder in python3.

Time_ns.c:

#include <stdio.h>
#include <time.h>

long long time_ns() {
    struct timespec t0;
    clock_gettime(CLOCK_REALTIME, &t0);
    long long ns = (t0.tv_sec * 1000000000) + t0.tv_nsec;
    return ns;
}

int main()  {
  return 0;
}

Next use this command to create a shared library:
cc -fPIC -shared -o time_ns.so time_ns.c

Ns.py:

from ctypes import *
so_file = '~/time_ns.so'
c_time_ns = CDLL(so_file)
c_time_ns.time_ns.restype = c_longlong
return c_time_ns.time_ns()

Thanks,

Adam Gorski
Virginia Tech Applied Research Corporation (VT-ARC)
Wireless Communications Systems Engineer
410-818-3188

Reply via email to