SB-12 – VOR/VOR VOR/NDB NDB/NDB Navigation for Aviation

Copyright: © 2026 by Steffen Beyer

Version: 1.1.1

License: GNU General Public License (GPL) or GNU Lesser General Public License (LGPL), version at your discretion (as usual).

Description:

Calculate an aircraft's current geographical latitude and longitude (sometimes also called a fix) from the known positions of two VOR stations, two NDB stations, or mixed VOR and NDB stations, and either the VOR station's magnetic declination, or for an NDB, the local magnetic declination, preferably at the aircraft's current position, plus either the aircraft's magnetic radial FROM the VOR station, or the relative ADF bearing measured clockwise from the aircraft's nose, and the magnetic heading of the aircraft at the time of that ADF reading.

Disclaimer:

This program is designed for experimental navigation calculations over distances and at altitudes typical of general aviation (GA). It uses an approximate planar model of the Earth's surface, with corrections for the convergence of meridians towards the poles, rather than full spherical or ellipsoidal geometry.

This approximation introduces systematic position errors that can become substantial over long distances. The magnitude of these errors depends on the geographical configuration and generally increases with distance. Consequently, the program is not suitable for the extended navigation distances typical of high-altitude airline operations.

⚠️ For educational and flight-simulation use only. Not suitable as a primary or safety-critical navigation aid in real aircraft. ⚠️

Operating conditions:

Usage:

To initialize for a new pair of navigation stations, press 2nd E'. Enter the geographical coordinates and magnetic declination of both navigation stations, followed by the appropriate VOR radial or ADF relative bearing for each station. Either station may be a VOR or an NDB:

KeyInput / OutputFormat / Unit
AVOR/NDB 1 latitudeDDDMM.mmmmm
BVOR/NDB 1 longitudeDDDMM.mmmmm
CVOR 1 station declination / NDB 1 local declinationDDD.ddddddd
DVOR 1 magnetic radial FROM station / NDB 1 relative ADF bearingDDD.ddddddd
2nd A'VOR/NDB 2 latitudeDDDMM.mmmmm
2nd B'VOR/NDB 2 longitudeDDDMM.mmmmm
2nd C'VOR 2 station declination / NDB 2 local declinationDDD.ddddddd
2nd D'VOR 2 magnetic radial FROM station / NDB 2 relative ADF bearingDDD.ddddddd

VOR observations: No aircraft heading is needed. After initialization, the heading registers are zero; leave them at zero for any station that is a VOR. The program adds that VOR's station declination to the magnetic radial to obtain its true radial.

NDB/ADF observations: The ADF gives a bearing relative to the aircraft's nose, not a geographical bearing. The program converts the relative bearing to an absolute true bearing by adding the aircraft's magnetic heading at the moment of the ADF reading and then the local magnetic declination. Enter the magnetic heading and invoke the appropriate heading-storage subroutine:

SubroutineExplanationWhen to useFormat / Unit
SBR (Store aircraft's magnetic heading for ADF 1 readout (NDB 1) in Register 13 (mnemonic: '(' comes first)Do NOT use for VORDDD.ddddddd
SBR )Store aircraft's magnetic heading for ADF 2 readout (NDB 2) in Register 14 (mnemonic: ')' comes second)Do NOT use for VORDDD.ddddddd
SBR EEStore aircraft's magnetic heading for both ADF readouts in Registers 13 and 14 (mnemonic: 'EE' is "double")Do NOT use for VORDDD.ddddddd

Thus, in a VOR/NDB combination, store the magnetic heading only for the NDB; leave the VOR's heading register at zero. For two NDBs, use SBR ( and SBR ) separately if the aircraft's heading changed between ADF readings, or SBR EE if the same heading applies to both.

D or 2nd D' do not store the aircraft's heading automatically. D and 2nd D' versus SBR (, SBR ) and SBR EE are mutually independent.

Do not enter an already converted absolute magnetic bearing as though it were a relative ADF bearing while a nonzero heading is stored.

 

Press E to calculate the aircraft's position. If the geometry is acceptable, the aircraft's latitude appears on the display (x), and its longitude is placed in the test register t, both in DDDMM.mmmmm format. After calculation, A, B, C, 2nd A', 2nd B' and 2nd C' retrieve their stored values instead of accepting new ones; D and 2nd D' always accept new readings (in order to allow for quick successive fixes).

