blob: 88e56c7761692743d3064410973e7cb017f18416 [file] [log] [blame]
ChromeOS Audio Test
This package intends to be a fast and powerful automated audio test tool.
It performs polyphonic tone synthesis while simultaneously capturing
the incoming sound in some form of external audio loopback. The
external Mic/Headphone jack can easily be tested but the built-in
speakers and microphone can also be tested by placing the
ChromeBook/Laptop in a box and arranging for the built-in speaker
sound to bounce off a surface and be directed to the built-in
microphone. USB/audio dongles can also be tested and the audio output
present in a HDMI port can likewise be tested with an appropriate
dongle while looping back to an incoming microphone port.
The incoming sound is convolved through a Fourier Transform and the
resulting energy peaks are filtered, sorted and compared to the known
expected tones. Any missing or unexpected tones are reported.
This test is fast- usually running in 1/2 second per port combination
tested. During that time up to 7 sinsusoidal tones are polyphonically
played, captured, Fourier analyzed, a report given and an optional
spectrogram created. More than 7 tones can be used but peak
discrimination of the convolved signal becomes more difficult.
This could be handled by using a larger transform space and taking
a little more time in processing.
It is a command line tool which lends itself to being
script driven. Scripts would be different for different
laptop/chromebook devices as the configuration of audio inputs
and outputs can be very different across different platforms.
This tool can be run on any Linux machine, not just a ChromeBook,
providied the ALSA audio subsystem is available, and it usually will be.
Additional features in the tool:
- Generation of a captured audio spectrogram file in 'gnuplot' format.
- Playing the captured sound buffer to a monitor port. Useful when
DUT is in a chamber and the monitor port is a USB dongle.
- Generation of sound without capture; capture without generation.
Useful for external characterization of test tool itself.
Additional features planned for inclusion very shortly:
- Automatic test sequencing of multiple channels in a port.
- Remote control, so a master can test ports in a Device Under Test.
- Higher resolution sound capture with new hardware.
Miscellaneous Notes
Properties of the DFT
DFT stands for 'Discrete Fourier Transform'. A pure Fourier
Transform is continuous; DFTs were invented so Fourier Transforms
could be used in the real world.
The reverse of the DFT is calculated simply by applying the
Fourier transform again, and reversing the resulting buffer
(to satisfy normalization, also divide resulting samples by N).
The components of the DFT are complex numbers. They have a modulus
and a phase:
The modulus of V[k], sqrt(V[k]*V*[k]), describes the intensity of
the particular frequency corresponding to k (because of normalization,
divide modulus by sqrt(N))
The phase of a given component describes the phase shift of this
component--at what angle it starts its oscillations.
What is the relation between k, the index of the Fourier component,
and its frequency? The function describing the k-th basis vector
is e-2πikt/N. Sample it at t= 0,1,2,..,N-1. Its real part is
cos(2πkt/N) (cosine is symmetric, so sign of argument doesn't matter).
Cosine starts repeating after 2π, which corresponds to
kt/N = 1 or t = N/k. So how many such repetitions fit in a segment
of length N? Exactly k. In other words, the k-th basis vector has
k periods per buffer. What time interval corresponds to one buffer?
That depends on sampling speed. If sps is number of samples/sec,
then sps/N is number of buffers/second. Therefore k*sps/N is number
of periods/second, or frequency.