Calculating Linear Transponder Uplinks

As previous posts show, my sattrack code is working fine with uplinks and downlinks that do not have any interdependence, such as beacons and FM satellites. For linear transponders, I used a simplistic approach that was not giving good results, so I hit the books over the weekend to derive formulas that will determine the source uplink frequency (at the radio) for a given downlink frequency. In the following, I'm using the definitions of Davidoff, chapter 8.


  1. Downlink origin (at satellite) `dl_o`
  2. Downlink observed (at radio) `dl_x` (Davidoff uses dl*, but I can't get my math code to make the subscripted star)
  3. Uplink origin (at radio) `up_o` (Davidoff uses ulo, but 'ul' means 'underline' in my math markup)
  4. Uplink observed (at satellite) `up_x`
  5. Speed of light `c`
  6. Relative velocity of signal origin (in same units as `c`) `v_r`
  7. Band center for downlink `bc_d`
  8. Band center for uplink `bc_u`
Since `dl_x = dl_o - (v_r/c)dl_o` (Davidoff formula 8.2)
then we can determine that
`dl_o = (dl_x)/(1-v_r/c)`

Now, in the tuning code of satpack, we already have both `dl_o` and `dl_x`. In fact, when the user tunes the radio, it is `dl_o` that the code changes, then feeds that value into the next set of frequency calculations and tunes the radio accordingly. The impression is that one is tuning the radio normally. However, we want to work out what frequency we should transmit on, that is `up_o`, based on this information.  By the same reasoning as above,
`up_o = (up_x)/(1-v_r/c)`

All we have to do now is derive `up_o` from `dl_o`. To do this, we need to take into account the shifting that takes place due the transponder being inverting or non-inverting. First, remember that at the satellite we have the origin of the downlink and the observed frequency of the uplink: our formulas here should relate to `dl_o` and `up_x`.

 According to this helpful pdf, for a non-inverting (or direct) transponder,
`dl_o =  K1 + up_x`, where `K1 = bc_d - bc_u`, so
`dl_o = bc_d -bc_u + up_x`
`up_x = dl_o - bc_d + bc_u`
The result is that for non-inverting transponders, the equation is this:
`up_o = (dl_o - bc_d + bc_u)/(1-v_r/c)`
For inverting transponders, it states that `dl_o = bc_d + bc_u - up_x`, so
`up_x = bc_d + bc_u - dl_o`

`up_o = (bc_d + bc_u - dl_o) / (1 - v_r/c)`

These formulas pass one important dummy test. If `dl_o` is at the center of the downlink band, then `dl_o = bc_d`, and in both formulas this means that all that is left is `bc_u`, and so the uplink will aim for the center of the satellite's uplink passband, too. Put it another way, these formulas work for FM birds, and it doesn't matter if you stipulate that these are non-inverting or inverting.

Playing around with a spreadsheet, I can convince myself that these are right in the case that `bc_d > bc_u`, or Mode V/U. I'm not sure if there is additional work that's needed when `bc_u > bc_d`, such as in Mode U/V.

1. Martin Davidoff, The radio amateur's satellite handbook, 1st ed. (Newington CT: American Radio Relay League, 1998).

Comments

Popular posts from this blog

'Satpack' Arduino tracker PCB

Building the AA2TX Parasitic (Or 'Passive') Lindenblad for 70cm