SoftwarePractice.org: Home | Courseware | Wiki | Archive

Team K - Loudspeaker Characterisation and Compensation

From SoftwarePractice.org

Team K Members: Lih, Stephen, Russell, Mohammed

Contents

Introduction

There are many different areas of speaker characterisation and compensation that this project can look at:

  1. Determining the on-axis response of the speaker driver to various different inputs to determaine the haronic distortion, frequency response etc... of the driver. This is the traditional form of testing for speakers drivers.
  2. Determining the off-axis reponse of the speaker driver at varying distances and angles from the normal. This test of the speaker seems to be overlooked to some degree, possably due to it being time intensive and complex to repeat the testing process.
  3. Determining the "listening" response of the speaker in a particular non-ideal listening envirinment. That is, in a room with walls and ceiling that reflect sound. This type of testing would best show the speakers "actual" response when used in real world environments. This may be the most intersting testing as it combines some elements of the previous two testing areas. This area can also be further expanded to determine the optimum listening position and speaker position so that the listener can gain the most out of thier listening experience.
  4. Measuring the actual frequency resonse of a particular speaker and designing a filter that will compensate for the speakers flaws in its response to produce a flat response.

This project will focus on measuring the on-axis response of the speaker driver to determine the frequency response and harmonic distortion. Additionally, a Graphical User Interface (GUI) will be designed to allow the user to design and implement a correction filter to augment the sound sent to the speaker in order to correct for the speakers imperfections and attempt to make the speakers frequency response flat across a certain range required by the user.

Scope

Below is a list of key tasks that were be addressed in this project:

  1. Acquire test equipment - microphone, sound card, speakers etc.
  2. Determine characteristics of equipment - find data sheets, determine frequency response etc.
  3. Determine good practice testing procedures for the measuring of frequency response and harmonic distortion.
  4. Determine the best type of filter to use for the speaker compensation and correction.
  5. Write Matlab code for speaker compensation.
  6. Design GUI and embedd code to the frequency response measurements and correction filter design.
  7. Write Matlab code to measuring harmonic distortion.
  8. Design GUI and integrate disortion measuring code.
  9. Both GUIs linked together for the ease of the user.

Implementation

Block Diagram
Enlarge
Block Diagram

This project covers aspects of implementing a loudspeaker driver testing and compensation program. This section provides an explanation of the operation and implementation of the system in the following ways:

  1. Upper level functionality block diagram of the system (see right)
  2. Brief description of the components
  3. Description of how each element was implemented and how it ties in with the system as a whole.

Component Descriptions

Generating a Sweep Signal

The sweep signal is a sinusoidal signal whose frequency 'sweeps' from 0 to 20kHz. It is generated in Matlab using the sweep code shown in the section 7.4. It was generated live in Matlab as opposed to pre-recorded because it was easier to customise.

White Noise

White noise is a sound containing all frequencies with an even distribution at all times. It differs to a sinusoidal sweep which has only one frequency at any given time. Both the sweep and noise signals were implemented because some of the microphones used performed better with one than the other.

Playing and Recording Sound

The selected signal is played using the sound function. The input arguments are the signal and the sample frequency. The program can play the sweep and noise signals in their filtered and unfiltered forms and individual frequency sinusoids. At the same time the sound is played, it is recorded using the record function.

Filtering

The program uses second order parametric 'variable Q' filters to make the correction filter. Each of them uses the parmeq() function detailed in section 7.2. This function takes gain, bandwidth and centre frequency as its arguments. Parametric filters were chosen as they provide a larger amount of control when compared to other typed of filters, and their inherant properties match the type of filtering that was required. An overall transfer function is obtained by multiplying the transfer functions of each of the individual filters and applying this to the signal.

Function of Elements

This section provides a description of the function of each element in the system.

Sweep signal

The aim of the sweep signal is to generate a signal to be supplied to the system, played through the speaker and recorded through the microphone. We change the length of this signal by increasing the number of samples (N = 2^17) to be long enough to be able to modify and measure it’s characteristics. The more samples that are used, the longer the program will take to be executed.

White noise

White noise is played from a filed located on the computer within the Matlab working directory. White noise is "A random signal of every frequency in the audio spectrum, all of which have an average uniform power level. White noise is generated for a variety of purposes, including masking sounds in a room, testing loudspeakers for distortion and coloration and to provide input to a synthesizer, which uses filters to derive all of its sounds."[1]

Loud Speaker

