| |
| 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. |