driver36.htm   [plain text]


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org">
<title>Radio WWV/H Audio Demodulator/Decoder</title>
</head>
<body>
<h3>Radio WWV/H Audio Demodulator/Decoder</h3>

<hr>
<h4>Synopsis</h4>

Address: 127.127.36.<i>u</i> <br>
Reference ID: <tt>WWV</tt> or <tt>WWVH</tt> <br>
Driver ID: <tt>WWV_AUDIO</tt> <br>
Autotune Port: <tt>/dev/icom</tt>; 1200/9600 baud, 8-bits, no
parity <br>
Audio Device: <tt>/dev/audio</tt> and <tt>/dev/audioctl</tt> 

<h4>Description</h4>

This driver synchronizes the computer time using data encoded in
shortwave radio transmissions from NIST time/frequency stations WWV
in Ft. Collins, CO, and WWVH in Kauai, HI. Transmissions are made
continuously on 2.5, 5, 10, 15 and 20 MHz. An ordinary shortwave
receiver can be tuned manually to one of these frequencies or, in
the case of ICOM receivers, the receiver can be tuned automatically
by the driver as propagation conditions change throughout the day
and night. The performance of this driver when tracking one of the
stations is ordinarily better than 1 ms in time with frequency
drift less than 0.5 PPM when not tracking either station. 

<p>The demodulation and decoding algorithms used by this driver are
based on a machine language program developed for the TAPR DSP93
DSP unit, which uses the TI 320C25 DSP chip. The analysis, design
and performance of the program running on this unit is described
in: Mills, D.L. A precision radio clock for WWV transmissions.
Electrical Engineering Report 97-8-1, University of Delaware,
August 1997, 25 pp. Available from <a href=
"http://www.eecis.udel.edu/~mills/reports.htm">
www.eecis.udel.edu/~mills/reports.htm</a>. For use in this driver,
the original program was rebuilt in the C language and adapted to
the NTP driver interface. The algorithms have been modified
somewhat to improve performance under weak signal conditions and to
provide an automatic station identification feature.</p>

<p>This driver incorporates several features in common with other
audio drivers such as described in the <a href="driver7.htm">Radio
CHU Audio Demodulator/Decoder</a> and the <a href="driver6.htm">
IRIG Audio Decoder</a> pages. They include automatic gain control
(AGC), selectable audio codec port and signal monitoring
capabilities. For a discussion of these common features, as well as
a guide to hookup, debugging and monitoring, see the <a href=
"audio.htm">Reference Clock Audio Drivers</a> page.</p>

<p>The WWV signal format is described in NIST Special Publication
432 (Revised 1990). It consists of three elements, a 5-ms, 1000-Hz
pulse, which occurs at the beginning of each second, a 800-ms,
1000-Hz pulse, which occurs at the beginning of each minute, and a
pulse-width modulated 100-Hz subcarrier for the data bits, one bit
per second. The WWVH format is identical, except that the 1000-Hz
pulses are sent at 1200 Hz. Each minute encodes nine BCD digits for
the time of century plus seven bits for the daylight savings time
(DST) indicator, leap warning indicator and DUT1 correction.</p>

<h4>Program Architecture</h4>

<p>As in the original program, the clock discipline is modelled as
a Markov process, with probabilistic state transitions
corresponding to a conventional clock and the probabilities of
received decimal digits. The result is a performance level which
results in very high accuracy and reliability, even under
conditions when the minute beep of the signal, normally its most
prominent feature, can barely be detected by ear with a shortwave
receiver.</p>

<p>The analog audio signal from the shortwave radio is sampled at
8000 Hz and converted to digital representation. The 1000/1200-Hz
pulses and 100-Hz subcarrier are first separated using two IIR
filters, a 600-Hz bandpass filter centered on 1100 Hz and a 150-Hz
lowpass filter. The minute sync pulse is extracted using a 800-ms
synchronous matched filter and pulse grooming logic which
discriminates between WWV and WWVH signals and noise. The second
sync pulse is extracted using a 5-ms FIR matched filter and
8000-stage comb filter.</p>

<p>The phase of the 100-Hz subcarrier relative to the second sync
pulse is fixed at the transmitter; however, the audio highpass
filter in most radios affects the phase response at 100 Hz in
unpredictable ways. The driver adjusts for each radio using two
170-ms synchronous matched filters. The I (in-phase) filter is used
to demodulate the subcarrier envelope, while the Q
(quadrature-phase) filter is used in a tracking loop to discipline
the codec sample clock and thus the demodulator phase.</p>