The aim of the speaker is to convert the electrical signal into vibration. The characteristic and the quality of the speaker plays a large impact on the system. For example, in our system it cause a dip or a hole at 3k Hz, and in some cases this is hard to solve using a filter as explained in the test procedures.

Microphone

The microphone will convert the sound or vibration into an electrical wave. There are many types of microphone, such as crystal microphone, carbon microphone and dynamic microphone. The best type of microphone is the crystal microphone. Different microphones have different characterstic, such as cut off. The best results of any microphone we found has a cut off at around 15 kHz with a relatively flat response.

Parameq filter

Different filters have been investigated to be implemented in our filter, such as the bandpass, bandstop, Chebyshev1, Chebyshev2, elliptic and parameq. The butterworth filter has the most gradual rolloff from the passband to the stopband therefore this filter yields the weakest lowpass characteristic. In comparison, the elliptic has the sharpest rolloff but as a consequency has ripple in both the pass and stop band. The Chebyshev 1 filter has ripple in the passband and the Chebyshev 2 filter has ripple in the stopband. We found the most effective and suitable filter in this case was the prameq filter. This filter is unique in its capabilities as it is easy to implement and control the signals at specific frequencies it was also chosen because it has the ability to pass all signals outside its specification, and either boost or cut frequencies within its specified range. It is very simple to adjust the bandwidth of this peak or trough, and centre frequency of its peak or trough, and also the gain (or attenuation) of the peak or trough. Thus, with this in mind, to correct for a peak in the frequency response of a speaker a trough of roughly the same bandwith and centre frequency, but with opposite gain would be placed in the correction filter.

For example in the following code:

parmeq.m - second-order parametric EQ filter design

[b, a, beta] = parmeq(G0, G, GB, w0, Dw)
Where 
b = [b0, b1, b2] = numerator coefficients
a = [1,  a1, a2] = denominator coefficients
G0, G, GB = reference, boost/cut, and bandwidth gains
w0, Dw = center frequency and bandwidth in [rads/sample]

In this project we used the GUI to to plot the recorded signal and to determine which part of the signal required filtering. The nature of the parmeq filter being a 2nd order recursive filter, each time it is used a finite amount of noise will be added to the signal. Therefore, if many filters are used the noise will become audible to the human ear.

Fast Fourier Transform (FFT)

The Fourier transform has many properties. These properties are often used to avoid solving integrals or summations. The Discrete Fourier Transfor (DFT) is the Fourier Transform of discretly sampled data. The result generated from the DFT is the discrete frequency domain representation of the discrete time domain data. To change the signal from the time domain to the frequency domain we apply the Inverse Discrete Fourier Transform (IDFT) which is the reverse of the DFT.

Such is the nature of the DFT that it would take N^2 complex multiplications to compute using the Discrete Fourier Summation theory. This is of course many many multiplications and would take a large amount of time to compute even for small arrays (an array of length 256 would require 65536 complex multiplications).

Enter the Fast Fourier Transform (FFT). In 1942 Mathematicians Danielson and Lanczos "discovered" that a DFT of length N, can infact be written as the sum two DFTs of length N/2. One of the two is formed from the even numbered points of the original array, and the other from the odd points in the array. This is of course very usefull, and for an array of length N = 256 would reduce the number of complex multiplications to less than half of that required by the DFT. More improvements are still to come, the Danielson-Lanczos Lemma can be used recursivly untill all that is left is N arrays of length 1. From here the result is almost trivial as the DFT of an array of length 1, is exactly the same as the time domain data. Now the 1 point transforms and combined by multiplication by a phase constant and added to the point next to it, to form N/2 2-point transforms, the 2-points are then combined to N/4 4-point transforms and so on untill the full transform is computed.

The FFT represents significant computational savings over the DFT, for example for an array of length N, where the DFT takes N^2 complex multiplications, the FFT will only take N*log2(N) complex multiplications. For an array of length N = 1,000,000 this is the difference between roughly 30secs of processor time and 2 weeks of processor time on a microsecond computer.

Matlab Functions Associated with the Fourier Transform

fft() is a Fast Fourier Transform function which takes an array of discretly sampled time domain data and complutes the DFT using the FFT method. The output order of the frequency domain data array is: 0, Fs/N, 2*Fs/N, 3*Fs/N, ..., +-Fs/2, -(N-2)*Fs/2*N, -(N-4)*Fs/2*N, ..., -Fs/N

fftshift() rearranges the outputs of fft() into a more graphable form by moving the negative frequency components to the left of the zero frequency component. It is useful for visualizing a Fourier transform with the zero-frequency component in the middle of the spectrum.

Frequency Response

Block Diagram
Enlarge
Block Diagram

Frequency response is the measure of any system's response at the output to a signal of varying frequency with constant amplitude at its input. It is usually referred to in connection with electronic amplifiers and similar systems. The frequency response is typically characterized by the magnitude of the system's response, measured in dB, versus frequency.[2] This is critical to undertake within our this test. We will be able to see the behaviour of the signal as it is imputed into a system.

Testing of the System

Requirements

Software

  • Operating system, such as Windows XP,
  • Matlab 7,
  • Program files.

Program files are as follows:

  • grapheq.fig - Main program GUI
  • grapheq.m - Main program code
  • THD.fig - Harmonic distortion program GUI
  • THD.m - Harmonic distortion program code
  • White_Noise.wav - Wave file containing white noise used by grapheq.

Hardware

  • Personal Computer
  • Sound card
  • Microphone, preferably with a cut off frequency above 15 kHz with a flat response, especially within the range 3 to 4 kHz
  • Loud Speaker to be tested

Testing

Procedure

  1. Implement each individual hardware part and test each separately to ensure quality,
  2. Integrate each part into the system and ensure the system as a whole works,
  3. ensure speaker and microphone are connected to the appropriate soundcard jacks,
  4. Check all sound settings within the operating system allow recording,
  5. Copy all files into the Matlab work directory,
  6. Open Matlab,
  7. Open grapheq.m in Matlab,
  8. Execute grapheq.m,
  9. Switch on speaker and microphone and adjust volume levels to a nominal level,
  10. Hold microphone 10mm* away from speaker (*this distance may vary depending on the quality and the characteristic of the speaker and microphone),
  11. GUI window will pop up as shown in the figure1 below and then start test each test individual as explained below,

The GUI includes four diagrams. The main diagram is the filter space, while the three other diagrams represent the original, filtered and the recorded spectrum.

Sweep Test

Sweep test without any filters applied
Enlarge
Sweep test without any filters applied
  1. Click on the 'Sweep' button in GUI to run sweep test. The played sweep spectrum is displayed on the top-right diagram and the recorded spectrum is displayed on the bottom-right diagram. The figure below shows the sweep signal before applying the filter.
Sweep test with some filters applied
Enlarge
Sweep test with some filters applied
  1. Adjust gains, bandwidths and centre frequencies of the parametric equalisers to compensate for peaks and troughs in the recorded spectrum. The overall transfer function for the filter is displayed on the top left diagram.
  2. Click on 'Filtered Sweep' button to play the sweep after it has been filtered. The filtered sweep spectrum is displayed on the middle-right diagram.This figure shows the sweep signal after being filtered at certain stages.


Sweep test with all filters applied
Enlarge
Sweep test with all filters applied
  1. Repeat 2 and 3 until a flat frequency response is attained or until all parametric equalisers are used. To return the filter to its initial state, click the reset button.

After using the whole filters at the required freqencies by repeating step 2 and 3 we get the completed filtered sweep signal as shown in the third firgure from the bottom.


Noise Test

  1. Click on 'Noise' button in GUI to run noise test. The played noise spectrum is displayed on the top-right diagram and the recorded spectrum is displayed on the bottom-right diagram.
  2. Adjust gains, bandwidths and centre frequencies of the parametric equalisers to compensate for peaks and troughs in the recorded spectrum. The overall transfer function for the filter is displayed on the top left diagram.
  3. Click on 'Filtered Noise' button to play the noise after it has been filtered. The filtered noise spectrum is displayed on the middle-right diagram.
  4. Repeat 2 and 3 until a flat frequency response is attained or until all parametric equalisers are used. To return the filter to its initial state, click the reset button.

Single Frequency Test

  1. Enter the desired frequency in the frequency textbox.
  2. Click the 'Single Frequency' button to play a sinusoid of the frequency entered. The played spectrum is displayed on the top-right diagram and the recorded spectrum is displayed on the bottom-right diagram.

Total Harmonic Distortion Test

Harmonic Distortion GUI
Enlarge
Harmonic Distortion GUI
  1. Click on the 'THD Test' button to execute the THD test program. A new window will open up.
  2. Select a sample frequency, number of samples and ping width.
  3. Click on the 'Ping' button to run THD test. The played ping spectrum is displayed on the top diagram, the recorded spectrum is displayed on the bottom diagram. The levels of all the harmonics with reference to the fundamental is displayed in the large yellow text field. The total harmonic distortion is displayed as a percentage in the small yellow text field.

