summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/html/driver36.htm
blob: 6f70dcc7ea9c68289317bfcbf4e6f22ee145a441 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
<html><head><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>; 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>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>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.

<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>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>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>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>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>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>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>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>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>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>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>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.

<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>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>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.

<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>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>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>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>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>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.

<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>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. A missing <tt>mode</tt>
keyword or a zero argument leaves the interface disabled. 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>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>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

<dl>

<p><dt><tt>0x0001</tt>
<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>
<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>
<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.

<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><tt>wwv5 port agc wwv wwvh</tt>

<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><tt>ident score comp sync/snr/jitr</tt>

<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><tt>wwv5 2 111 C20 0100 6 8348/30.0/-3 H20 0203 0 22/-12.4/8846</tt>

<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>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.

<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>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><tt>wwvn ss stat sigl</tt>

<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.

<dl>

<p><dt><tt>0x0001</tt>
<dd>Minute sync. Set when the decoder has identified a station and
acquired the minute sync pulse.</dd>
<p><dt><tt>0x0002</tt>
<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>

<p><dt><tt>0x0004</tt>
<dd>Minute unit sync. Set when the decoder has reliably determined the
unit digit of the minute.</dd>

<p><dt><tt>0x0008</tt>
<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>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><tt>wwv8 port agc ident comp ampl snr epoch jitr offs</tt>

<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><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>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>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><tt>wwv3 ss stat sigl ampl phas snr prob like</tt>

<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><tt>wwv3 28 0123  4122 4286     0  24.8 -5545 -1735</tt>

<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>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><tt>wwv4 ss stat sigl radx ckdig mldig diff cnt like snr</tt>

<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><tt>wwv4  8 010f  5772 10 9 9 0 6  4615   6.1</tt>

<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>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><tt>wwv2 ss stat sigl avint avcnt avinc jitr delt freq</tt>

<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><tt>wwv2 22 030f  5795   256   256  4  0   0.0  66.7</tt>

<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>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.

<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>
<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>
<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>
<dd>Sync alarm. The decoder may not be in correct second or minute phase
relative to the transmitter.</dd>

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

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

<dt><tt>0x1</tt>
<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.

<dt><tt>yyyy ddd hh:mm:ss.fff</tt></tt>
<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>
<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>
<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>
<dd>The DUT sign and magnitude shows the current UT1 offset relative to
the displayed UTC time, in deciseconds.</dd>

<dt><tt>lset</tt>
<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>
<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.

<dt><tt>ident</tt>
<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>
<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>
<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>
<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>
<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><tt> 0 2000 006 22:36:00.000  S +3 1 115 C20 6 5 66.4 1024</tt>

<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.

<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.
<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></a><address><a
href=mailto:mills@udel.edu> David L. Mills &lt;mills@udel.edu&gt;</a>
</address></a></body></html>
OpenPOWER on IntegriCloud