<p>The data bit probabilities are determined from the subcarrier
envelope using a threshold-corrected slicer. The averaged envelope
amplitude 30 ms from the beginning of the second establishes the
minimum (noise floor) value, while the amplitude 200 ms from the
beginning establishes the maximum (signal peak) value. The slice
level is midway between these two values. The negative-going
envelope transition at the slice level establishes the length of
the data pulse, which in turn establish probabilities for binary
zero (P0) or binary one (P1). The values are established by linear
interpolation between the pulse lengths for P0 (300 ms) and P1 (500
ms) so that the sum is equal to one. If the driver has not
synchronized to the minute pulse, or if the data bit amplitude,
signal/noise ratio (SNR) or length are below thresholds, the bit is
considered invalid and all three probabilities are set to zero.</p>

<p>The difference between the P1 and P0 probabilities, or
likelihood, for each data bit is exponentially averaged in a set of
60 accumulators, one for each second, to determine the semi-static
miscellaneous bits, such as DST indicator, leap second warning and
DUT1 correction. In this design, an average value larger than a
positive threshold is interpreted as a hit on one and a value
smaller than a negative threshold as a hit on zero. Values between
the two thresholds, which can occur due to signal fades or loss of
signal, are interpreted as a miss, and result in no change of
indication.</p>

<p>The BCD digit in each digit position of the timecode is
represented as four data bits, all of which must be valid for the
digit itself to be considered valid. If so, the bits are correlated
with the bits corresponding to each of the valid decimal digits in
this position. If the digit is invalid, the correlated value for
all digits in this position is assumed zero. In either case, the
values for all digits are exponentially averaged in a likelihood
vector associated with this position. The digit associated with the
maximum over all of the averaged values then becomes the maximum
likelihood selection for this position and the ratio of the maximum
over the next lower value becomes the likelihood ratio.</p>

<p>The decoding matrix contains nine row vectors, one for each
digit position. Each row vector includes the maximum likelihood
digit, likelihood vector and other related data. The maximum
likelihood digit for each of the nine digit positions becomes the
maximum likelihood time of the century. A built-in transition
function implements a conventional clock with decimal digits that
count the minutes, hours, days and years, as corrected for leap
seconds and leap years. The counting operation also rotates the
likelihood vector corresponding to each digit as it advances. Thus,
once the clock is set, each clock digit should correspond to the
maximum likelihood digit as transmitted.</p>

<p>Each row of the decoding matrix also includes a compare counter
and the difference (modulo the radix) between the current clock
digit and most recently determined maximum likelihood digit. If a
digit likelihood exceeds the decision level and the difference is
constant for a number of successive minutes in any row, the maximum
likelihood digit replaces the clock digit in that row. When this
condition is true for all rows and the second epoch has been
reliably determined, the clock is set (or verified if it has
already been set) and delivers correct time to the integral second.
The fraction within the second is derived from the logical master
clock, which runs at 8000 Hz and drives all system timing
functions.</p>

<p>The logical master clock is derived from the audio codec clock.
Its frequency is disciplined by a frequency-lock loop (FLL) which
operates independently of the data recovery functions. At averaging
intervals determined by the measured jitter, the frequency error is
calculated as the difference between the most recent and the
current second epoch divided by the interval. The sample clock
frequency is then corrected by this amount using an exponential
average. When first started, the frequency averaging interval is
eight seconds, in order to compensate for intrinsic codec clock
frequency offsets up to 125 PPM. Under most conditions, the
averaging interval doubles in stages from the initial value to over
1000 seconds, which results in an ultimate frequency precision of
0.125 PPM, or about 11 ms/day.</p>

<p>It is important that the logical clock frequency is stable and
accurately determined, since in most applications the shortwave
radio will be tuned to a fixed frequency where WWV or WWVH signals
are not available throughout the day. In addition, in some parts of
the US, especially on the west coast, signals from either or both
WWV and WWVH may be available at different times or even at the
same time. Since the propagation times from either station are
almost always different, each station must be reliably identified
before attempting to set the clock.</p>

<p>Station identification uses the 800-ms minute pulse transmitted
by each station. In the acquisition phase the entire minute is
searched using both the WWV and WWVH using matched filters and a
pulse gate discriminator similar to that found in radar acquisition
and tracking receivers. The peak amplitude found determines a range
gate and window where the next pulse is expected to be found. The
minute is scanned again to verify the peak is indeed in the window
and with acceptable amplitude, SNR and jitter. At this point the
receiver begins to track the second sync pulse and operate as above
until the clock is set.</p>

<p>Once the minute is synchronized, the range gate is fixed and
only energy within the window is considered for the minute sync
pulse. A compare counter increments by one if the minute pulse has
acceptable amplitude, SNR and jitter and decrements otherwise. This
is used as a quality indicator and reported in the timecode and
also for the autotune function described below.</p>

<h4>Performance</h4>

