The sample rate on DAQ cards is not a fixed absolute constant. Like time,
it fluctuates, and it is difficult to measure accurately. Sometimes there
are relationships between the input and output sample rates that can reveal
interesting details about the inner working machinery.

The following table of measurements use a technique described in the
sample rate stability application
note. The rate column is the sample rate value that the collection
hardware is programmed to. The in/out rate and in/out error
columns are absolute measurements of the ADC / DAC clock. The
loop error column uses a tone generator loopback method for a high
accuracy measurement of the relative difference between the ADC and the DAC
clocks. The three errorPPM columns are theoretically
related by the formula: "in_error - out_error = loop_error"

Note that the test machine was not
NTP disciplined since it was
running from a live Linux-CD. Previously the /etc/ntp/drift error for
this machine was -7.858 PPM which can be used as a rough correction factor.

rate

in rate

out rate

in error

out error

loop error

4000

4000.576

4000.619

+144.000 PPM

+154.750 PPM

±91.5679 PPM

*

#

5510

5510.664

5510.530

+120.508 PPM

+96.1887 PPM

±34.7539 PPM

*

#

8000

8000.66

8001.22

+82.5000 PPM

+152.500 PPM

±7.3945 PPM

*

11025

11026.12

11025.70

+101.587 PPM

+63.4921 PPM

±220.925 PPM

*

#

12000

12001.25

12001.01

+104.167 PPM

+84.1667 PPM

±89.9847 PPM

*

#

16000

16002.49

16002.31

+155.625 PPM

+144.375 PPM

±7.6724 PPM

*

22050

22053.19

22052.77

+144.671 PPM

+125.624 PPM

±11.0448 PPM

*

#

24000

24003.52

24003.29

+146.667 PPM

+137.083 PPM

±11.6123 PPM

*

32000

32005.06

32005.07

+158.125 PPM

+158.438 PPM

±2.3727 PPM

44100

44107.15

44107.16

+162.132 PPM

+162.358 PPM

±2.2082 PPM

48000

48007.95

48007.94

+165.625 PPM

+165.417 PPM

±2.4842 PPM

The "#" symbol signifies the existence of many discontinuities in the
the absolute sample rate measurement. The accuracy of the affected
in / out rates is questionable.

The "*" symbol signifies that many spectral glitches were observed in the
the loop error measurement. This has only a minor effect on
accuracy since the Hz measurement was jumping around, hence the "±"
sign. The loop error data should be considered highly erroneous and it is
a sign that something deeper is at work. This will be further
explored in the Frequency Domain section. Below is an example of
what the wideband spectral glitch looks like.

The spectrogram shows a faint ringing after the wideband burst for about 0.1
seconds. The particular zero gap in the waveform plot is about 0.01
seconds in duration. The zero gap begins with a decay to DC so the
zero fill is occurring with the DAC stage.

For further investigation the -debugrate command line option was used to
create the sample rate estimate plot shown below.

A popular periodicity in the above plot is 120 seconds. 60 seconds also
pops up a couple times but the periodicity looks to be mostly random. The
discontinuities in the above plot look a lot like fragment drops but no
xruns were reported.
Also, the periodic slips have a weak correlation with the timing of the
spectral glitches.

This is not a normal sample rate convergence curve and it could be a problem
with the design of the iMic or with the Linux USB audio drivers. The
32000, 44100, and 48000 sample rates exhibit no instabilities so this is a
sample rate dependent problem.

Initially this entire test suite was run with Fedora core3 (FC3) 2.6.11-1 ALSA
1.0.9rc2 on the same hardware. The sample rate PPM errors were one to two
orders magnitude greater with Fedora (see
image). This made testing so
difficult that FC3 was abandoned for Ubuntu 5.04. What is odd is that the
components of Fedora and Ubuntu are extremely similar and very close in version
number. Kernel 2.6.11-1 vs. 2.6.10-5 and ALSA 1.0.9rc2 vs. 1.0.6.

Frequency Domain

The sound card's input and output jacks are connected with a short external
cable and run in full duplex mode. This is a loopback test and baudline's
tone generator is the signal source. Distortion, noise floor, filter
response, and inter channel crosstalk are the frequency domain measurements of
interest in this section.

The signal test sources are a pure sine wave, a linear sine sweep, and
WGN. The sine wave is
used for the distortions and crosstalk measurements. The linear sine
sweep and WGN are used for the filter characterization measurement.
Both are an application of the
swept sine vs. WGN technique
and are equivalent measures of the frequency response.

Since spectral performance is a function of sample rate, each of the sound
card's native rates will be tested. The highest sample rate is usually
the cleanest and this is advantageous because it allows the isolated testing
of the ADC and the
DAC. The matched,
source, and sink sample rate combinations are described below.

matched
The input and output sample rates are the same. This combination tests
the performance of both the ADC and the DAC in a matched mode of
operation. The linear sine sweep signal in the left spectrogram display
and the WGN (orange) in the Average window characterize the in-band filter
response. The sine wave (green) in the Average window is used for
distortion and crosstalk measurements. The sine leakage (purple) is used
for crosstalk measurement

source
The sample rate of the input (sink) is the card's highest clean rate.
This combination tests the performance of the DAC. The linear sine sweep
signal in the middle spectrogram display characterizes the DAC filter
response. The position of the pass-band and the stop-band filter
transition is defined by the Nyquist frequency of the DAC. The noise
floor (purple) is the Average collection of a silent channel.

sink
The sample rate of the output (source) is the card's highest clean rate.
This combination tests the performance of the ADC. The linear sine sweep
signal in the rightmost spectrogram display and the orange curve in the Average
window below it characterize the ADC filter response. The position of
both the pass-band and the stop-band filter transition is defined by time in
the spectrogram and by folded frequency in the Average window. The orange Average curve represents the pass-band while the cyan curve is a folded
representation of the stop-band ADC filter response. The noise floor
(purple) is the Average collection of a silent channel.

