Tuesday 14 May Streaming Data and Observations - SETIatHCRO/grhack GitHub Wiki

Antenna 4J - Streaming 104 MHz BW UDP

Switch:

Source IP:

Destination IP and Port:

Antenna 1A - (sma) on Tuning C

Observing Cycles every hour Time logs show that changing sources takes about 90 seconds. Changing sources and tuning takes about 150 seconds, e.g., data for 0329+54 are good at about XX:12:30.

Time Source Center Tuning Frequency
XX:00 GPS Satellite 1570 MHz
XX:10 0329+54 1400 MHz
XX:20 Crab Pulsar 1400 MHz
XX:30 Cas A 1400 MHz
XX:40 W3OH 1400 MHz
XX:50 W3OH 6660 MHz

Beamformer Packet Data Format

Data are streamed in 4160 byte packets consisting of a 64 byte header (described below) and 4096 bytes of time-series payload, as 2048 complex time samples (8br+8bi). The packet rate is 51.2 kHz, for a total sample rate of 51.2 kHz * 2048 = 104.8576 MHz. Streaming data look like:

<64 byte header><4096 bytes data><64 byte header><4096 bytes data><64 byte header><4096 bytes data>....

Beamformer Packet Header

typedef struct _packetHeader
{
        uint8_t group, version, bitsPerSample, binaryPoint;
        uint32_t order;
        uint8_t type, streams, polCode, hdrLen;
        uint32_t src;
        uint32_t chan;
        uint32_t seq;
        double freq;
        double sampleRate;
        float usableFraction;
        float reserved;
        uint64_t absTime;
        uint32_t flags;
        uint32_t len;
}PacketHeader;

Detail on Packet Header

[uint8] group   Packet Group "PTG"
        # SONATA Definition (March 22, 2010)
        # Name:        packet group (ATA,Casper,...)
        # Size bytes:  1
        # Data type:   unsigned int (used as enum)
        # Values:      0 -> 255 (0 = ATA/Sonata)
        # Default:     0

[uint8] version  Packet Version "PTV"
        # SONATA Definition (March 22, 2010)
        # Name:        packet version
        # Size bytes:  1
        # Data type:   unsigned int
        # Values:      0 -> 255  (0 = first version)
        # Default:     0
        # Note:        Incremented by 1 for each header change

[uint8] bitsPerSample "BPS"
        # SONATA Definition (March 22, 2010)
        # Name:        bits per sample
        # Size bytes:  1
        # Data type:   unsigned int
        # Values:      8 or 16
        # Default:     8
        # Note:        For complex values, this refers to only 1/2 of the sample.
        #              E.g., a "16 bit complex sample" occupies 32 bits of space.

[uint8] binaryPoint    Binary Point Position "BPP"
        # SONATA Definition (March 22, 2010)
        # Name:        binary point position
        # Size bytes:  1
        # Data type:   unsigned int
        # Values:      0 -> 255
        # Default:     0

[uint32] order     Endian Magic Number "EMN"
        # SONATA Definition (March 22, 2010)
        # Name:        endian magic number
        # Size bytes:  4
        # Data type:   unsigned int
        # Values:      0xaabbccdd
        # Default:     same
        # NOTES:
        # This holds the endian magic number header value

[uint8] type       Packet Type "PT"
        # SONATA Definition (March 22, 2010)
        # Name:        packet type (payload data type)
        # Size bytes:  1
        # Data type:   bit mask
        # Values:      Bit 0: (0=integer / 1=float)
        #              Bit 1: (0=unsigned / 1=signed)
        #              Bit 2: (0=real / 1=complex)
        #              Other fields TBD.
        # Default:     0x06 (integer, signed, complex)

[uint8] streams     Number of Streams "NS"
        # SONATA Definition (March 22, 2010)
        # Name:        number of streams
        # Size bytes:  1
        # Data type:   unsigned int
        # Values:      1 -> 255
        # Default:     1

