Horn Loudspeaker Simulation part 2: Adding a Driver

In Part 1 we simulated the radiation impedance and horn throat impedance. To make a complete horn speaker, we need to add a driver, a rear chamber and a front chamber. Let's first look at the driver and how we can simulate it. 

Moving Coil Driver

I will not go into much theory here, it is covered in the book. But let's have a quick look at the equivalent circuit of a moving coil driver, below. 

DriverEquivalentFull

From left to right, we have the input voltage to the driver, e_g, electrical impedance simulated by Re and Le, the electromechanical coupling Bl, mechanical losses represented by Rms, moving mass (excluding air mass) Mmd, suspension compliance Cms, and the diaphragm area Sd, coupling the mechanical and acoustical domains. Finally, we have Za, the acoustical load. Having three domains it a bit inconvenient, so we can convert everything to the acoustical domain, for instance:

DriverEquivalentAcoustic

 In the end, we want to calculate the equivalent Thevenin source driving the acoustic load:

DriverEquivalentReduced

I will show how to calculate ps and Zs in the code. It can be done in several ways, one way involves T-matrices, but I'll show a method that hopefully is easier to follow.

% Define frequency range
fmin = 10;
fmax = 20e3;

% Define driver parameters (MKS units)
Sd = 350e-4;
Bl = 18;
Cms = 4.0e-4;
Rms = 4.0;
Mmd = 20e-3;
Le = 1e-3;
Re = 6.0;

% Define input voltage
eg = 2.83;

%% Calculations
freq = logspace(log10(fmin), log10(fmax), 533);
w = 2*pi*freq;
k = w/c;

% Driver calculations
% 1. Calculate the mechanical equivalent of Ze
Ze = Re + 1i*w * Le;
Zme = Bl^2./Ze;

% 2. Calculate total mechanical impedance
Zm = Rms + 1i*w * Mmd + 1./(1i*w * Cms);
Zmt = Zme + Zm;

% 3. Calculate total acoustical source impedance
Zas = Zmt ./ Sd^2;

Horn Loudspeaker

A simple front-loaded horn has a front chamber and a rear chamber.

FrontLoadedHorn

The acoustical equivalent schematic for this configuration is similar to the driver equivalent above, with the front and rear chambers added as acoustic compliances.

HornSpeakerEquivalentAcoustic

Cab is the rear chamber compliance, and Caf is the front chamber compliance. Zal is the throat impedance of the horn. The compliance of an air volume is

AcCompliance

The impedance of a compliance is

ComplianceImp

The acoustic load is the horn throat impedance Zal in parallel with the impedance of Caf, and this combination in series again with the impedance of Cab. We need to know the volume velocity into this load, which we can use to find the pressure at the horn throat, which again enables us to find the volume velocity into the throat, and from there we find the power radiated by the horn (assuming the horn is lossless). So, step by step: The front load is

FrontLoad

The rear load is just the impedance of Cab, so the total acoustic load is

TotalLoad

The volume velocity is

VolVel

From this we find the pressure at the horn throat as the pressure across Z_f

Pth

And we find the throat volume velocity from that:

Uth

This is all basic application of Ohm's law for acoustical impedances. Finally we find the acoustical power into the horn:

ThroatPower

In code, the calculations look like this:

% 4. Calculate the acoustic source pressure

ps = eg*Bl ./ (Sd * Ze);

% Front and rear chamber calculations
Cab = Vrc / (rho*c^2);
Caf = Vtc / (rho*c^2);
Zcab = 1./(1i*w * Cab);
Zcaf = 1./(1i*w * Caf);

% Calculate radiation impedance
a = sqrt(S2/pi);
Z2 = rho*c/S2 * circularPistonIB(k*a);

% Calculate horn matrix
Zrc = rho*c;
[a12,b12,c12,d12] = expoHornMatrix(k,Zrc,S1,S2,L12);

% Calculate and normalize throat impedance
Z1 = (a12.*Z2 + b12) ./ (c12.*Z2 + d12);
Z1norm = Z1*S1/(rho*c);

% Total load impedance
Zf = Z1.*Zcaf ./ (Z1 + Zcaf);
Zr = Zcab;
Zal = Zf + Zr;

% Volume velocity into the load
UaL = ps ./ (Zas + Zal);

% Power into the load
pth = UaL .* Zf;
Uth = pth ./ Z1;
Pa = abs(Uth).^2 .* real(Z1);

 We can now convert power to pressure by assuming that all the power is radiated into the 2pi hemisphere we assumed when calculating the radiation impedance. 

AcIntensity

AcPressure

SPL eq

This gives the SPL response at the 1m referene distance. Below I have plotted the SPL response overlaid the response calculated by Hornresp. (A function to import Hornresp data into Matlab is included with the files.)

HornSPL1

Since we have the volume velocity from the driver, it's easy to calculate the diaphragm velocity, and from that the diaphargm displacement:

Displacement1

Below is the displacement plotted against the Hornresp results, again a good match.

HornDispl1

 Finding the electrical impedance is a bit more involved, we basically work our way back from the acooustical load impedance, convert it to mechanical impedance, add the mechanical impedance of the moving system, then convert it to electrical impedance, and finally add the blocked impedance from Re and Le.

Zma = Zal * Sd^2;
Zmt = Zma + Zm;
Zem = Bl^2 ./ Zmt;
Zet = Zem + Ze;

The resulting electrical impedance is shown below, also comparing 

HornEZ1

For reference, here is the Hornresp input screen for the above horn. The exported Hornresp record is also included in the files. Note that it must be simulated with the Resonances Masked option (Tools -> Options), since we are simulating with the very simple acoustic compliance model for the front and rear chambers.

HRinput1

The .m files for this post can be found here.