Notes

Speaker characterisation and the effectiveness of each test is dependent not only on the speaker but also on the microphone used. Consequently, some tests will work better on a particular microphone than others.

Some speakers may be unresponsive at certain frequencies, particularly during the sweep and noise tests. This is difficult to correct without distortion.

Technical Infomation

Harmonic Distortion

Harmonic distortion is a measure of the amount of power contained in the harmonics of a fundamental signal. Harmonic distortion is inherent to devices and systems that possess nonlinear characteristics, the more nonlinear the device, the greater its harmonic distortion.

Harmonic distortion can be expressed as a power ratio or a percentage ratio, the following formula expresses it as a power ratio.

Image:phd.gif

To determine distortion as a percentage ratio, convert the powers to voltages, and use the following fomula

Image:Percent.gif

To measure the Total Harmonic Distortion use the following formula

Image:THD.gif

Intermodulation Distortion

Intermodulation in its simplist form is the presence of frequencies in the output signal that are not present in the input signal. This does not include harmonics of the input signal, as that is considered harmonic distortion.

Intermonduation testing looks for linear combinations of the input signals frequencies in the output signal. For example, if the input frequencies into a system are 500Hz and 2000Hz, then testing for intermodulation distortion would involve looking for the presence of 1500Hz and 2500Hz signals.

IMD3

...otherwise know as "Intermodulation distortion from third order harmonics"

IMD3 is of particular importance in narrow band signals, as the distortion produced is often in the signal band.

Consider two sine waves, F1 and F2. When you cube the sum of these two sine waves you will get many different frequencies, including one at 2*F2 - F1 and 2*F1 - F2. If F1 and F2 are close together, then the two afformenitioned combinations of these will be quite close to the fundamentals, and this can cause significant interferance.

Test Tones

To test the various responses of the driver, we need to use specially generated tones. The following are some of the tones to be used:

  1. Pink noise - This is a signal that consists of all frequencies. It should give a flat response across all frequencies.
  2. Sweeps - Frequency sweeps will give a response over a range of frequencies.
  3. Specific Frequency - Used to test the attenuation at a certain frequency.
  4. Non Linear Distorion - 2 sin waves multiplied together. One sin wave at full power, another at 1/10th power. See Intermodulation Distortion.
  5. Linear Distortion - A signal consisting of 4 cycles of a sin wave, multiplied by a Blackman Window. This will result in a pinging sound and can be used to measure fall off and decay distortion.

Freqency Response

