KIWI-OSD, Video overlay of GPS precision timestamps

Page last updated: February 2010

                                      Kiwi OSD was in production from 2005 - 2009

Click this LINK for KIWI OSD instructions:

Over time these pages will be expanded to link to the many studies people have made with KIWI OSD.

KIWI OSD (On Screen Display) is a project to allow precision time-stamping of video, using GPS derived time. It introduces a level of integrity timing not seen before (or even used) on existing video inserters. It's also the world's first GPS timing OSD to use a single low cost microcontroller to do all the timing and video generation.

An example of KIWI OSD timing a star reappearing from behind a waning moon. The precision timing of this event allows refinement of the Moon's profile.

We can read the time directly from the screen. The optical exposure began at 17:54:02.528 and ended at 17:54:02.545 - a 17msec exposure, implying a NTSC camera was used. This was field number 15,078 since the GPS was sync'd to the video stream.

KIWI OSD - has the following features:

Auto detects and operates in NTSC, PAL, SECAM and MESECAM
(or monochrome versions of the preceeding) formats.

The bottom of the video screen has this format:



HH:MM:SS = Hours, Minutes, Seconds UTC time
EEEE = latest Even field Vsync offset to UTC second (in milliseconds).
OOOO = latest Odd field Vsync offset to UTC second (in milliseconds).
FFFFFF = Contiguous field count since initial GPS sync
( 6 digits allow 4.6 hours @ NTSC rate before counter rollover ).
( 6 digits allow 5.5 hours @ PAL rate before counter rollover ).

With most video cameras, the time of an event is bracketed by
the above two Vsync times.

The following four picture montage shows in 17 millisecond steps
(exposures) when a star appears from behind the Moon. The
gradual 'turn on' is due to the Fresnel Diffraction Effect at
the moon's limb.
Kiwi OSD measures every 1PPS from the GPS, if out of spec, the HH:MM:SS
will thereafter flash at a 1Hz rate, alerting the user not to trust the
time and use the contiguous field count for subsequent timing.
If the GPS (for whatever reason) does stammer, the camera field rate is
good enough over short periods to provide "backup" timing.

KIWI OSD goes through an extensive sync and check before using the GPS
timing data. It requires 10 self consistent readings in full FIX mode
before it starts. Thereafter, it ignores the NMEA data and only uses
the 1PPS for incrementing time - which is integrity checked against the
OSD quartz timing for errors (like the Garmin 35 missing 1PPS pulse,
or the Garmin 16 multiple pulses).

The first UTC "second transition" that occurs after the self
consistency check, is used to designate field number 1. This
provides a known time reference that can be used for any
subsequent time determination if the GPS 1PPS is reported as
going out of spec. The field rate from the camera is Xtal
controlled, and so provides a stable "clock" if the GPS time
signal is affected by interference, multipath or lack of

The reason KIWI OSD ignores the NMEA serial data after initial
FIX, is because experience has shown that it is the NMEA data
that is more likely to have timing errors as the GPS goes in and
out of FIX. This is when the CPU of the GPS is working the
hardest, and so errors like latency in serial transmission creep
in, or just plain "blunders" from multipath or interference. The
1PPS on the other hand tends to be more stable (except in some
Garmins) being driven by a temperature compensated XTAL when the
GPS has lost FIX.

After you have finished the timing run, pressing the "info"
switch requests that Kiwi OSD wait for the first valid GPS fix -
and then compare its internal clock to the GPS. If they agree,
a message "PREVIOUS TIMES OK" is displayed on screen. If GPS
does not agree, "ERROR: USE FIELD COUNT" is displayed, alerting
the user that there has been a previous GPS glitch, and to use
the video field count to extract timing information.

Pressing the "info" switch after reading the above summary,
gives the OSD chip a RESET, and so another timing run is

Kiwi OSD has informative messages describing what is happening,
and whether there is a fault, eg "RS232 OR 1PPS ABSENT".

At initial GPS sync - the following data is displayed:

- Latitude and Longitude (degrees and decimal minutes)
- Fix Status (non zero for valid FIX)
- Number of Satellites being used
- HDOP (Horizontal Dilution of Precision)
- Height of GPS aerial
- "M" for height units in metres.
- Geoidal separation (if GPS has an inbuilt table of values)