<p>It is the intent of the design that the accuracy and stability
of the indicated time be limited only by the characteristics of the
propagation medium. Conventional wisdom is that synchronization via
the HF medium is good only to a millisecond under the best
propagation conditions. The performance of the NTP daemon
disciplined by the driver is clearly better than this, even under
marginal conditions. Ordinarily, with marginal to good signals and
a frequency averaging interval of 1024 s, the frequency is
stabilized within 0.1 PPM and the time within 125 <font face=
"Symbol">m</font>s. The frequency stability characteristic is
highly important, since the clock may have to free-run for several
hours before reacquiring the WWV/H signal.</p>

<p>The expected accuracy over a typical day was determined using
the DSP93 and an oscilloscope and cesium oscillator calibrated with
a GPS receiver. With marginal signals and allowing 15 minutes for
initial synchronization and frequency compensation, the time
accuracy determined from the WWV/H second sync pulse was reliably
within 125 <font face="Symbol">m</font>s. In the particular DSP-93
used for program development, the uncorrected CPU clock frequency
offset was 45.8&plusmn;0.1 PPM. Over the first hour after initial
synchronization, the clock frequency drifted about 1 PPM as the
frequency averaging interval increased to the maximum 1024 s. Once
reaching the maximum, the frequency wandered over the day up to 1
PPM, but it is not clear whether this is due to the stability of
the DSP-93 clock oscillator or the changing height of the
ionosphere. Once the frequency had stabilized and after loss of the
WWV/H signal, the frequency drift was less than 0.5 PPM, which is
equivalent to 1.8 ms/h or 43 ms/d. This resulted in a step phase
correction up to several milliseconds when the signal returned.</p>

<p>The measured propagation delay from the WWV transmitter at
Boulder, CO, to the receiver at Newark, DE, is 23.5&plusmn;0.1 ms.
This is measured to the peak of the pulse after the second sync
comb filter and includes components due to the ionospheric
propagation delay, nominally 8.9 ms, communications receiver delay
and program delay. The propagation delay can be expected to change
about 0.2 ms over the day, as the result of changing ionosphere
height. The DSP93 program delay was measured at 5.5 ms, most of
which is due to the 400-Hz bandpass filter and 5-ms matched filter.
Similar delays can be expected of this driver.</p>

<h4>Program Operation</h4>

The driver begins operation immediately upon startup. It first
searches for one or both of the stations WWV and WWVH and attempts
to acquire minute sync. This may take some fits and starts, as the
driver expects to see three consecutive minutes with good signals
and low jitter. If the autotune function is active, the driver will
rotate over all five frequencies and both WWV and WWVH stations
until three good minutes are found. 

<p>The driver then acquires second sync, which can take up to
several minutes, depending on signal quality. At the same time the
driver accumulates likelihood values for each of the nine digits of
the clock, plus the seven miscellaneous bits included in the WWV/H
transmission format. The minute units digit is decoded first and,
when five repetitions have compared correctly, the remaining eight
digits are decoded. When five repetitions of all nine digits have
decoded correctly, which normally takes 15 minutes with good
signals and up to an hour when buried in noise, and the second sync
alarm has not been raised for two minutes, the clock is set (or
verified) and is selectable to discipline the system clock.</p>

<p>As long as the clock is set or verified, the system clock
offsets are provided once each second to the reference clock
interface, where they are saved in a buffer. At the end of each
minute, the buffer samples are groomed by the median filter and
trimmed-mean averaging functions. Using these functions, the system
clock can in principle be disciplined to a much finer resolution
than the 125-<font face="Symbol">m</font>s sample interval would
suggest, although the ultimate accuracy is probably limited by
propagation delay variations as the ionspheric height varies
throughout the day and night.</p>

<p>As long as signals are available, the clock frequency is
disciplined for use during times when the signals are unavailable.
The algorithm refines the frequency offset using increasingly
longer averaging intervals to 1024 s, where the precision is about
0.1 PPM. With good signals, it takes well over two hours to reach
this degree of precision; however, it can take many more hours than
this in case of marginal signals. Once reaching the limit, the
algorithm will follow frequency variations due to temperature
fluctuations and ionospheric height variations.</p>

<p>It may happen as the hours progress around the clock that WWV
and WWVH signals may appear alone, together or not at all. When the
driver is first started, the NTP reference identifier appears as
<tt>NONE</tt>. When the driver has acquired one or both stations
and mitigated which one is best, it sets the station identifier in
the timecode as described below. In addition, the NTP reference
identifier is set to the station callsign. If the propagation
delays has been properly set with the <tt>fudge time1</tt> (WWV)
and <tt>fudge time2</tt> (WWVH) commands in the configuration file,
handover from one station to the other will be seamless.</p>