The Frequency Response specification helps to describe the range of frequencies or musical tones a speaker can reproduce, measured in Hertz. The range of human hearing is generally regarded as being from 20Hz through to 20kHz. A speaker that could reproduce that range would sound natural, although there is no guarantee. The most important as[ect that determines a speaker's frequency performance is not its width or range, but whether it's able to reproduce all the audible frequencies at the same volume at which they were recorded.

You don't want the speaker to change the "mix" of tones; that would ruin the quality of voices and instruments, making them sound unnatural. Ideally, you want the sounds that are on the recording to be reproduced as they were recorded, without the speaker changing the sound. In other words, if you made a recording of all the audible tones at the same volume and played that recording through a speaker, you'd want all the audible tones to come out at the same volume. This is one way of measuring speakers. A signal that's comprised of all frequencies at equal volume is fed into a speaker that sits in a room with no reflective surfaces. A calibrated microphone is placed in front of the speaker and feeds the speaker's output into a machine that plots the frequency vs. amplitude as shown in Figure A.

Kfig1.JPG

Now take a look at the graph in Figure B. The flat line on the graph indicates that the speaker is "flat"; it reproduces all the musically relevant tones at the same volume. That doesn't mean that a "flat" speaker will play all recorded sounds at the same volume. It means that it will treat all sounds equally; it won't force its will on the music but will allow you to hear the music as it was recorded. A flat response means that the speaker reproduces sound accurately.

Frequency Response In Context
A big improvement would be a frequency response number that also includes the amplitude tolerance. This tells you that the amplitude of the speaker's response relative to frequency and does not deviate more than 3 Decibels from the center line.

Kfig2.JPG

Take a look at Figure C & D; do you think they will sound similar? No! They won't sound even remotely like one another. Speaker C will have "one note" bass and will make voices and other instruments sound unnatural, however Speaker D will sound smooth and more natural.

Speaker D has smoother and gentler amplitude variations. In contrast, speaker C's amplitude variations are more extreme and sharp. Experience has shown speaker designer with rapid changes in response produce a sound that is more fatiguing, less pleasing and subjectively less accurate.

Now look at the response of the speaker in Figure E. This speaker exhibits a smooth response curve with low amplitude variations, so you'd expect a fairly natural sound; however, the bandwidth of these errors is very broad, and experience has shown us that even low volume variations are audible if they cover a broad range of frequencies. In this case, Speaker E would have rich bass, prominent treble and be somewhat recessed in the midrange. Audiophiles call this "The Smile Curve".

Matlab Code

Boost and Cut

By using the parmeq filter at different frequencies

[b, a] = parmeq(1, 1.5, 1.25, 82/4000, 30/4000)
y2 = filter(b, a, y2);

%Where 1 is our reference, 1.5 our boost, 1.25 our bandwidth gain, 
%82 is the chosen frequency, and 30 is the range at which the boost will occur.
%Also b & a represent the numerator and denominator coefficients respectively.

Parmeq Filter

%parmeq.m - second-order parametric EQ filter design
%[b, a, beta] = parmeq(G0, G, GB, w0, Dw)
%b = [b0, b1, b2] = numerator coefficients
%a = [1,  a1, a2] = denominator coefficients
%G0, G, GB = reference, boost/cut, and bandwidth gains
%w0, Dw = center frequency and bandwidth in [rads/sample]
%beta = design parameter
%for plain PEAK use:  G0=0, G=1, GB=1/sqrt(2)
%for plain NOTCH use: G0=1, G=0, GB=1/sqrt(2)

function [b, a, beta] = parmeq(G0, G, GB, w0, Dw)
beta = tan(Dw/2) * sqrt(abs(GB^2 - G0^2)) / sqrt(abs(G^2 - GB^2));
b = [(G0 + G*beta), -2*G0*cos(w0), (G0 - G*beta)] / (1+beta);
a = [1, -2*cos(w0)/(1+beta), (1-beta)/(1+beta)];

Blackman Window

a0 = 0.42;
a1 = 0.5;
a2 = 0.08;
N = 1024;
n = 0:1:1024;
w = a0 - a1*cos((2*pi.*n)/(N-1)) + a2*cos((4*pi.*n)/(N-1));

Sweep

clear
Fpk=20000; %Peak Sweep Frequency (Should be less than Fs/2)
N=2^16; %Number of Samples (Dont make it too big, will take a long time to calculate)
Fs=44100; %Sample Frequency

t=0:1/Fs:(N-1)/Fs;
f=-Fs/2:Fs/N:Fs/2-Fs/N;
x=sin(2*pi*Fpk/(2*(N/Fs)).*(t.^2));

micrecorder = audiorecorder(Fs,8,1);

sound(x,Fs);

record(micrecorder);

pause((N/Fs)+1);

stop(micrecorder);
sounddata = getaudiodata(micrecorder, 'double');
sounddata = sounddata.'; %transpose matrix
n=length(sounddata)
sounddata(:,(N+1):n)=[]; %remove unwanted elements off the end of array

figure(1);
subplot(2,1,1);
plot(f,abs(fftshift(fft(x)/length(x))));
subplot(2,1,2);
plot(f,abs(fftshift(fft(sounddata)/length(sounddata))));

figure(2)
subplot(2,1,1);
plot(t,x);
subplot(2,1,2);
plot(t,sounddata);

Test Code - Ping

During testing this code seems to bring out lots of harmonics. It does three pings @2205Hz about 2.5s apart, and then does one big graph of it all showing both time domain and frequency domain responses.

clear
N=2^17; %Number of Samples (Dont make it too big, will take a long time to calculate)
Fs=44100; %Sample Frequency
P=100; %Pulse width (in samples)
O=2^16; %Pulse offset from zero

t=0:1/Fs:(N-1)/Fs;
f=-Fs/2:Fs/N:Fs/2-Fs/N;
micrecorder = audiorecorder(Fs,8,1);

t1=0:1/Fs:400/Fs;
x=sin(2*pi*2205.*t1);
x=cat(2,zeros(1,O),x);
x=cat(2,x,zeros(1,O));
n=length(x);
x(:,(N+1):n)=[];

%Run 1
sound(x,Fs);
record(micrecorder);

pause((N/Fs)+1);

stop(micrecorder);
sounddata1 = getaudiodata(micrecorder, 'double');

sounddata1 = sounddata1.';
n=length(sounddata1)

sounddata1(:,(N+1):n)=[];

%Run 2
sound(x,Fs);
record(micrecorder);

pause((N/Fs)+1);

stop(micrecorder);
sounddata2 = getaudiodata(micrecorder, 'double');

sounddata2 = sounddata2.';
n=length(sounddata2)
sounddata2(:,(N+1):n)=[];

%Run 3
sound(x,Fs);
record(micrecorder);

pause((N/Fs)+1);

stop(micrecorder);
sounddata3 = getaudiodata(micrecorder, 'double');

sounddata3 = sounddata3.';
n=length(sounddata3)
sounddata3(:,(N+1):n)=[];

figure(1);
subplot(4,2,1);
plot(f,abs(fftshift(fft(x)/length(x))));
subplot(4,2,3);
plot(f,abs(fftshift(fft(sounddata1)/length(sounddata1))));
subplot(4,2,5);
plot(f,abs(fftshift(fft(sounddata2)/length(sounddata2))));
subplot(4,2,7);
plot(f,abs(fftshift(fft(sounddata3)/length(sounddata3))));

subplot(4,2,2);
plot(t,x);
subplot(4,2,4);
plot(t,sounddata1);
subplot(4,2,6);
plot(t,sounddata2);
subplot(4,2,8);
plot(t,sounddata3);

Matlab GUI - Harmonic Distortion

When the ping button is pressed the app pings and records at the same time, then just records background noise, then pings and records at the same time again, then again records back ground sounds.

The spectrum of the the ping recordings are averages, and so are the background recordings, then the spectrum of the background is taken away from the ping recordings to try to reduce noise in the spectrums.

The program pings at 1/20 of the sample frequency to ensure clean pings and then searches for peaks at Fs/20, 2Fs/20, 3Fs/20 etc. The peaks that it finds are then shown on the gui, as well as a calculation of harmonic distortion.

Problems Encountered

One of the most common problems encounted was the level of background noise was too high to give any accurate readings during class time. To rectify this, we needed to do the measurements during a time the lab was empty.

Due to the layout of the lab room, various reflections were recorded from walls, chairs and equipment. To reduce the reflections the speaker / microphone setup were placed as far away from the other equipment as possible. The setup was placed on the floor so the carpet could absorb some reflections.

Each of the microphones that were tested gave a different response curve. We made a compromise between the frequency range, response and output level to select the microphone.

Whilst conduction the white noise test, only a few microphones were able to return a result. This limited our selection of microphones that could give an accurate response to the output of the speaker.

Conclusion

The project was a success in that we could characterise loudspeakers and adjust their frequency response to make it more ideal. Although we could have made their responses perfectly ideal, this would require more coding, better testing equipment and more time. For the purposes of this assignment and this subject, the outcome was sufficient.

Another area of success in this project was the learning of signal processing theory. In the process of speaker testing and writing the Matlab program, we were continuously researching, learning and applying audio engineering principles.

References

In Text

  1. white noise: Definition and Much More from Answers.com 10-11-2006
  2. Frequency response - Wikipedia, the free encyclopedia 16-10-2006

Other References

Datasheet
http://www.shure.com/stellent/groups/public/@gms_gmi_web_ug/documents/web_resource/us_pro_prologue12_ug.pdf

Documentation
http://en.wikipedia.org/wiki/Frequency_response
http://img.ecoustics.com/ads/adview.php?what=width:728&n=be52050a
http://forum.ecoustics.com/bbs/messages/34579/131062.html

Using an FIR filter in an RPvds circuit to normalize speaker output.
http://www.tdt.com/news/NL_summer/NLCalibrate.htm#measure

Fast Fourier Transform
Press, Teukolsky, Vetterling, Flannery, Numerican Recipies in C: The art of scientific computing 2nd Ed. 1992, Cambridge University Press.

Matlab
http://www.matlabgui.com/
http://www.ece.rutgers.edu/~orfanidi/intro2sp/mdir/parmeq.m

Test Tones
http://www.eminent-tech.com/music/multimediatest.html
http://www.linkwitzlab.com/x-mid_dist.htm
http://en.wikipedia.org/wiki/Window_function
http://www.dogstar.dantimax.dk/testwavs/

Intermodulation Infomation
http://zone.ni.com/devzone/conceptd.nsf/webmain/EA4070D1207929B386257147002EA35F
http://en.wikipedia.org/wiki/IMD3

Loudspeaker Defect Detection
http://zone.ni.com/devzone/conceptd.nsf/webmain/B48784823FB04A1E862570830052B920

Powering Microphones
http://www.epanorama.net/circuits/microphone_powering.html

Personal tools