254 lines
11 KiB
HTML
254 lines
11 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
|
<META NAME="GENERATOR" CONTENT="Mozilla/4.01 [en] (Win95; I) [Netscape]">
|
|
<TITLE>IRIG Audio Decoder II for Sun SPARCstation
|
|
</TITLE>
|
|
</HEAD>
|
|
<BODY>
|
|
|
|
<H3>
|
|
IRIG Audio Decoder</H3>
|
|
|
|
<HR>
|
|
<H4>
|
|
Synopsis</H4>
|
|
Address: 127.127.6.<I>u</I>
|
|
<BR>Reference ID: <TT>IRIG</TT>
|
|
<BR>Driver ID: <TT>IRIG_AUDIO</TT>
|
|
<BR>Audio Device: <TT>/dev/audio</TT> and <TT>/dev/audioctl</TT>
|
|
|
|
<P>Note: This driver supersedes an older one of the same name, address
|
|
and ID which required replacing the original kernel audio driver with another
|
|
which works only on older Sun SPARCstation systems. The new driver described
|
|
here uses the stock kernel audio driver and works in SunOS 4.1.3 and Solaris
|
|
2.6 versions and probably all versions in between. The new driver requires
|
|
no modification of the operating system. While it is generic and likely
|
|
portable to other systems, it is somewhat slower than the original, since
|
|
the extensive signal conditioning, filtering and decoding is done in user
|
|
space, not kernel space.
|
|
<H4>
|
|
Description</H4>
|
|
This driver supports the Inter-Range Instrumentation Group (IRIG) standard
|
|
time distribution signal using the audio codec native to the Sun SPARCstation.
|
|
This signal is generated by several radio clocks, including those made
|
|
by Arbiter, Austron, Bancomm, Odetics, Spectracom and TrueTime, among others,
|
|
although it is often an add-on option. The signal is connected via an optional
|
|
attenuator box and cable to either the microphone or line-in ports on a
|
|
Sun SPARCstation <TT>/dev/audio</TT> audio codec device. The driver receives,
|
|
demodulates and decodes the IRIG-B and IRIG-E signal formats using internal
|
|
filters designed to reduce the effects of noise and interfering signals.
|
|
|
|
<P>The IRIG signal format uses an amplitude-modulated carrier with pulse-width
|
|
modulated data bits. For IRIG-B, the carrier frequency is 1000 Hz and bit
|
|
rate 100 b/s; for IRIG-E, the carrier frequenchy is 100 Hz and bit rate
|
|
10 b/s. While IRIG-B provides the best accuracy, generally within a few
|
|
tens of microseconds relative to IRIG time, it can also generate a significant
|
|
load on the processor with older workstations. Generally, the accuracy
|
|
with IRIG-E is about ten times worse than IRIG-B, but the processor load
|
|
is ten times less.
|
|
|
|
<P>The program processes 8000-Hz mu-law companded samples using separate
|
|
signal filters for IRIG-B and IRIG-E, a comb filter, envelope detector
|
|
and automatic threshold corrector. Cycle crossings relative to the corrected
|
|
slice level determine the width of each pulse and its value - zero, one
|
|
or position identifier. The data encode 20 BCD digits which determine the
|
|
second, minute, hour and day of the year and sometimes the year and synchronization
|
|
condition. The comb filter exponentially averages the corresponding samples
|
|
of successive baud intervals in order to reliably identify the reference
|
|
carrier cycle. A type-II phase-lock loop (PLL) performs additional integration
|
|
and interpolation to accurately determine the zero crossing of that cycle,
|
|
which determines the reference timestamp. A pulse-width discriminator demodulates
|
|
the data pulses, which are then encoded as the BCD digits of the timecode.
|
|
The timecode and reference timestamp are updated once each second with
|
|
IRIG-B (ten seconds with IRIG-E) and local clock offset samples saved for
|
|
later processing. At poll intervals of 64 s, the saved samples are processed
|
|
by a trimmed-mean filter and used to update the system clock.
|
|
|
|
<P>Infinite impulse response (IIR) filters are used with both IRIG-B and
|
|
IRIG-E formats. An 800-Hz highpass filter is used for IRIG-B and a 130-Hz
|
|
lowpass filter for IRIG-E. These are intended for use with noisy signals,
|
|
such as might be received over a telephone line or radio circuit, or when
|
|
interfering signals may be present in the audio passband. The driver determines
|
|
which IRIG format is in use by sampling the amplitude of each filter output
|
|
and selecting the one with maximum signal. An automatic gain control feature
|
|
provides protection against overdriven or underdriven input signal amplitudes.
|
|
It is designed to maintain adequate demodulator signal amplitude while
|
|
avoiding occasional noise spikes. In order to assure reliable capture,
|
|
the decompanded input signal amplitude must be greater than 100 units and
|
|
the codec sample frequency error less than 250 PPM (.025 percent).
|
|
|
|
<P>The program performs a number of error checks to protect against overdriven
|
|
or underdriven input signal levels, incorrect signal format or improper
|
|
hardware configuration. Specifically, if any of the following errors occur
|
|
for a timecode, the data are rejected. Secifically, if any of the following
|
|
errors occur for a time measurement, the data are rejected.
|
|
<OL>
|
|
<LI>
|
|
The peak carrier amplitude is less than 100 units. This usually means dead
|
|
IRIG signal source, broken cable or wrong input port.</LI>
|
|
|
|
<BR>
|
|
<LI>
|
|
The frequency error is greater than +-250 PPM (.025 percent). This usually
|
|
means broken codec hardware or wrong codec configuration.</LI>
|
|
|
|
<BR>
|
|
<LI>
|
|
The modulation index is less than 0.5. This usually means overdriven IRIG
|
|
signal or wrong IRIG format.</LI>
|
|
|
|
<BR>
|
|
<LI>
|
|
A frame synchronization error has occured. This usually means wrong IRIG
|
|
signal format or the IRIG signal source has lost synchronization (signature
|
|
control).</LI>
|
|
|
|
<BR>
|
|
<LI>
|
|
A data decoding error has occured. This usually means wrong IRIG signal
|
|
format.</LI>
|
|
|
|
<BR>
|
|
<LI>
|
|
The current second of the day is not exactly one greater than the previous
|
|
one. This usually means a very noisy IRIG signal or insufficient CPU resources.</LI>
|
|
|
|
<BR>
|
|
<LI>
|
|
An audio codec error (overrun) occured. This usually means insufficient
|
|
CPU resources, as sometimes happens with Sun SPARC IPCs when doing something
|
|
useful.</LI>
|
|
</OL>
|
|
Note that additional checks are done elsewhere in the reference clock interface
|
|
routines.
|
|
|
|
<P>Unlike other drivers, which can have multiple instantiations, this one
|
|
supports only one. It does not seem likely that more than one audio codec
|
|
would be useful in a single machine. More than one would probably chew
|
|
up too much CPU time anyway.
|
|
<H4>
|
|
IRIG-B Timecode Format</H4>
|
|
The 100 elements of the IRIG timecode are numbered from 0 through 99. Position
|
|
identifiers occur at elements 0, 9, 19 and every ten thereafter to 99.
|
|
The control function (CF) elements begin at element 50 (CF 1) and extend
|
|
to element 78 (CF 27). The straight-binary-seconds (SBS) field, which encodes
|
|
the seconds of the UTC day, begins at element 80 (CF 28) and extends to
|
|
element 97 (CF 44). The encoding of elements 50 (CF 1) through 78 (CF 27)
|
|
is device dependent. This driver presently decodes the CF elements, but
|
|
does nothing with them.
|
|
|
|
<P>Where feasible, the IRIG signal source should be operated with signature
|
|
control so that, if the signal is lost or mutilated, the source produces
|
|
an unmodulated signal, rather than possibly random digits. The driver will
|
|
automatically reject the data and declare itself unsynchronized in this
|
|
case. Some devices, in particular Spectracom radio/satellite clocks, provide
|
|
additional year and status indication in the format:
|
|
<PRE> Element CF Function
|
|
-------------------------------------
|
|
55 6 time sync status
|
|
60-63 10-13 BCD year units
|
|
65-68 15-18 BCD year tens</PRE>
|
|
Other devices set these elements to zero.
|
|
<H4>
|
|
Performance</H4>
|
|
The mu-law companded data format allows considerable latitude in signal
|
|
levels; however, an automatic gain control (AGC) function is implemented
|
|
to further compensate for varying input signal levels and to avoid signal
|
|
distortion. For proper operation, the IRIG signal source should be configured
|
|
for analog signal levels, NOT digital TTL levels.
|
|
|
|
<P>The accuracy of the system clock synchronized to the IRIG-B source with
|
|
this driver and the <TT>ntpd</TT> daemon is 10-20 microseconds with a Sun
|
|
UltraSPARC II and maybe twice that with a Sun SPARC IPC. The processor
|
|
resources consumed by the daemon can be significant, ranging from about
|
|
1.2 percent on the faster UltraSPARC II to 38 percent on the slower SPARC
|
|
IPC. However, the overall timing accuracy is limited by the resolution
|
|
and stability of the CPU clock oscillator and the interval between clock
|
|
corrections, which is 64 s with this driver. This performance, while probably
|
|
the best that can be achieved by the daemon itself, can be improved with
|
|
assist from the PPS discipline as described elsewhere in the documentation.
|
|
<H4>
|
|
Monitor Data</H4>
|
|
The timecode format used for debugging and data recording includes data
|
|
helpful in diagnosing problems with the IRIG signal and codec connections.
|
|
With debugging enabled (-d -d -d on the ntpd command line), the driver
|
|
produces one line for each timecode in the following format:
|
|
<PRE>00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5 3094572411.00027</PRE>
|
|
The first field containes the error flags in hex, where the hex bits are
|
|
interpreted as below. This is followed by the IRIG status indicator, year
|
|
of century, day of year and time of day. The status indicator and year
|
|
are not produced by some IRIG devices. Following these fields are the signal
|
|
amplitude (0-8100), codec gain (0-255), field phase (0-79), time constant
|
|
(2-20), modulation index (0-1), carrier phase error (0+-0.5) and carrier
|
|
frequency error (PPM). The last field is the on-time timestamp in NTP format.
|
|
The fraction part is a good indicator of how well the driver is doing.
|
|
With an UltrSPARC 30, this is normally within a few tens of microseconds
|
|
relative to the IRIG-B signal and within a few hundred microseconds with
|
|
IRIG-E.
|
|
<H4>
|
|
Fudge Factors</H4>
|
|
|
|
<DL>
|
|
<DT>
|
|
<TT>time1 <I>time</I></TT></DT>
|
|
|
|
<DD>
|
|
Specifies the time offset calibration factor, in seconds and fraction,
|
|
with default 0.0.</DD>
|
|
|
|
<DT>
|
|
<TT>time2 <I>time</I></TT></DT>
|
|
|
|
<DD>
|
|
Not used by this driver.</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>
|
|
Specifies the driver reference identifier, an ASCII string from one to
|
|
four characters, with default <TT>IRIG</TT>.</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>
|
|
Additional Information
|
|
|
|
<P><A HREF="refclock.htm">Reference Clock Drivers</A>
|
|
<HR>
|
|
<ADDRESS>
|
|
David L. Mills (mills@udel.edu)</ADDRESS>
|
|
|
|
</BODY>
|
|
</HTML>
|