<p>Once the clock has been set for the first time, it will appear
reachable and selectable to discipline the system clock, even if
the broadcast signal fades to obscurity. A consequence of this
design is that, once the clock is set, the time and frequency are
disciplined only by the second sync pulse and the clock digits
themselves are driven by the clock state machine and ordinarily
never changed. However, as long as the clock is set correctly, it
will continue to read correctly after a period of signal loss, as
long as it does not drift more than 500 ms from the correct time.
Assuming the clock frequency can be disciplined within 1 PPM, the
clock could coast without signals for some 5.8 days without
exceeding that limit. If for some reason this did happen, the clock
would be in the wrong second and would never resynchronize. To
protect against this most unlikely situation, if after four days
with no signals, the clock is considered unset and resumes the
synchronization procedure from the beginning.</p>

<p>To work well, the driver needs a communications receiver with
good audio response at 100 Hz. Most shortwave and communications
receivers roll off the audio response below 250 Hz, so this can be
a problem, especially with receivers using DSP technology, since
DSP filters can have very fast rolloff outside the passband. Some
DSP transceivers, in particular the ICOM 775, have a programmable
low frequency cutoff which can be set as low as 80 Hz. However,
this particular radio has a strong low frequency buzz at about 10
Hz which appears in the audio output and can affect data recovery
under marginal conditions. Although not tested, it would seem very
likely that a cheap shortwave receiver could function just as well
as an expensive communications receiver.</p>

<h4>Autotune</h4>

<p>The driver includes provisions to automatically tune the radio
in response to changing radio propagation conditions throughout the
day and night. The radio interface is compatible with the ICOM CI-V
standard, which is a bidirectional serial bus operating at TTL
levels. The bus can be connected to a serial port using a level
converter such as the CT-17. The serial port speed is presently
compiled in the program, but can be changed in the driver source
file.</p>

<p>Each ICOM radio is assigned a unique 8-bit ID select code,
usually expressed in hex format. To activate the CI-V interface,
the <tt>mode</tt> keyword of the <tt>server</tt> configuration
command specifies a nonzero select code in decimal format. A table
of ID select codes for the known ICOM radios is given below. Since
all ICOM select codes are less than 128, the high order bit of the
code is used by the driver to specify the baud rate. If this bit is
not set, the rate is 9600 bps for the newer radios; if set, the
rate is 1200 bps for the older radios. A missing <tt>mode</tt>
keyword or a zero argument leaves the interface disabled.</p>

<p>If specified, the driver will attempt to open the device <tt>
/dev/icom</tt> and, if successful will activate the autotune
function and tune the radio to each operating frequency in turn
while attempting to acquire minute sync from either WWV or WWVH.
However, the driver is liberal in what it assumes of the
configuration. If the <tt>/dev/icom</tt> link is not present or the
open fails or the CI-V bus or radio is inoperative, the driver
quietly gives up with no harm done.</p>

<p>Once acquiring minute sync, the driver operates as described
above to set the clock. However, during seconds 59, 0 and 1 of each
minute it tunes the radio to one of the five broadcast frequencies
to measure the sync pulse and data pulse amplitudes and SNR and
update the compare counter. Each of the five frequencies are probed
in a five-minute rotation to build a database of current
propagation conditions for all signals that can be heard at the
time. At the end of each rotation, a mitigation procedure scans the
database and retunes the radio to the best frequency and station
found. For this to work well, the radio should be set for a fast
AGC recovery time. This is most important while tracking a strong
signal, which is normally the case, and then probing another
frequency, which may have much weaker signals.</p>

<p>Reception conditions for each frequency and station are
evaluated according to a metric which considers the minute sync
pulse amplitude, SNR and jitter, as well as, the data pulse
amplitude and SNR. The minute pulse is evaluated at second 0, while
the data pulses are evaluated at seconds 59 and 1. The results are
summarized in a scoreboard of three bits</p>

<dl>
<dt><tt>0x0001</tt></dt>

<dd>Jitter exceeded. The difference in epoches between the last
minute sync pulse and the current one exceeds 50 ms (400
samples).</dd>

<dt><tt>0x0002</tt></dt>

<dd>Minute pulse error. For the minute sync pulse in second 0,
either the amplitude or SNR is below threshold (2000 and 20 dB,
respectively).</dd>

<dt><tt>0x0004</tt></dt>

<dd>Minute pulse error. For both of the data pulses in seocnds 59
and 1, either the amplitude or SNR is below threshold (1000 and 10
dB, respectively).</dd>
</dl>

<p>If none of the scoreboard bits are set, the compare counter is
increased by one to a maximum of six. If any bits are set, the
counter is decreased by one to a minimum of zero. At the end of
each minute, the frequency and station with the maximum compare
count is chosen, with ties going to the highest frequency.</p>

<h4>Diagnostics</h4>

<p>The autotune process produces diagnostic information along with
the timecode. This is very useful for evaluating the performance of
the algorithm, as well as radio propagation conditions in general.
The message is produced once each minute for each frequency in turn
after minute sync has been acquired.</p>

<p><tt>wwv5 port agc wwv wwvh</tt></p>