[uint8] polCode    Polarization Code "PC"
       # SONATA Definition (March 22, 2010)
        # Name:        polarization code
        # Size bytes:  1
        # Data type:   unsigned int (used as enum)
        # Values:      0 = LCIRC, 1 = RCIRC, 2 = XLINEAR, 3 = YLINEAR
        # Default:     2

[uint8] hdrLen
        # SONATA Definition (WCB April 16 2010)
        # Name:        header length (samples)
        # Size bytes:  1
        # Data type:   unsigned int
        # Values:      0 -> 255
        # Default:     Version 1.7 Packet Header: 64
        # Notes:       Indicates the length of the header

[uint32] src      data source "DS"
        # SONATA Definition (March 22, 2010)
        # Name:        data source
        # Size bytes:  4
        # Data type:   unsigned int (used as enum)
        # Values:      0 = beamformer, 1 = channelizer, other values TBD
        # Default:     0

[uint32] chan    Channel Number "CN"
        # SONATA Definition (March 22, 2010)
        # Name:        channel number
        # Size bytes:  4
        # Data type:   unsigned int
        # Values:      0 - 255
        # Default:     0

[uint32] seq     sequence number "SN"
        # SONATA Definition (March 22, 2010)
        # Generated internally by FPGA
        # Name:        sequence number
        # Size bytes:  4
        # Data type:   unsigned int
        # Values:      0 - max(uint32)
        # Default:     0, at startup
        # Notes:       Sequence number begins at 0. At 51,200 Hz packet rate, rolls over every 23.3 hours

[double] freq        Sky Frequency "SF"
        # SONATA Definition (WCB April 16 2010)
        # Name:        frequency
        # Size bytes:  8
        # Data type:   double
        # Values:      0 -> max double
        # Default:     0
        # Note:        Field meaning depends on context, e.g.,
        #                  beamformer packets: sky freq in MHz
        #                  channelizer: center freq in MHz
        # NOTES: This register holds two fields, which represent the low word
        # and high word of a double.  The first register holds the low word,
        # and the second register holds the high word.  Note the following demo
        # code illustrates how to separate a double precision number into the
        # appropriate high and low words.  Also note that this separation must
        # happen outside of the context of the register holder, as split doubles
        # are not a supported data type.
        # ==/ Demo Code /==
        # fsky_high = [fsky].pack("G")[0..3]
        # fsky_low =  [fsky].pack("G")[4..7]
        # ==/ End Demo Code /==

[double] sampleRate   Sampling Rate "SR"
        # SONATA Definition (WCB April 16 2010)
        # Name:        Sampling Rate
        # Size bytes:  8
        # Data type:   double
        # Values:      0 -> max double
        # Default:     0
        # Note:        Field meaning depends on context, e.g.,
        #                  beamformer packets: sky freq in MHz
        #                  channelizer: center freq in MHz
        # NOTES: This register holds two fields, which represent the low word
        # and high word of a double.  The first register holds the low word,
        # and the second register holds the high word.  Note the following demo
        # code illustrates how to separate a double precision number into the
        # appropriate high and low words.  Also note that this separation must
        # happen outside of the context of the register holder, as split doubles
        # are not a supported data type.
        # ==/ Demo Code /==
        # fsky_high = [fsky].pack("G")[0..3]
        # fsky_low =  [fsky].pack("G")[4..7]
        # ==/ End Demo Code /==

[single float] usableFraction
        # SONATA Definition (WCB April 16 2010)
        # Name:        Usable bandwidth
        # Size bytes:  4
        # Data type:   Float
        # Values:      0 -> 1
        # Default:     Version 1.7 Packet Header: 0.6875
        # Notes:       Based on the accuracy of the fractional delay filters

[single float] reserved
        # Reserved

[uint64] absTime
        # SONATA Definition (March 22, 2010)
        # Generated internally by FPGA
        # Name:        absolute packet time
        # Size bytes:  8
        # Data type:   unsigned int
        # Values:      0 - max(uint64)
        # Default:     0, at startup, then synced to system time
        # Notes:       Consists of 32 bit whole seconds and 32 bit fractional seconds