The naming convention for the columns below is (DAC -> ADC) where DAC
represents the source sample rate and ADC represents the sink sample
rate.

matched

source (DAC)

sink (ADC)

4000 -> 4000

4000 -> 48000

48000 -> 4000

5510 -> 5510

5510 -> 48000

48000 -> 5510

8000 -> 8000

8000 -> 48000

48000 -> 8000

11025 -> 11025

11025 -> 48000

48000 -> 11025

12000 -> 12000

12000 -> 48000

48000 -> 12000

16000 -> 16000

16000 -> 48000

48000 -> 16000

22050 -> 22050

22050 -> 48000

48000 -> 22050

24000 -> 24000

24000 -> 48000

48000 -> 24000

32000 -> 32000

32000 -> 48000

48000 -> 32000

44100 -> 44100

44100 -> 48000

48000 -> 44100

48000 -> 48000

Fedora core3 and Ubuntu 5.04 had identical ADC and DAC filter shapes. The
spectral glitching in FC3 was more prominent which increased the difficultly of
making clean measurements. FC3 had an odd pink noise shaped frequency
response [yellow] that required equalization [orange] by manually adjusting
the Bass and Treble controls of an external mixer program (see
image). The default spectral
shape for Ubuntu 5.04 was a flat frequency response.

distortion
The following table of measurements were made using the technique described in
the sine distortion application
note. It is a full duplex test that uses a loopback of the tone generator
to measure the various distortion parameters. The stereo crosstalk
column is a measure of channel leakage that uses a sine wave channel and a
silent channel as the signal sources.

The SNR, THD, SINAD, and ENOB all improve as the sample rate decreases.
What is unusual is that crosstalk gets worse as the sample rate
decreases. Crosstalk goes from -90 dB at 48000 to -20 dB at 4000 which is
too much to be explained as an increase in cross channel leakage. With
other sound cards, the crosstalk actually improves as the sample rate
decreases. Something strange like a rogue
AGC is operating inside the
iMic v0.06 circuitry.

Fedora core3 and Ubuntu 5.04 had similar distortion measurements.

deep zoom
So far the spectral performance of the iMic v0.06 looks very good.
The loop error instability in the Sample Rate
section suggests that something strange is at work like an extreme amount of
jitter. This section will explore this anomaly with a concept know as
deep spectral zoom.

The down mixer feature in
the Input Devices window is used to perform a deep zoom into the frequency
domain. This DDC
increases the frequency resolution and allows the observation of finely spaced
spectral details. The sample rate is 48000 with a 1024 decimation ratio
for an effective 46.875 sample rate. The 1024 decimation factor translates
to the frequency resolution of an equivalent 1M point FFT. Below
are the standard sine wave, WGN, and crosstalk spectrum plots. The
spectrogram has a couple wideband glitches that are the same errors as seen in
the Sample Rate section.

48000 / 512

Some very major distortion is creating a number of modulation spurs that lower
the ENOB down to +7.369 bits. The spurs are very dynamic, have a spacing
of 4 Hz, and decrease the ENOB by 6 bits. The distortion in the
spectrogram display generates some unique patterns. With other
sound cards, such a deep zooming usually increases the ENOB by more than 1 bit
and results in a clean spectrum. The mystery remains hidden but something
periodic and bad is definitely lurking inside the iMic's DSP logic.

Quantization

A white Gaussian noise signal source was generated and captured in full
duplex loopback fashion at each of the standard sample rates. The
Histogram plots below
show a unique sample distribution that is dependent on sample rate.

5510, 11025, 12000, 22050
The point at the center line is caused by fragment slips that insert long
sequences of zeros into the data stream.

A sine wave signal was generated and captured in full duplex loopback
mode. The time domain response was observed with the
Waveform window where
the green curve represents the left channel and the purple curve represents
the right channel.

The iMic v0.06 has a zero sample inter channel delay at all sample rates.

Analysis

The wild variance and the erratic behavior of the loop error sample rate
measurement prompted the deep spectral zoom investigation which found some very
unusual modulation spurs. These modulation spurs add noise to signals at
all sample rates. They have a 4 Hz spacing, contaminate all signals, and
reduce the ENOB measurement by 5 bits. The source is likely an AGC or an
internal filter problem.

Wideband spectral glitching was observed at all sample rates but the lower
rates suffer the greatest from the affliction. The 5510, 11025, and 12000
sample are excessively problematic. The spectral glitches match the
discontinuities seen in the sample rate estimates and the DC peak in the
quantization histograms. The spectral glitches are the result of the
erroneous insertion of zeros and are likely caused by a USB or a driver
problem.

The ADC / DAC filters are very sharp and well defined above the 5510 sample
rate. The ADC filter at the 4000 and 5510 sample rates is nonexistent
but this doesn't significantly hurt the distortion measurements.

Fedora core3 had larger sample rate errors more spectral glitching that
Ubuntu 5.04 had. Distortion measurements between the two Linux
distributions were almost identical.

Conclusion

The iMic v0.06 has very sharp ADC / DAC filters, clean spectrogram sine sweeps,
and extremely good distortion measurements. Unfortunately it has a
number of serious flaws hidden under the surface that required inquisitive and
rigorous testing to find. The wideband spectral glitches and the
modulated spurs reduce the iMic's performance rating from Excellent to
Poor.

The choice of Linux distribution plays an important role in quality and
performance. In the case of the iMic v0.06, Ubuntu 5.04 was superior to
Fedora core3.

If you must use an iMic v0.06 then use the 32000, 44100, or the 48000 sample
rates. The lower rates just have too many problems.