For another fix using the same pair of stations, enter new radials or ADF readings with D and 2nd D', update the magnetic heading for each NDB as necessary, and press E again. To change station coordinates or declinations, press 2nd E' and re-enter all data; initialization clears registers 01–29, including the stored headings.

 

Intersection quality: After pressing E, use SBR = to display the acute intersection angle (0–90°) in x and the error margin amplification factor in t. The error margin amplification factor indicates how the geometry magnifies bearing errors; it is not an absolute position-error estimate. This subroutine also works after a rejected calculation.

Intersection angleError margin amplification factorAssessment
0° to <5°≥11.47× (undefined at 0°)REJECT
5° to <15°3.86–11.47×Poor
15° to <30°2.00–3.86×Marginal
30° to <60°1.15–2.00×Good
60° to 90°1.00–1.15×Excellent

If the (folded) acute intersection angle is less than 5°, the program rejects the fix and stops with a blinking "9.9999999 99" in the display (x), instead of producing position coordinates (and register t is set to zero). SBR = can still be used after that to examine the intersection geometry.

Function keys:

KeyInput / OutputFormat / Unit
AEnter or retrieve VOR/NDB 1 latitudeDDDMM.mmmmm
BEnter or retrieve VOR/NDB 1 longitudeDDDMM.mmmmm
CEnter or retrieve VOR 1 station / NDB 1 local magnetic declinationDDD.ddddddd
DEnter VOR 1 magnetic radial or NDB 1 relative ADF bearing (always input)DDD.ddddddd
ECalculate aircraft position; switch station data keys to output modeDDDMM.mmmmm
2nd A'Enter or retrieve VOR/NDB 2 latitudeDDDMM.mmmmm
2nd B'Enter or retrieve VOR/NDB 2 longitudeDDDMM.mmmmm
2nd C'Enter or retrieve VOR 2 station / NDB 2 local magnetic declinationDDD.ddddddd
2nd D'Enter VOR 2 magnetic radial or NDB 2 relative ADF bearing (always input)DDD.ddddddd
2nd E'Clear registers 01–29; switch all station data keys to input mode; enforce 2nd Deg moden/a

Subroutines:

KeysExplanationLocationFormat / Unit
SBR (Store aircraft's magnetic heading for ADF 1 bearingRegister 13DDD.ddddddd
SBR )Store aircraft's magnetic heading for ADF 2 bearingRegister 14DDD.ddddddd
SBR EEStore aircraft's magnetic heading for both ADF bearingsRegisters 13 and 14DDD.ddddddd
SBR =Display intersection geometry (only after calculation with E)Display (x): angle in degrees (0-90);
Register t: error margin amplification factor
DDD.ddddddd; n/a
SBR .Converts cockpit format DDDMM.mmmmm to decimal degrees DDD.dddddddDisplay (x) and Register 00DDD.ddddddd
SBR +/-Converts decimal degrees DDD.ddddddd to cockpit format DDDMM.mmmmmDisplay (x) and Register 00DDDMM.mmmmm

Output:

LocationValueFormat / Unit
Display (x):Result aircraft's latitude based on VOR/NDB 1DDDMM.mmmmm
Register t:Result aircraft's longitude based on VOR/NDB 1DDDMM.mmmmm
Register 07:Result aircraft's latitude based on VOR/NDB 1DDD.ddddddd
Register 08:Result aircraft's longitude based on VOR/NDB 1DDD.ddddddd
Register 11:VOR 1 true radial/NDB 1 true absolute ADF bearingDDD.ddddddd
Register 12:VOR 2 true radial/NDB 2 true absolute ADF bearingDDD.ddddddd
Register 16:Rejection factor = abs(sin(RCL11-RCL12)), reject if < sin(5)n/a
Register 17:Intersection angle (0-90)DDD.ddddddd
Register 18:Error margin amplification factor = (1 / rejection factor)n/a
Register 21:Signed distance d1 from VOR/NDB 1nautical miles
Register 22:Signed distance d2 from VOR/NDB 2nautical miles
Register 23:Result aircraft's latitude based on VOR/NDB 2 (for cross-checking)DDD.ddddddd
Register 24:Result aircraft's longitude based on VOR/NDB 2 (for cross-checking)DDD.ddddddd

Distances in registers 21 and 22 are signed because the program intersects complete lines rather than directional rays. A negative value places the aircraft on the opposite side of the station from the direction used in the calculation. In particular, negative distances are normal for NDB bearings, which point TO the beacon.