[uint32] flags
        # SONATA Definition (March 22, 2010)
        # Name:        Status flags
        # Size bytes:  4
        # Data type:   bit flags
        # Values:      Bit 0: (1 = good data, 0 = bad)
        #              Other bits: TBD
        # Default:     0x0001

[uint32] len
        # SONATA Definition (March 22, 2010)
        # Name:        data length (samples)
        # Size bytes:  4
        # Data type:   unsigned int
        # Values:      0 -> max unsigned int
        # Default:     Beamformer: 2048
        #              Channelizer: 1024
        # Notes:       If packet type is complex, total payload size in
        #              bytes = [data length in samples] * ([bits per sample]/8) * 2
        #              E.g., 1024 complex samples * (16 bitspersample/8) * 2 = 4096 bytes

Proposed commands for GNU Radio control block

ssh obs@tumulus

ataephem <source name>

  ataephem casa
  java.lang.RuntimeException: Could not generate DH keypair
  some unhandled exception - Invalid NORAD number: -1
  AntUtil: Found casa at ra,dec = 23.39077778,58.80777778
  Writing ephemeris to file casa.ephem.

  ataephem xxx
  java.lang.RuntimeException: Could not generate DH keypair
  some unhandled exception - Invalid NORAD number: -1
  The source, xxx, was not found or no tracks generated.

atatrackephem <ant name> <source name>

  atatrackephem 1a,1b casa.ephem -w
  ATTENTION: The ephemeris starts at 2019-05-15T06:59:57.869Z
      with (Az/El) coordinates: (22.45, 16.56)
  The antennas are prepositioning.
  Pre-positioning antenna(s)...
  The tracked object does not set during ephemeris period.
  Sending trajectory to antenna(s)...
  Waiting for antennas to acquire source...
  Starting with: [ant1a, ant1b]
  After dead removal: [ant1a, ant1b]
  Ready for final tracking: [ant1a, ant1b]
  Slowpoke ant1a current offsets: dAz = 13.493614, dEl = -0.012542725
  Slowpoke ant1a current offsets: dAz = 4.68915, dEl = -6.313324E-4
  Source acquired.

atagetazel <ant name>

  atagetazel 1a
  ant1a  22.452  16.569

  atagetazel 6f
  ant6f: Antenna ant6f does not exist (!open && !known).

atasetazel <ant name> <az> el>
  
 atasetazel 1a 22 19
 You have new mail in /var/mail/obs

atagetazel <ant name>

  atagetazel 1a
  ant1a  22.457  16.562

  atagetazel 6f
  ant6f: Antenna ant6f does not exist (!open && !known).

atasetskyfreq <a or b or c or d> <freq in MHz>

  atasetskyfreq c 2000

  atasetskyfreq x 2000
    lox: Invalid LO "x"

atagetskyfreq <a or b or c or d>
  
  atagetskyfreq c
  2000.0

  atagetskyfreq x
  Invalid LO "x"

atagetradec <ant name>

  atagetradec 1a
  ant1a  20.078304088431512  61.10602072091836

  atagetradec x
  antx: Antenna antx does not exist (!open && !known).

atasetfocus <ant name> <freq in MHz>

  atasetfocus 1a 2000
  (returns nothing)

  atasetfocus 1a x
  could not parse "x" into focus value
  You have new mail in /var/mail/obs

  atasetfocus x 4000
  antx: No antenna or group with name antx.

autoattenall.sh

  autoattenall.sh
  (no output)
  
atalistants -l
1a 1b 1c 1d 1e 1f 1g 1h 1j 1k 
2a 2b 2c 2d 2e 2f 2h 2g 2j 2k 2l 2m 
3c 3d 3e 3f 3g 3h 3j 3l 
4e 4f 4g 4h 4j 4k 4l 
5b 5c 5e 5g 5h 
⚠️ **GitHub.com Fallback** ⚠️