GPS receivers can present the height data in two different

Here are 2 examples taken from KIWI OSD at my location.

DELUO (Evermore Chipset) displayed this line of info

1 07 1.5 00010.2 M 08.5

Where: 1=FIX, 07=satellites used, 1.5=HDOP, 10.2=Hgt,
M=Hgt in metres, 8.5=geoidal separation

Because the geoidal separation value is displayed here, this
means the GPS has a model of the difference between the WGS84
ellipsoid and Mean Sea Level. So the 10.2 metre value will
therefore be the height above "Mean Sea Level". So at my
location the Evermore has a value of 8.5 metres as the
difference between MSL and the WGS84 ellipsoid.

Motorola (GT+) displayed this line of Info

1 06 1.3 17.3 M

Notice there is NO value shown after the "M", this means the
Motorola does not have a table for geoidal separation, therefore
the 17.3 height value is the WGS84 value, NOT the height above
Mean Sea Level.

The "geoidal separation" accuracy varies between GPS units.
The Evermore says 8.5 metres, Trimble 11 metres, and the
Garmin 18 as 9.1 metres for my location. A small difference
compared to the normal 10 metre standard deviation for height
determination with standard GPS devices.

Because of the large number of GPS receivers out there now, the
KIWI OSD project is restricting itself to only using the Garmin 18
modules at the present time. It becomes too difficult to keep
up with other models - all with their own quirks.

Because the NMEA standard allows for variable length data, KIWI
OSD software allows for this - so latitude and longitude is
displayed to whatever resolution the GPS transmits. This also
applies to the display of number of satellites used, HDOP
(Horizontal Dilution of Precision) and height data.

HINT: Reducing the number of sentences to the bare minimum (GGA
and RMC only) improves the timing quality of the GPS over having
all NMEA sentences enabled.

Because the software requires 10 self consistent times from the
GPS, the code does not use the NMEA checksum, so the checksum
can either be present or not, and not affect the OSD.

Which edge of the 1PPS is aligned to UTC, can be selected
allowing either LOW to HIGH (most common) or HIGH to LOW (less
common) as the 1PPS reference for timing.
Initial Setting up:

Connect KIWI OSD to a power supply, camera to video IN
and a TV/monitor to video OUT.

You should have the words "RS232 OR 1PPS ABSENT" at the bottom
of the screen. You can adjust the overlay intensity with the
trimpot. Do not adjust the OSD intensity too bright - it will
upset the tracking of VCR's if OSD text is too bright.

Now connect Garmin 18, the GPS may take up to 5 minutes to
get a FIX, the screen will continue to display the words
"RS232 OR 1PPS ABSENT" until such time as a FIX is obtained.

Once the GPS has a FIX, the screen will go through the sequence
as described in the above text.

Things to do:

You may want to verify the OSD wiring by comparing the OSD time
with WWV, the audio "tick" from WWV should be at the same time
the two millisecond counters appear to blank out and the LED pulses.
This verifies the OSD is using the correct edge of the 1PPS.

Leave the circuit running for several hours, if "XXXXXXXX" is
flashing over the HH:MM:SS, this indicates the 1PPS was detected
as being too short or long at some stage - probably caused by
"noise" getting into your wiring or external electrical
interference into the GPS.

If the HH:MM:SS time freezes, the OSD is not receiving 1PPS signals
from the GPS.

Use a VCR to tape the OSD for 17 minutes or so. Then replay the
beginning to get the time when the "Field Counter" was
one, and the field count and time at the end of the recording.
Use these numbers to calculate your camera "field rate" so that
you can determine any timing situations in the future when the
OSD indicates the GPS information is invalid or corrupted.
An example of KIWI OSD, doing precision Astronomic Timing.

Depending on your video monitor - you should be able to
see the faint disc of the Moon that the star has just appeared
from under. The precision time of this image would be:
17:54:02.536 UTC (plus or minus 8 milliseconds).

Images on this page courtesy of Dave Gault, Blue Mountains, Australia - thanks Dave!

Kiwi OSD homepage