<p>where <tt>port</tt> and <tt>agc</tt> are the audio port and
gain, respectively, for this frequency and <tt>wwv</tt> and <tt>
wwvh</tt> are two sets of fields, one each for WWV and WWVH. Each
of the two fields has the format</p>

<p><tt>ident score comp sync/snr/jitr</tt></p>

<p>where <tt>ident</tt>encodes the station (<tt>C</tt> for WWV,
<tt>H</tt> for WWVH) and frequency (2, 5, 10, 15 and 20), <tt>
score</tt> is the scoreboard described above, <tt>comp</tt> is the
compare counter, <tt>sync</tt> is the minute sync pulse amplitude,
<tt>snr</tt> the SNR of the pulse and <tt>jitr</tt> is the sample
difference between the current epoch and the last epoch. An example
is:</p>

<p><tt>wwv5 2 111 C20 0100 6 8348/30.0/-3 H20 0203 0
22/-12.4/8846</tt></p>

<p>Here the radio is tuned to 20 MHz and the line-in port AGC is
currently 111 at that frequency. The message contains a report for
WWV (<tt>C20</tt>) and WWVH (<tt>H20</tt>). The WWV report
scoreboard is 0100 and the compare count is 6, which suggests very
good reception conditions, and the minute sync amplitude and SNR
are well above thresholds (2000 and 20 dB, respectively). Probably
the most sensitive indicator of reception quality is the jitter, -3
samples, which is well below threshold (50 ms or 400 samples).
While the message shows solid reception conditions from WWV, this
is not the case for WWVH. Both the minute sync amplitude and SNR
are below thresholds and the jitter is above threshold.</p>

<p>A sequence of five messages, one for each minute, might appear
as follows:</p>

<pre>
wwv5 2  95 C2 0107 0 164/7.2/8100  H2 0207 0 80/-5.5/7754
wwv5 2  99 C5 0104 0 3995/21.8/395  H5 0207 0 27/-9.3/18826
wwv5 2 239 C10 0105 0 9994/30.0/2663 H10 0207 0 54/-16.1/-529
wwv5 2 155 C15 0103 3 3300/17.8/-1962 H15 0203 0 236/17.0/4873
wwv5 2 111 C20 0100 6 8348/30.0/-3 H20 0203 0 22/-12.4/8846
</pre>

<p>Clearly, the only frequencies that are available are 15 MHz and
20 MHz and propagation may be failing for 15 MHz. However, minute
sync pulses are being heard on 5 and 10 MHz, even though the data
pulses are not. This is typical of late afternoon when the maximum
usable frequency (MUF) is falling and the ionospheric loss at the
lower frequencies is beginning to decrease.</p>

<h4>Debugging Aids</h4>

<p>The most convenient way to track the driver status is using the
<tt>ntpq</tt> program and the <tt>clockvar</tt> command. This
displays the last determined timecode and related status and error
counters, even when the driver is not discipline the system clock.
If the debugging trace feature (<tt>-d</tt> on the <tt>ntpd</tt>
command line)is enabled, the driver produces detailed status
messages as it operates. If the <tt>fudge flag 4</tt> is set, these
messages are written to the <tt>clockstats</tt> file. All messages
produced by this driver have the prefix <tt>chu</tt> for convenient
filtering with the Unix <tt>grep</tt> command.</p>

<p>In the following descriptions the units of amplitude, phase,
probability and likelihood are normalized to the range 0-6000 for
convenience. In addition, the signal/noise ratio (SNR) and
likelihood ratio are measured in decibels and the words with bit
fields are in hex. Most messages begin with a leader in the
following format:</p>

<p><tt>wwvn ss stat sigl</tt></p>

<p>where <tt>wwvn</tt> is the message code, <tt>ss</tt> the second
of minute, <tt>stat</tt> the driver status word and <tt>sigl</tt>
the second sync pulse amplitude. A full explanation of the status
bits is contained in the driver source listing; however, the
following are the most useful for debugging.</p>

<dl>
<dt><tt>0x0001</tt></dt>

<dd>Minute sync. Set when the decoder has identified a station and
acquired the minute sync pulse.</dd>

<dt><tt>0x0002</tt></dt>

<dd>Second sync. Set when the decoder has acquired the second sync
pulse and within 125 <font face="Symbol">m</font>s of the correct
phase.</dd>

<dt><tt>0x0004</tt></dt>

<dd>Minute unit sync. Set when the decoder has reliably determined
the unit digit of the minute.</dd>

<dt><tt>0x0008</tt></dt>

<dd>Clock set. Set when the decoder has reliably determined all
nine digits of the timecode and is selectable to discipline the
system clock.</dd>
</dl>

<p>With debugging enabled the driver produces messages in the
following formats:</p>

