19c2daa00SOllivier Robert<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 29c2daa00SOllivier Robert 39c2daa00SOllivier Robert<html> 49c2daa00SOllivier Robert 59c2daa00SOllivier Robert <head> 69c2daa00SOllivier Robert <meta name="generator" content="HTML Tidy, see www.w3.org"> 79c2daa00SOllivier Robert <title>IRIG Audio Decoder</title> 89c2daa00SOllivier Robert <link href="../scripts/style.css" type="text/css" rel="stylesheet"> 99c2daa00SOllivier Robert </head> 109c2daa00SOllivier Robert 119c2daa00SOllivier Robert <body> 129c2daa00SOllivier Robert <h3>IRIG Audio Decoder</h3> 139c2daa00SOllivier Robert <h4>Related Links</h4> 149c2daa00SOllivier Robert <script type="text/javascript" language="javascript" src="../scripts/links8.txt"></script> 159c2daa00SOllivier Robert <hr> 169c2daa00SOllivier Robert <h4>Synopsis</h4> 179c2daa00SOllivier Robert Address: 127.127.6.<i>u</i><br> 189c2daa00SOllivier Robert Reference ID: <tt>IRIG</tt><br> 199c2daa00SOllivier Robert Driver ID: <tt>IRIG_AUDIO</tt><br> 209c2daa00SOllivier Robert Audio Device: <tt>/dev/audio</tt> and <tt>/dev/audioctl</tt> 219c2daa00SOllivier Robert <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 worked only on older Sun SPARC architectures and SunOS operating systems. The new driver requires no modification of the operating system and works on FreeBSD, SunOS and Solaris. 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> 229c2daa00SOllivier Robert <h4>Description</h4> 239c2daa00SOllivier Robert <p>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> 249c2daa00SOllivier Robert <p>This driver incorporates several features in common with other audio drivers such as described in the <a href="driver7.html">Radio CHU Audio Demodulator/Decoder</a> and the <a href="driver36.html">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.html">Reference Clock Audio Drivers</a> page.</p> 259c2daa00SOllivier Robert <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> 269c2daa00SOllivier Robert <p>The program processes 8000-Hz <font face="symbol">m</font>-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> 279c2daa00SOllivier Robert <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> 289c2daa00SOllivier Robert <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. The specific checks are detailed later in this page. Note that additional checks are done elsewhere in the reference clock interface routines.</p> 299c2daa00SOllivier Robert <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> 309c2daa00SOllivier Robert <h4>IRIG-B Timecode Format</h4> 319c2daa00SOllivier Robert <p>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> 329c2daa00SOllivier Robert <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:</p> 339c2daa00SOllivier Robert <pre> 349c2daa00SOllivier Robert Element CF Function 359c2daa00SOllivier Robert ------------------------------------- 369c2daa00SOllivier Robert 55 6 time sync status 379c2daa00SOllivier Robert 60-63 10-13 BCD year units 389c2daa00SOllivier Robert 65-68 15-18 BCD year tens 399c2daa00SOllivier Robert</pre> 409c2daa00SOllivier Robert Other devices set these elements to zero. 419c2daa00SOllivier Robert <h4>Performance and Horror Stories</h4> 429c2daa00SOllivier Robert <p>The <font face="symbol">m</font>-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> 439c2daa00SOllivier Robert <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 running Solaris 2.6 and maybe twice that with a Sun SPARC IPC running SunOS 4.1.3. Be however acutely aware that the accuracy with Solaris 2.8 and presumably beyond has seriously degraded to the order of several milliseconds. The Sun kernel driver has a sawtooth modulation with amplitude over 5 ms peak-peak and period 5.5 s. The crafty IRIG driver uses a transverse filter to remove the modulation and something called a botttom-fisher to remove incidental positive spikes especially prevalent with Sun Blade 1000 and possibly other systems. The result is nominal accuracy and jitter something less than 0.5 ms, but the this is still far inferior to the performance with older systems.</p> 449c2daa00SOllivier Robert <p>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 this documentation.</p> 459c2daa00SOllivier Robert <h4>Monitor Data</h4> 469c2daa00SOllivier Robert 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: 479c2daa00SOllivier Robert <p><tt>00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5 3094572411.00027</tt></p> 489c2daa00SOllivier Robert <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 carrier 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> 499c2daa00SOllivier Robert <p>The error flags are defined as follows in hex:</p> 509c2daa00SOllivier Robert <dl> 519c2daa00SOllivier Robert <dt><tt>x01</tt> 529c2daa00SOllivier Robert <dd>Low signal. The carrier amplitude is less than 100 units. This is usually the result of no signal or wrong input port. 539c2daa00SOllivier Robert <dt><tt>x02</tt> 549c2daa00SOllivier Robert <dd>Frequency error. The codec frequency error is greater than 250 PPM. This may be due to wrong signal format or (rarely) defective codec. 559c2daa00SOllivier Robert <dt><tt>x04</tt> 569c2daa00SOllivier Robert <dd>Modulation error. The IRIG modulation index is less than 0.5. This is usually the result of an overdriven codec, wrong signal format or wrong input port. 579c2daa00SOllivier Robert <dt><tt>x08</tt> 589c2daa00SOllivier Robert <dd>Frame synch error. The decoder frame does not match the IRIG frame. This is usually the result of an overdriven codec, wrong signal format or noisy IRIG signal. It may also be the result of an IRIG signature check which indicates a failure of the IRIG signal synchronization source. 599c2daa00SOllivier Robert <dt><tt>x10</tt> 609c2daa00SOllivier Robert <dd>Data bit error. The data bit length is out of tolerance. This is usually the result of an overdriven codec, wrong signal format or noisy IRIG signal. 619c2daa00SOllivier Robert <dt><tt>x20</tt> 629c2daa00SOllivier Robert <dd>Seconds numbering discrepancy. The decoder second does not match the IRIG second. This is usually the result of an overdriven codec, wrong signal format or noisy IRIG signal. 639c2daa00SOllivier Robert <dt><tt>x40</tt> 649c2daa00SOllivier Robert <dd>Codec error (overrun). The machine is not fast enough to keep up with the codec. 659c2daa00SOllivier Robert </dl> 669c2daa00SOllivier Robert <h4>Fudge Factors</h4> 679c2daa00SOllivier Robert <dl> 689c2daa00SOllivier Robert <dt><tt>time1 <i>time</i></tt> 699c2daa00SOllivier Robert <dd>Specifies the time offset calibration factor, in seconds and fraction, with default 0.0. 709c2daa00SOllivier Robert <dt><tt>time2 <i>time</i></tt> 719c2daa00SOllivier Robert <dd>Not used by this driver. 729c2daa00SOllivier Robert <dt><tt>stratum <i>number</i></tt> 739c2daa00SOllivier Robert <dd>Specifies the driver stratum, in decimal from 0 to 15, with default 0. 749c2daa00SOllivier Robert <dt><tt>refid <i>string</i></tt> 759c2daa00SOllivier Robert <dd>Specifies the driver reference identifier, an ASCII string from one to four characters, with default <tt>IRIG</tt>. 769c2daa00SOllivier Robert <dt><tt>flag1 0 | 1</tt> 779c2daa00SOllivier Robert <dd>Not used by this driver. 789c2daa00SOllivier Robert <dt><tt>flag2 0 | 1</tt> 799c2daa00SOllivier Robert <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. 809c2daa00SOllivier Robert <dt><tt>flag3 0 | 1</tt> 819c2daa00SOllivier Robert <dd>Enables audio monitoring of the input signal. For this purpose, the speaker volume must be set before the driver is started. 829c2daa00SOllivier Robert <dt><tt>flag4 0 | 1</tt> 839c2daa00SOllivier Robert <dd>Enable verbose <tt>clockstats</tt> recording if set. 849c2daa00SOllivier Robert </dl> 859c2daa00SOllivier Robert <hr> 869c2daa00SOllivier Robert <script type="text/javascript" language="javascript" src="../scripts/footer.txt"></script> 879c2daa00SOllivier Robert </body> 889c2daa00SOllivier Robert 899c2daa00SOllivier Robert</html>