2001-08-29 14:35:15 +00:00
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta name="generator" content="HTML Tidy, see www.w3.org">
|
|
|
|
<title>IRIG Audio Decoder</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.</p>
|
|
|
|
|
|
|
|
<h4>Description</h4>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
|
|
|
This driver supports the Inter-Range Instrumentation Group (IRIG)
|
2001-08-29 14:35:15 +00:00
|
|
|
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>
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<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.
|
2000-01-28 14:55:50 +00:00
|
|
|
Secifically, if any of the following errors occur for a time
|
2001-08-29 14:35:15 +00:00
|
|
|
measurement, the data are rejected.</p>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<li>The frequency error is greater than ±250 PPM (.025
|
|
|
|
percent). This usually means broken codec hardware or wrong codec
|
|
|
|
configuration.</li>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<li>The modulation index is less than 0.5. This usually means
|
|
|
|
overdriven IRIG signal or wrong IRIG format.</li>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +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
|
|
|
|
2001-08-29 14:35:15 +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
|
|
|
|
2001-08-29 14:35:15 +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
|
|
|
|
2001-08-29 14:35:15 +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>
|
|
|
|
</ol>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
Note that additional checks are done elsewhere in the reference
|
|
|
|
clock interface routines.
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<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.</p>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<h4>IRIG-B Timecode Format</h4>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
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.
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<p>Where feasible, the IRIG signal source should be operated with
|
2000-01-28 14:55:50 +00:00
|
|
|
signature control so that, if the signal is lost or mutilated, the
|
|
|
|
source produces an unmodulated signal, rather than possibly random
|
2001-08-29 14:35:15 +00:00
|
|
|
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:</p>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<pre>
|
|
|
|
Element CF Function
|
2000-01-28 14:55:50 +00:00
|
|
|
-------------------------------------
|
|
|
|
55 6 time sync status
|
|
|
|
60-63 10-13 BCD year units
|
|
|
|
65-68 15-18 BCD year tens
|
2001-08-29 14:35:15 +00:00
|
|
|
</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 <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.</p>
|
|
|
|
|
|
|
|
<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 on the ntpd command line),
|
|
|
|
the driver produces one line for each timecode in the following
|
|
|
|
format:
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<p><tt>00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5
|
|
|
|
3094572411.00027</tt></p>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<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.</p>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<h4>Fudge Factors</h4>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dl>
|
|
|
|
<dt><tt>time1 <i>time</i></tt></dt>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dd>Specifies the time offset calibration factor, in seconds and
|
|
|
|
fraction, with default 0.0.</dd>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dt><tt>time2 <i>time</i></tt></dt>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<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>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dd>Specifies the driver reference identifier, an ASCII string from
|
|
|
|
one to four characters, with default <tt>IRIG</tt>.</dd>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dt><tt>flag1 0 | 1</tt></dt>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dd>Not used by this driver.</dd>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dt><tt>flag2 0 | 1</tt></dt>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<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>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dt><tt>flag3 0 | 1</tt></dt>
|
1999-12-09 13:01:21 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dd>Enables audio monitoring of the input signal. For this purpose,
|
|
|
|
the speaker volume must be set before the driver is started.</dd>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dt><tt>flag4 0 | 1</tt></dt>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<dd>Enable verbose <tt>clockstats</tt> recording if set.</dd>
|
|
|
|
</dl>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<h4>Additional Information</h4>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<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
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<hr>
|
|
|
|
<a href="index.htm"><img align="left" src="pic/home.gif" alt=
|
|
|
|
"gif"></a>
|
2000-01-28 14:55:50 +00:00
|
|
|
|
2001-08-29 14:35:15 +00:00
|
|
|
<address><a href="mailto:mills@udel.edu">David L. Mills
|
|
|
|
<mills@udel.edu></a></address>
|
|
|
|
</body>
|
|
|
|
</html>
|
1999-12-09 13:01:21 +00:00
|
|
|
|