Signal Strength

The signal strength delivered by a radio-navigation station at a given aircraft position depends on:

Omni-directional stations like non-directional beacons [NDBs] and VHF omni-directional ranges [VORs] radiate equal signal power in all horizontal directions. Their radiation patterns are therefore shown as circles:

The following function computes the signal strength for any station (such as a VOR or an NDB) with an omni-directional radiation pattern, ie one which radiates with equal strength in all horizontal directions.

double OmniSignal( struct TxData *t ) {
  return((t->Rng - t->Dst) / t->Rng);
}
A radio range station [RRG] radiates in 4 broad horizontal lobes as follows:

The following function uses the current bearing of the aircraft from the radio range station to determine whether the aircraft is in one of the station's 'A' quadrants or in one of its 'N' quadrants. It then places an 'A' or an 'N' respectively in the 4th character position of the first segment of the station's callsign so that the CallSignKeying() function will key an 'A' or an 'N' as appropriate.

The function returns the directional attenuation factor of the station's signal computed according to a radio range station's 4-leaf clover radiation pattern given by the formula: Signal = MaxSignal * sin( 2 * Bearing ).

double RadioRange( struct TxData *t ) {
#define Pi 3.1415926535
#define HalfPi 1.5707963267
char s;             //contains 'A' or 'N' according to quadrant
double b = t->Brg;  //bearing of aircraft from station
if(b > Pi)          //if aircraft in 3rd or 4th quadrants,
  b -= Pi;          //consider it in the first or second
if(b > HalfPi)      //if aircraft in the second or 4th quadrants
  s = 'N';          //key the letter 'N'
else                //if aircraft in the first or 3rd quadrants
  s = 'A';          //key the letter 'A'
//Put letter in 4th character position of first callsign segment
*( t->CallSign + 3 ) = s;  
//Compute directional reduction in station's effective range
double a = t->Rng * sin( b + b );
//return the current signal strength of station at aircraft
return( ( a - t->Dst ) / a );
}
Radio marker beacons are placed at strategic points along airways (airways markers) and at approaches to airport runways (landing markers). Landing markers are only effective up to 8,000 feet. A Marker's horizontal radiation pattern is elliptical with the minor axis of the ellipse in line with the airway or runway's extended centre-line as shown below for a typical runway approach.

Markers operate on a single fixed radio frequency. Airways markers transmit a call sign in slow morse code. Landing markers transmit slow morse signals as shown above. To simulate a marker beacon we must first calculate its signal strength at the aircraft. The signal strength at the aircraft's marker receiver depends on the aircraft's height, distance and relative bearing from the marker, the marker's transmitter power and the radiation pattern of the marker's antenna. The power and radiation pattern of the marker are constants, so we can say that:

Signal strength, S = F(h, d, F)

In detail, the signal strength at the aircraft is calculated as follows:

Having found a we can work with a side view of the marker's vertical radiation lobe as shown below rather than at the odd relative bearing angle. The lobe (which has an elliptical horizontal cross-section) is a surface over which the signal is a constant strength. An approximate formula for the vertical cross-section is:

The following QuickBASIC program generates the above lobe. It also produces two small side-lobes at the bottom which are rather true to life. Note that the formula used for this simulation bears no resemblance to the mechanism which produces real antenna radiation patterns.

screen 9                  'switch to EGA enhanced mode graphics
window(-50,-20)-(+50,+80) 'move window origin to lower centre
XYscaler = 4/5            'PC screen X scaling is 4/5 its Y
Pi = 3.1415926535 : A = Pi / 2
Rmax = 60                 'simulates signal strength
n = 3.5                   'simulates antenna gain
for theta = -A to +A step .0005
x = cos(3.5 * theta) * cos(theta)   'lobe profile formula
if x => 0 then
  R = Rmax * sqr(x)
  a = R * sin(theta)         'distance component along airway x
  h = R * cos(theta)         'height y
  pset(a * XYscaler, h), 15  'plot the point
end if
next : end
The following function computes the signal strength within the field of a high-gain antenna as used by a marker beacon or an ILS station. The square root expression is the distance 'R' along the central axis of the station's radiation lobe at which the signal is the same strength as it is at the aircraft.
double RadiationLobe (
  double rsq,    //square of dist between aircraft and station
  double R,      //maximum effective range of station
  double theta;  //rel bearing between aircraft and lobe axis
) {
  return((R - sqrt(rsq /(cos(3.5 * theta) * cos(theta))))/ R);
}
The function below finds a marker's signal strength at aircraft. The range of a marker beacon is given as a vertical range or height. This is because a marker's radiation lobe points upwards rather than horizontally like a Radio Range or ILS. The function finds signal strength at aircraft by finding height on central vertical axis of marker's radiation lobe at which signal is same strength as at aircraft. It then compares this with max range of marker (vertically) to find relative signal strength at aircraft.
double MarkerBeacon( struct TxData *t ) {
double         //relative  bearing of aircraft from marker axis
  x = sin(t->Brg - t->Hdg),
  d = t->Dst,  //horizontal distance of aircraft from marker
  h = Air.Ht,  //aircraft height

/* Compute the square of distance along airway at the height 
   of the aircraft at which marker's signal strength is the 
   same as it is at the aircraft */
  asq = (d * d) / (1 + 3 * x * x),

/* Compute the angle from the vertical axis of marker's 
   radiation lobe to point along airway at which marker's 
   signal strength is same as it is at aircraft */
  theta = atan( sqrt( asq ) / h );
  return(RadiationLobe( asq + h * h, t->Rng, theta));
}
An instrument landing system's localiser transmitter sends a narrow beam centred along the runway heading, t->Hdg. In fact, it actually transmits two signals forming two narrow lobes, one angled slightly to the left and the other angled slightly to the right of the runway centre line. These provide the aircraft receiver with signals that enable it to determine the aircraft's current horizontal deviation from the runway centre-line. However, for the purpose of computing signal strength for callsign keying the signal may be regarded as a single lobe centred along the runway heading:

The following function uses the above to compute the signal strength at the aircraft which is somewhere within range of an ILS localiser station.

double ILSlocaliser( struct TxData *t ) {
  double r = t->Dst;  //distance between aircraft and station
  return ( RadiationLobe( r * r, t->Rng, t->Brg - t->Hdg ) );
}
The function below uses spherical geometry to compute the distance between the aircraft and the station whose TxData is pointed to by 'q'. It then computes the bearing as follows:
BOOL DandB (
  struct TxData *t,  //pointer to relevant station's details
  double MaxDst,     //maximum relevant distance
  BOOL FromAircraft  //if TRUE swap observer and observed
) {
  #define Pi 3.1415926535
  double
    dlong = t->Lng - Air.Lng,  //Longitudinal difference
    SinAirLat = sin(Air.Lat),  //Sine of latitude of observer
    CosAirLat = cos(Air.Lat),  //Cosine of latitude of observer
    SinStnLat = sin(t->Lat),   //Sine of latitude of observed
    CosStnLat = cos(t->Lat);   //Cosine of latitude of observed
  if(dlong >  Pi) dlong -= Pi; //change dlong's range
  if(dlong < -Pi) dlong += Pi; //from 0 - 2p to -p - +p 
  double CosDst = CosAirLat * CosStnLat * cos(dlong)
                + SinAirLat * SinStnLat;
  if(CosDst > +1) CosDst = +1; //avoid possible acos()
  if(CosDst < -1) CosDst = -1; //domain errors
  if((double Dst = acos(CosDst)) > MaxDst) return( FALSE );
  double Brg = 0;
  //avoid possibility of division by zero 
  if((double SinDst = sin(Dst)) > 0)
  {
    if(FromAircraft == TRUE) { //if doing bearing of the station
      double a = SinStnLat;    //from the aircraft, then swap 
      SinStnLat = SinAirLat;   //the aircraft and station 
      SinAirLat = a;           //co-ordinates over.
    }
    double CosBrg = (SinStnLat - SinAirLat * CosDst)
                  / (CosAirLat * SinDst);
    if(CosBrg < +1 && CosBrg > -1) { //avoid possible acos()
      Brg = acos(CosBrg);            //domain errors
      if(dlong < 0) Brg += Pi;
    }
    else if(CosBrg < 1) Brg = Pi;
  }
  t->Dst = Dst; t->Brg = Brg;  //put dist & brg in station's
  return(TRUE);                //TxData array
}

VHF Line of Sight

A radio-navigation station which operates on VHF (t->Frq > 30MHz) cannot be received if it is beyond the aircraft's horizon (ie if the aircraft's height is less than two thirds of the square of its distance from the station. This line-of-sight limit does not apply if the aircraft is within 20 nautical miles (37 km) of the station:

A function to compute the signal strength a transmitter delivers at the aircraft's current position according to distance and line-of-sight criteria is show below:

double TxSig(struct TxData *t) {
  #define LOS .005811946408975   //37km Line-Of-Sight 
                                 //(expressed in Earth radians)
  double
    (*pf[ ])(struct TxData *) =  //array of ptrs to functions
    {
      OmniSignal,      //omni-directional radiation patterns
      RadioRange,      //4-leaf clover radiation pattern
      MarkerBeacon,    //vertical lobe radiation pattern
      ILSlocaliser,    //horizontal lobe radiation pattern
    } Los,             //line-of-sight distance limit
      Sig;             //tx's signal strength at aircraft

  if(t->Frq > 30000)   //If it is a VHF station (freq > 30MHz)
  {
    /*Compute line-of-sight range limit. If less than 
    horizon scatter range (20 nautical miles or 37 km) 
    set line-of-sight range = scatter range*/
    if((Los = sqrt(1.5 * (Air.Ht - t->Ht))) < LOS) Los = LOS;	
  }
  else Los = Pi;      //else set it to half Earth circumference

  /*If station is effectively within 'line-of-sight', compute 
  signal strength of station at aircraft. If signal strength 
  returned is negative, make it zero*/
  if(DandB(t, Los, FALSE) == TRUE) {
    if((Sig = (*(pf + t->RadPat))(t)) < 0) Sig = 0;
  }
  else Sig = 0;  //zero signal strength if beyond line-of-sight
  return(Sig);   //return signal strength at aircraft
}

This page's parent within this Web Site. About this Web Site. Its home page. Email its Author.