<p>Format <tt>wwv8</tt> messages are produced once per minute by
the WWV and WWVH station processes before minute sync has been
acquired. They show the progress of identifying and tracking the
minute pulse of each station.</p>

<p><tt>wwv8 port agc ident comp ampl snr epoch jitr offs</tt></p>

<p>where <tt>port</tt> and <tt>agc</tt> are the audio port and
gain, respectively. The <tt>ident</tt>encodes the station
(<tt>C</tt> for WWV, <tt>H</tt> for WWVH) and frequency (2, 5, 10,
15 and 20). For the encoded frequency, <tt>comp</tt> is the compare
counter, <tt>ampl</tt> the pulse amplitude, <tt>snr</tt> the SNR,
<tt>epoch</tt> the sample number of the minute pulse in the minute,
<tt>jitr</tt> the change since the last <tt>epoch</tt> and <tt>
offs</tt> the minute pulse offset relative to the second pulse. An
example is:</p>

<p><tt>wwv8 2 127 C15 2 9247 30.0 18843 -1 1</tt><br>
<tt>wwv8 2 127 H15 0 134 -2.9 19016 193 174</tt></p>

<p>Here the radio is tuned to 15 MHz and the line-in port AGC is
currently 127 at that frequency. The driver has not yet acquired
minute sync, WWV has been heard for at least two minutes, and WWVH
is in the noise. The WWV minute pulse amplitude and SNR are well
above the threshold (2000 and 6 dB, respectively) and the minute
epoch has been determined -1 sample relative to the last one and 1
sample relative to the second sync pulse. The compare counter has
incrmented to two; when it gets to three, minute sync has been
acquired.</p>

<p>Format <tt>wwv3</tt> messages are produced after minute sync has
been acquired and until the seconds unit digit is determined. They
show the results of decoding each bit of the transmitted
timecode.</p>

<p><tt>wwv3 ss stat sigl ampl phas snr prob like</tt></p>

<p>where <tt>ss</tt>, <tt>stat</tt> and <tt>sigl</tt> are as above,
<tt>ampl</tt> is the subcarrier amplitude, <tt>phas</tt> the
subcarrier phase, <tt>snr</tt> the subcarrier SNR, <tt>prob</tt>
the bit probability and <tt>like</tt> the bit likelihood. An
example is:</p>

<p><tt>wwv3 28 0123 4122 4286 0 24.8 -5545 -1735</tt></p>

<p>Here the driver has acquired minute and second sync, but has not
yet determined the seconds unit digit. However, it has just decoded
bit 28 of the minute. The results show the second sync pulse
amplitude well over the threshold (500), subcarrier amplitude well
above the threshold (1000), good subcarrier tracking phase and SNR
well above the threshold (10 dB). The bit is almost certainly a
zero and the likelihood of a zero in this second is very high.</p>

<p>Format <tt>wwv4</tt> messages are produced for each of the nine
BCD timecode digits until the clock has been set or verified. They
show the results of decoding each digit of the transmitted
timecode.</p>

<p><tt>wwv4 ss stat sigl radx ckdig mldig diff cnt like
snr</tt></p>

<p>where <tt>ss</tt>, <tt>stat</tt> and <tt>sigl</tt> are as above,
<tt>radx</tt> is the digit radix (3, 4, 6, 10), <tt>ckdig</tt> the
current clock digit, <tt>mldig</tt> the maximum likelihood digit,
<tt>diff</tt> the difference between these two digits modulo the
radix, <tt>cnt</tt> the compare counter, <tt>like</tt> the digit
likelihood and <tt>snr</tt> the likelihood ratio. An example
is:</p>

<p><tt>wwv4 8 010f 5772 10 9 9 0 6 4615 6.1</tt></p>

<p>Here the driver has previousl set or verified the clock. It has
just decoded the digit preceding second 8 of the minute. The digit
radix is 10, the current clock and maximum likelihood digits are
both 9, the likelihood is well above the threshold (1000) and the
likelihood function well above threshold (3.0 dB). Short of a
hugely unlikely probability conspiracy, the clock digit is most
certainly a 9.</p>

<p>Format <tt>wwv2</tt> messages are produced at each master
oscillator frequency update, which starts at 8 s, but eventually
climbs to 1024 s. They show the progress of the algorithm as it
refines the frequency measurement to a precision of 0.1 PPM.</p>

<p><tt>wwv2 ss stat sigl avint avcnt avinc jitr delt freq</tt></p>

<p>where <tt>ss</tt>, <tt>stat</tt> and <tt>sigl</tt> are as above,
<tt>avint</tt> is the averaging interval, <tt>avcnt</tt> the
averaging interval counter, <tt>avinc</tt> the interval increment,
<tt>jitr</tt> the sample change between the beginning and end of
the interval, <tt>delt</tt> the computed frequency change and <tt>
freq</tt> the current frequency (PPM). An example is:</p>