Registers 23 and 24 provide a second calculation of the intersection coordinates, starting from station 2; they are available for cross-checking only. The normal displayed fix uses registers 07 and 08. The true directions in registers 11 and 12 are used directly in trigonometric calculations and are not normalized to 0–360°.

After SBR =, x and t show the intersection angle and error margin amplification factor instead of latitude and longitude; the stored coordinates in registers 07 and 08 remain available. Or simply press E again.

Good to know:

The program does not interrupt ongoing calculations. Its functions and subroutines do not use CLR or = internally, so ongoing arithmetic operations are not prematurely cleared or evaluated.

Registers used:

RegisterPurposeFormat / Unit
00Coordinate conversion resultDDDMM.mmmmm, DDD.ddddddd
01VOR/NDB 1 latitudeDDDMM.mmmmm
02VOR/NDB 1 longitudeDDDMM.mmmmm
03VOR 1/local declinationDDD.ddddddd
04VOR/NDB 2 latitudeDDDMM.mmmmm
05VOR/NDB 2 longitudeDDDMM.mmmmm
06VOR 2/local declinationDDD.ddddddd
07Result aircraft's latitude based on VOR/NDB 1DDD.ddddddd
08Result aircraft's longitude based on VOR/NDB 1DDD.ddddddd
09VOR/NDB 1 magnetic radial/relative magnetic ADFDDD.ddddddd
10VOR/NDB 2 magnetic radial/relative magnetic ADFDDD.ddddddd
11VOR 1 true radial/NDB 1 true absolute ADF bearing (mnemonic: 11 = 1)DDD.ddddddd
12VOR 2 true radial/NDB 2 true absolute ADF bearing (mnemonic: 12 = 2)DDD.ddddddd
13NDB 1 magnetic aircraft heading at readout ADFDDD.ddddddd
14NDB 2 magnetic aircraft heading at readout ADFDDD.ddddddd
15Signed denominator = sin(RCL11-RCL12)n/a
16Rejection factor = abs(sin(RCL11-RCL12)), reject if < sin(5)n/a
17Intersection angle (0-90)DDD.ddddddd
18Error margin amplification factor = (1 / rejection factor)n/a
19VOR 2 lat. - VOR 1 lat. (Y2 - Y1)DDD.ddddddd
20VOR 2 long. - VOR 1 long. (X2 - X1) * COS( mean latitude )DDD.ddddddd
21Signed distance d1 from VOR/NDB 1 (first in degrees, eventually in nm)DDD.ddddddd, nm
22Signed distance d2 from VOR/NDB 2 (first in degrees, eventually in nm)DDD.ddddddd, nm
23Result aircraft's latitude based on VOR/NDB 2 (for cross-checking with RCL 07)DDD.ddddddd
24Result aircraft's longitude based on VOR/NDB 2 (for cross-checking with RCL 08)DDD.ddddddd
25VOR/NDB 1 latitude (converted from DDDMM.mmmmm)DDD.ddddddd
26VOR/NDB 1 longitude (converted from DDDMM.mmmmm)DDD.ddddddd
27VOR/NDB 2 latitude (converted from DDDMM.mmmmm)DDD.ddddddd
28VOR/NDB 2 longitude (converted from DDDMM.mmmmm)DDD.ddddddd
29COS( mean latitude of VOR/NDB 1 and VOR/NDB 2 )n/a
30Scratchpad for coordinate conversionsn/a
tAircraft longitude in cockpit format; error margin amplification factor, internal useDDDMM.mmmmm, n/a
Flag 0Controls input/output mode for VOR/NDB 1 and VOR/NDB 2 station data (latitude, longitude, declination)0 = input, 1 = output

Glossary:

AbbreviationMeaningExplanation
ADFAutomatic Direction FinderA marine and aircraft radio-navigation instrument that automatically and continuously displays the relative bearing of the aircraft to a ground-based radio transmitter (such as a Non-Directional Beacon or NDB)
AGL, heightAbove Ground LevelThe vertical distance of an aircraft measured directly above a specific ground surface, airfield or VOR/DME station
AMAmplitude ModulationA method of broadcasting radio signals where the amplitude (strength) of the carrier wave is varied to embed audio information
AMSLAbove Mean Sea LevelRefers to the altitude of an aircraft or geographic feature measured relative to the average level of the ocean's surface
ATCAir Traffic ControlA ground-based service that manages aircraft on the ground and in the air to prevent collisions and keep traffic moving safely
BRGBearingDirection from one geographical point to another on a compass rose
CDICourse Deviation IndicatorA needle inside an OBI that shows a pilot whether an aircraft is to the left, right, or directly on the center of an intended magnetic course to or from a VOR station, selected with the OBS knob
DECLMagnetic DeclinationDifference between magnetic and true (geographic) north, same as magnetic variation
DMEDistance Measuring EquipmentA radio navigation system that measures the direct slant-range distance between an aircraft and a ground-based transponder station
DVORDoppler VHF Omnidirectional Range A ground-based radio navigation system that uses the Doppler effect to give pilots accurate bearing and direction information to or from the DVOR station
EHFExtremely High Frequency (30 - 300 GHz)Used in cutting-edge, high-resolution airport surface movement radars and advanced military satellite nets
FLFlight LevelRefers to an aircraft's altitude expressed in hundreds of feet above a standard atmospheric pressure setting of 1013.25 hPa (or 29.92 inHg)
FMFrequency ModulationA method where the frequency of the radio carrier wave is varied instead of its amplitude, offering clearer audio and greater resistance to static or electrical interference
GAGeneral AviationRefers to all civilian aircraft operations such as private flying, flight training, business jets, and aerial work, other than scheduled commercial airline or military flights
HFHigh Frequency (3 - 30 MHz)HF radio waves reflect off the Earth's ionosphere to provide ultra-long-range communication, making them essential for transoceanic and remote arctic flights
LFLow Frequency (30 - 300 kHz)Drives Non-Directional Beacons (NDBs) utilized for legacy automatic direction finding (ADF) navigation
MBMagnetic BearingBearing referenced to magnetic north
MFMedium Frequency (300 kHz - 3 MHz)Houses commercial AM broadcasting (which pilots can use for crude navigation) and some legacy maritime/aviation distress frequencies
MHMagnetic HeadingAircraft heading relative to magnetic north
MSLMean Sea LevelMeasures an aircraft's altitude above the average level of the ocean, providing a fixed and consistent reference point for navigation and air traffic control regardless of the terrain below
NDBNon-Directional BeaconA ground-based radio transmitter that broadcasts signals in all directions, allowing an aircraft's Automatic Direction Finder (ADF) to determine the bearing to the station for navigation
OBIOmni Bearing IndicatorA cockpit instrument that displays a pilot's aircraft position relative to a VOR (VHF Omnidirectional Range) navigation beacon
OBSOmni-Bearing Selector A rotatable cockpit control knob on an OBI that pilots use to select a specific magnetic course to or from a VOR station
RADRadialThe magnetic bearing FROM a VOR station
RBRelative BearingThe angle indicated by an ADF relative to the aircraft's nose
SHFSuper High Frequency (3 - 30 GHz)Crucial for modern weather radar, precision Microwave Landing Systems (MLS), and satellite data communications (SATCOM)
SRSlant RangeSlant range is the direct, diagonal line-of-sight distance between an aircraft and a ground station or radar, forming the hypotenuse of a right triangle created by the aircraft's altitude and its horizontal ground distance
TACANTactical Air NavigationA military radio navigation system that provides a pilot with both the direction (bearing) and distance (slant range) to a ground- or ship-based station
TBTrue BearingBearing referenced to true (geographic) north
THTrue HeadingAircraft heading relative to true (geographic) north
UHFUltra High Frequency (300 MHz - 3 GHz)UHF frequencies are primarily reserved for military aviation communications and advanced tactical systems due to their high data-carrying capacity and smaller antenna requirements
VARMagnetic VariationDifference between magnetic and true (geographic) north, same as magnetic declination
VHFVery High Frequency (30 - 300 MHz)VHF is the primary frequency band for civil aviation, utilizing line-of-sight propagation for crystal-clear short-to-medium-range voice communication with Air Traffic Control (ATC)
VLFVery Low Frequency (3 - 30 kHz)Historically used for backup global navigation (Omega system) and subterranean tracking
VORVHF Omnidirectional RangeA ground-based radio navigation system that sends out signals in all directions so pilots can find their exact magnetic bearing to or from a station
VOR/DMEVOR with DMECombined bearing and distance navigation facility
VORTACVOR+TACANPhysically combines a civilian VOR and a military TACAN transmitter into a single ground station that serves both civilian and military aircraft simultaneously
[TI-5x Emulator Screenshot]