<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>I've been playing a little bit with these:</p>
    <p><a class="moz-txt-link-freetext" href="https://github.com/sparky8512/starlink-grpc-tools">https://github.com/sparky8512/starlink-grpc-tools</a></p>
    <p>More specifically, I've been playing with the python script
      that's getting the obstruction map here. This grabs an array of
      123 row tuples with 123 floating point number column entries each,
      which represent SNR (signal to noise ratio) data, with the row and
      column indices of the data structure being 2D coordinates of the
      direction in which this data was observed. A value of -1 meaning
      that Dishy hasn't ever seen a satellite in this direction, actual
      signal strengths are coded as values between 0.0 and 1.0. You can
      output these as PNGs as well, like here (with a slightly changed
      colour scheme):</p>
    <p><img src="cid:part1.n0Nald5Y.xOSpw9CF@auckland.ac.nz" alt="" width="351" height="355"></p>
    <p>What you are looking at is a screenshot (so not exactly 123x123
      but very close), with white pixels corresponding to good signal
      and anything blueish to impaired signal, and anything black to no
      signal. North is top, west is left and east is right. You're
      looking at the corner of my house as seen by Dishy on my deck, the
      flattish bit on the left is a wooden trellis getting in the way,
      and the light blue line crossing the white top part is the
      aluminium front bar of my awning (the awning fabric appears to be
      transparent to the RF signal).<br>
    </p>
    <p>My ultimate goal here is to be able to identify which satellite
      Dishy is currently talking to, something the grpc interface
      doesn't seem to reveal directly (anymore). This is of some
      interest in order to see where signals enter the Starlink network,
      which ground stations the satellite may relay to in bent pipe
      mode, and perhaps for an educated guess as to which ISL hops it's
      taking.<br>
    </p>
    <p>I'm trying to do this essentially by comparing two successive
      retrievals of this map and detecting which entry has changed. This
      is the easy part.<br>
    </p>
    <p>The hard part is trying to figure out which satellite this
      corresponds to. Essentially, the idea is to translate this pixel
      data into a unit vector pointing at the satellite, and then
      compare that with the unit vectors from Dishy's location pointing
      at the thousands of Starlink sats up there, and picking the one
      pair with the smallest angle. All this takes conceptually are a
      few coordinate transforms to get everything into the same
      coordinate system, with sat positions computed from NORAD two line
      elements.</p>
    <p>My initial thought was that:</p>
    <ol>
      <li>Index coordinate (62,62) in the SNR data matrix corresponds to
        a satellite that sits on the Dishy surface normal.</li>
      <li>Indices minus 62 correspond to some sort of Cartesian x-y
        coordinate that should let me derive a unit vector for the
        direction to the satellite in a polar coordinate system based on
        Dishy's surface and the surface normal.</li>
      <li>That then needs transforming into a coordinate system based on
        Dishy's location, removing Dishy orientation in the step. Dishy
        location and orientation are kindly available from Dishy itself
        via grpc.<br>
      </li>
      <li>Coming the other way, two line elements need to be turned into
        global coordinates for satellites at the current time, and these
        need to be turned into local coordinates in the system we're
        transforming into under 3 above.</li>
    </ol>
    <p>The crux is at step 1 and 2. If the assumption under 1 is correct
      and we assume that the scales in row and column direction are the
      same, getting at the azimuth is easy. But what does the distance
      of an entry (pixel) to the centre of the map represent?</p>
    <ul>
      <li>A linear function of the elevation angle?</li>
      <li>A cosine projection of the elevation angle?</li>
      <li>Would a map position in the middle of each map edge represent
        an elevation of 0 or, given the much rumoured phased array
        "cone" of 100 degrees, an angle of 40 degrees over Dishy
        surface?</li>
      <li>Something else?</li>
    </ul>
    <p>But I'm not even sure that the assumption under 1 is correct.
      Note how the area with valid SNR values in the map above is
      slightly elliptic and offset a bit towards the bottom? This can't
      be due to Dishy's geometry as the long dimension of it is top to
      bottom (north to south) rather than east to west. Could this
      already be a projection into the coordinate system based on
      Dishy's location, such that (62,62) is straight up from the
      ground?</p>
    <p>Anyone got any insights on this?</p>
    <p>Thanks muchly in advance.<br>
    </p>
    <p>Ulrich<br>
    </p>
    <pre class="moz-signature" cols="72">-- 
****************************************************************
Dr. Ulrich Speidel

School of Computer Science

Room 303S.594 (City Campus)

The University of Auckland
<a class="moz-txt-link-abbreviated" href="mailto:u.speidel@auckland.ac.nz">u.speidel@auckland.ac.nz</a> 
<a class="moz-txt-link-freetext" href="http://www.cs.auckland.ac.nz/~ulrich/">http://www.cs.auckland.ac.nz/~ulrich/</a>
****************************************************************



</pre>
  </body>
</html>