<p><tt>wwv2 22 030f 5795 256 256 4 0 0.0 66.7</tt></p>

<p>Here the driver has acquired minute and second sync and set the
clock. The averaging interval has increased to 256 s on the way to
1024 s, has stayed at that interval for 4 averaging intervals, has
measured no change in frequency and the current frequency is 66.7
PPM.</p>

<p>If the CI-V interface for ICOM radios is active, a debug level
greater than 1 will produce a trace of the CI-V command and
response messages. Interpretation of these messages requires
knowledge of the CI-V protocol, which is beyond the scope of this
document.</p>

<h4>Monitor Data</h4>

When enabled by the <tt>filegen</tt> facility, every received
timecode is written to the <tt>clockstats</tt> file in the
following format: 

<pre>
        sq yy ddd hh:mm:ss.fff ld du lset agc stn rfrq errs freq cons

        s       sync indicator
        q       quality character
        yyyy    Gregorian year
        ddd     day of year
        hh      hour of day
        mm      minute of hour
        fff     millisecond of second
        l       leap second warning
        d       DST state
        dut     DUT sign and magnitude
        lset    minutes since last set
        agc     audio gain
        ident   station identifier and frequency
        comp    minute sync compare counter
        errs    bit error counter
        freq    frequency offset
        avgt    averaging time
</pre>

The fields beginning with <tt>year</tt> and extending through <tt>
dut</tt> are decoded from the received data and are in fixed-length
format. The <tt>agc</tt> and <tt>lset</tt> fields, as well as the
following driver-dependent fields, are in variable-length format. 

<dl>
<dt><tt>s</tt></dt>

<dd>The sync indicator is initially <tt>?</tt> before the clock is
set, but turns to space when all nine digits of the timecode are
correctly set.</dd>

<dt><tt>q</tt></dt>

<dd>The quality character is a four-bit hexadecimal code showing
which alarms have been raised. Each bit is associated with a
specific alarm condition according to the following: 

<dl>
<dt><tt>0x8</tt></dt>

<dd>Sync alarm. The decoder may not be in correct second or minute
phase relative to the transmitter.</dd>

<dt><tt>0x4</tt></dt>

<dd>Error alarm. More than 30 data bit errors occurred in the last
minute.</dd>

<dt><tt>0x2</tt></dt>

<dd>Symbol alarm. The probability of correct decoding for a digit
or miscellaneous bit has fallen below the threshold.</dd>

<dt><tt>0x1</tt></dt>

<dd>Decoding alarm. A maximum likelihood digit fails to agree with
the current associated clock digit.</dd>
</dl>

It is important to note that one or more of the above alarms does
not necessarily indicate a clock error, but only that the decoder
has detected a condition that may in future result in an
error.</dd>

<dt><tt>yyyy ddd hh:mm:ss.fff</tt></dt>

<dd>The timecode format itself is self explanatory. Since the
driver latches the on-time epoch directly from the second sync
pulse, the fraction <tt>fff</tt>is always zero. Although the
transmitted timecode includes only the year of century, the
Gregorian year is augmented 2000 if the indicated year is less than
72 and 1900 otherwise.</dd>

<dt><tt>l</tt></dt>

<dd>The leap second warning is normally space, but changes to <tt>
L</tt> if a leap second is to occur at the end of the month of June
or December.</dd>

<dt><tt>d</tt></dt>

<dd>The DST state is <tt>S</tt> or <tt>D</tt> when standard time or
daylight time is in effect, respectively. The state is <tt>I</tt>
or <tt>O</tt> when daylight time is about to go into effect or out
of effect, respectively.</dd>

<dt><tt>dut</tt></dt>

<dd>The DUT sign and magnitude shows the current UT1 offset
relative to the displayed UTC time, in deciseconds.</dd>

<dt><tt>lset</tt></dt>

<dd>Before the clock is set, the interval since last set is the
number of minutes since the driver was started; after the clock is
set, this is number of minutes since the time was last verified
relative to the broadcast signal.</dd>

<dt><tt>agc</tt></dt>

<dd>The audio gain shows the current codec gain setting in the
range 0 to 255. Ordinarily, the receiver audio gain control or IRIG
level control should be set for a value midway in this range.</dd>

<dt><tt>ident</tt></dt>

<dd>The station identifier shows the station, <tt>C</tt> for WWV or
<tt>H</tt> for WWVH, and frequency being tracked. If neither
station is heard on any frequency, the station identifier shows
<tt>X</tt>.</dd>

<dt><tt>comp</tt></dt>

<dd>The minute sync compare counter is useful to determine the
quality of the minute sync signal and can range from 0 (no signal)
to 5 (best).</dd>

<dt><tt>errs</tt></dt>

<dd>The bit error counter is useful to determine the quality of the
data signal received in the most recent minute. It is normal to
drop a couple of data bits under good signal conditions and
increasing numbers as conditions worsen. While the decoder performs
moderately well even with half the bits are in error in any minute,
usually by that point the sync signals are lost and the decoder
reverts to free-run anyway.</dd>

<dt><tt>freq</tt></dt>

<dd>The frequency offset is the current estimate of the codec
frequency offset to within 0.1 PPM. This may wander a bit over the
day due to local temperature fluctuations and propagation
conditions.</dd>

<dt><tt>avgt</tt></dt>

<dd>The averaging time is the interval between frequency updates in
powers of two to a maximum of 1024 s. Attainment of the maximum
indicates the driver is operating at the best possible resolution
in time and frequency.</dd>
</dl>

<p>An example timecode is:</p>

<p><tt>0 2000 006 22:36:00.000 S +3 1 115 C20 6 5 66.4
1024</tt></p>

<p>Here the clock has been set and no alarms are raised. The year,
day and time are displayed along with no leap warning, standard
time and DUT +0.3 s. The clock was set on the last minute, the AGC
is safely in the middle ot the range 0-255, and the receiver is
tracking WWV on 20 MHz. Excellent reeiving conditions prevail, as
indicated by the compare count 6 and 5 bit errors during the last
minute. The current frequency is 66.4 PPM and the averaging
interval is 1024 s, indicating the maximum precision available.</p>

<h4>Modes</h4>

<p>The <tt>mode</tt> keyword of the <tt>server</tt> configuration
command specifies the ICOM ID select code. A missing or zero
argument disables the CI-V interface. Following are the ID select
codes for the known radios.</p>

<table cols="6" width="100%">
<tr>
<td>Radio</td>
<td>Hex</td>
<td>Decimal</td>
<td>Radio</td>
<td>Hex</td>
<td>Decimal</td>
</tr>

<tr>
<td>IC725</td>
<td>0x28</td>
<td>40</td>
<td>IC781</td>
<td>0x26</td>
<td>38</td>
</tr>

<tr>
<td>IC726</td>
<td>0x30</td>
<td>48</td>
<td>R7000</td>
<td>0x08</td>
<td>8</td>
</tr>

<tr>
<td>IC735</td>
<td>0x04</td>
<td>4</td>
<td>R71</td>
<td>0x1A</td>
<td>26</td>
</tr>

<tr>
<td>IC751</td>
<td>0x1c</td>
<td>28</td>
<td>R7100</td>
<td>0x34</td>
<td>52</td>
</tr>

<tr>
<td>IC761</td>
<td>0x1e</td>
<td>30</td>
<td>R72</td>
<td>0x32</td>
<td>50</td>
</tr>

<tr>
<td>IC765</td>
<td>0x2c</td>
<td>44</td>
<td>R8500</td>
<td>0x4a</td>
<td>74</td>
</tr>

<tr>
<td>IC775</td>
<td>0x46</td>
<td>68</td>
<td>R9000</td>
<td>0x2a</td>
<td>42</td>
</tr>
</table>

<h4>Fudge Factors</h4>

<dl>
<dt><tt>time1 <i>time</i></tt></dt>

<dd>Specifies the propagation delay for WWV (40:40:49.0N
105:02:27.0W), in seconds and fraction, with default 0.0.</dd>

<dt><tt>time2 <i>time</i></tt></dt>

<dd>Specifies the propagation delay for WWVH (21:59:26.0N
159:46:00.0W), in seconds and fraction, with default 0.0.</dd>

<dt><tt>stratum <i>number</i></tt></dt>

<dd>Specifies the driver stratum, in decimal from 0 to 15, with
default 0.</dd>

<dt><tt>refid <i>string</i></tt></dt>

<dd>Ordinarily, this field specifies the driver reference
identifier; however, the driver sets the reference identifier
automatically as described above.</dd>

<dt><tt>flag1 0 | 1</tt></dt>

<dd>Not used by this driver.</dd>

<dt><tt>flag2 0 | 1</tt></dt>

<dd>Specifies the microphone port if set to zero or the line-in
port if set to one. It does not seem useful to specify the compact
disc player port.</dd>

<dt><tt>flag3 0 | 1</tt></dt>

<dd>Enables audio monitoring of the input signal. For this purpose,
the speaker volume must be set before the driver is started.</dd>

<dt><tt>flag4 0 | 1</tt></dt>

<dd>Enable verbose <tt>clockstats</tt> recording if set.</dd>
</dl>

<h4>Additional Information</h4>

<a href="refclock.htm">Reference Clock Drivers</a> <br>
<a href="audio.htm">Reference Clock Audio Drivers</a> 

<hr>
<a href="index.htm"><img align="left" src="pic/home.gif" alt=
"gif"></a> 

<address><a href="mailto:mills@udel.edu">David L. Mills
&lt;mills@udel.edu&gt;</a></address>
</body>
</html>