2000-01-28 14:55:50 +00:00
|
|
|
<html><head><title>
|
|
|
|
IRIG Audio Decoder
|
|
|
|
</title></head><body><h3>
|
|
|
|
IRIG Audio Decoder
|
|
|
|
</h3><hr>
|
|
|
|
|
|
|
|
<H4>Synopsis</H4>
|
|
|
|
|
1999-12-09 13:01:21 +00:00
|
|
|
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
|
2000-01-28 14:55:50 +00:00
|
|
|
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 some
|
|
|
|
workstations. 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 port. 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 interference.
|
|
|
|
|
|
|
|
<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=driver36.htm>Radio WWV/H Audio
|
|
|
|
Demodulator/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 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.
|
1999-12-09 13:01:21 +00:00
|
|
|
|
|
|
|
<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
|
2000-01-28 14:55:50 +00:00
|
|
|
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.
|
1999-12-09 13:01:21 +00:00
|
|
|
The timecode and reference timestamp are updated once each second with
|
2000-01-28 14:55:50 +00:00
|
|
|
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.
|
1999-12-09 13:01:21 +00:00
|
|
|
|
|
|
|
<P>Infinite impulse response (IIR) filters are used with both IRIG-B and
|
2000-01-28 14:55:50 +00:00
|
|
|
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.
|
|
|
|
|
1999-12-09 13:01:21 +00:00
|
|
|
<OL>
|
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<LI>The peak carrier amplitude is less than 100 units. This usually
|
|
|
|
means dead IRIG signal source, broken cable or wrong input port.</LI>
|
|
|
|
|
|
|
|
<LI>The frequency error is greater than ±250 PPM (.025 percent).
|
|
|
|
This usually means broken codec hardware or wrong codec
|
|
|
|
configuration.</LI>
|
|
|
|
|
|
|
|
<LI>The modulation index is less than 0.5. This usually means overdriven
|
|
|
|
IRIG signal or wrong IRIG format.</LI>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<LI>A data decoding error has occured. This usually means wrong IRIG
|
|
|
|
signal format.</LI>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
</OL>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
Other devices set these elements to zero.
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<H4>Performance</H4>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
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 <font
|
|
|
|
face=symbol>m</font>s 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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
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 on the ntpd command line), the
|
|
|
|
driver produces one line for each timecode in the following format:
|
|
|
|
|
|
|
|
<p><tt>00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5
|
|
|
|
3094572411.00027</tt>
|
|
|
|
|
|
|
|
<p>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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<DL>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<DT><TT>time1 <I>time</I></TT></DT>
|
|
|
|
<DD>Specifies the time offset calibration factor, in seconds and
|
|
|
|
fraction, with default 0.0.</DD>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<DT><TT>time2 <I>time</I></TT></DT>
|
|
|
|
<DD>Not used by this driver.</DD>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<DT><TT>stratum <I>number</I></TT></DT>
|
|
|
|
<DD>Specifies the driver stratum, in decimal from 0 to 15, with default
|
|
|
|
0.</DD>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<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>
|
1999-12-09 13:01:21 +00:00
|
|
|
</DL>
|
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<H4>Additional Information</H4>
|
|
|
|
|
|
|
|
<A HREF="refclock.htm">Reference Clock Drivers</A>
|
|
|
|
<br><A HREF="audio.htm">Reference Clock Audio Drivers</A>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2000-01-28 14:55:50 +00:00
|
|
|
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
|
|
|
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
|
|
|
</address></a></body></html>
|