This page discusses methods of interfacing passive crossover circuits and real drivers for the Virtual Crossover.
To accurately predict the system response to a particular set of passive crossover circuits, realistic models of the drivers must be included. There are two basic requirements for this. First, the complex input impedance of the driver must be measured, so that you know how the crossover circuit is terminated. And secondly, the driver impulse response must be measured, in order to determine what the driver output will be for a particular crossover circuit. The Virtual Crossover can be used to carry out both these measurements.
Figure 1 illustrates
the overall method of coupling the crossover
circuit and the driver, and of predicting the
driver output:
is the
input voltage to the crossover circuit and
is the current entering the circuit.
is the complex input impedance of
the driver; since it is given in the frequency
domain, it is most convenient to solve this
circuit in the frequency domain. This can
be done with the IMPRSPZ.C program, if
is specified as the terminating impedance. The
way IMPRSPZ.C works is as follows. At each frequency,
it is initially assumed that
,
the
current into the driver, is unity. Then the initial
voltage across the driver is just
.
IMPRSPZ.C
sets these conditions and solves the circuit back to
the Vin terminals. But Vin is known both
in the time and frequency domain, it might be for example the
equal-ripple lowpass filter discussed on the page about
issues in numerical modeling
of circuits for the Virtual Crossover.
So IMPRSPZ.C compares
what it calculates at the Vin terminals to the
that it knows is the right answer.
Of course in general the values will not be the same,
but if the circuit is linear, the
value can just be scaled so that we obtain the correct
.
In this manner, by going through all
the discrete frequencies and scaling to obtain the
correct
,
we finally end up with
the correct
at the driver input terminals.
And once
is known, it can be
convolved with the measured driver impulse response
to obtain the predicted driver output, as indicated
by the lower two boxes in Fig.(1).
As an example, I will present the results of
this method for two Dynaudio D76-af midranges
in series that I used in one of my speaker
systems. Figure 2 shows a
portion of the measured impedance magnitude,
out to 10kHz, for the drivers:
This can
be done in different ways, however. One way
is to directly terminate the crossover circuit
with the
of Figs.(1) and (2),
and to use IMPRSPZ.C
to calculate
at the driver
terminals. This method is fine if you just want
to observe the basic response of the drivers to
a crossover circuit. However, the Virtual Crossover
also allows you to load
as a
filter for the drivers and play music, essentially
simulating the passive crossover circuit in
real time; in that
case, the low-level noise that comes about by
measuring
can be a problem.
To get around this noise issue, we can first
design an impedance compensation network so
that the impedance presented by the drivers
is nearly a constant resistance. Then, to a
very good approximation, we can assume that
in Fig.(1) can be represented by just a
resistor. Then we can carry out either a
time-domain or frequency-domain calculation
of the crossover filter
,
without incurring any of the noise brought
about by the impedance measurement process.
For example, the following impedance compensation
circuit (RZ and CZ) causes the D76-af midrange
drivers to present nearly a constant resistance
for frequencies above the driver resonance:
I offer a utility called ZOBEL.C which reads in
a measured complex driver impedance
as well as an impedance compensation circuit
(RZ and CZ in this case), and outputs the
impedance as transformed by the compensation
network. If I run ZOBEL.C, read in the
complex
of Figs.(2) and (3), and the RZ, CZ values
of Fig.(3), the following transformed impedance
magnitude results:
To clarify these ideas, here is a actual midrange
crossover circuit that I used to obtain a filter
for use in the Virtual Crossover, for the two
D76-af midranges in series:
at 322 Hz, and LP,CP are chosen to reproduce
the proper width of the resonance.
Note that the output from Fig.(5), Vout, is taken before the RP-LP-CP network; this is because the impedance peak at resonance is actually a part of the driver, not of the crossover circuit. In my crossover I decided not to eliminate the impedance peak at resonance, because it seemed to compensate for a dip in the combined response of all the drivers.
Using either IMPRSP.C to carry out a
time-domain simulation of the circuit
in Fig.(5), or using IMPRSPZ.C
and specifying a file with constant
terminating impedance, here is the result
for the waveform at the Vout terminals
of Fig.(5),
where a 30kHz equal-ripple low-pass
filter was impressed at the input:
Taking the FFT of the time-domain waveform
of Fig.(6), we obtain the following frequency
response for the midrange crossover filter:
The waveform in Fig.(7) is fine as far as telling us
what the response of the midrange crossover circuit is.
However, it doesn't tell us what the response of the
midrange drivers will be, when they are fed by this
crossover filter. Referring back to Fig.(1), what we
have so far determined is
in that figure. To determine the actual response
of the midrange drivers, we could pursue one of
two routes at this point: we could either load
the filter of Fig.(6) into the Virtual Crossover
and carry out a measurement of the driver response
through the crossover filter; or, if we have previously
measured the impulse response of the midrange drivers,
we could convolve the crossover filter response of
Figs.(6) and (7) with the measured driver impulse
response. Here I will show an example of the
latter procedure. Let's say we have used the
Virtual Crossover to obtain the impulse response
of the D76-af midrange drivers mounted in the
speaker enclosure; in my case the following
result is obtained:
The final step in obtaining the midrange drivers'
response from the crossover of Fig.(5) is to
convolve the driver impulse response of Figs.(8) and (9)
with the crossover circuit response of Figs.(6) and (7).
I wrote a program called XOVR.C which reads in both a
crossover filter response and a driver impulse response,
and carries out the convolution (it is convolution in
the time domain, but multiplication in the frequency
domain) to determine the overall driver response to
the crossover. In fact the XOVR.C program can go one
step further, it can read such responses for all the
crossover filters and drivers in the system, calculate
all the individual responses, and combine them all
vectorially with specified gains and time delays,
to determine the complete speaker system response
for a given crossover. For now I will just show
the result for the midrange drivers by themselves.
If I run XOVR.C and specify the driver impulse response
of Fig.(8) as well as the crossover circuit response of
Fig.(6), I obtain the following result in the time
domain: