This is a copy of the VBA discussion at the previous Yahoo forum.
Actually it is a bit quiet here in the forum. So I like to report about a discussion in a German forum where I have written a series of messages about the "virtual bass array".
You may know already about the principles of a double bass array with speakers in the front as usual plus some speakers at the rear wall to compensate the longitudinal room modes.
The idea has been to discuss a solution without such rear speakers and to compensate the echoes along the longitudinal axis by the main speaker itself.
So I also like to report here about the virtual bass array.
The result and the way to get it should be interesting for all Acourate users. BTW it also shows that you can do much more with Acourate than just follow the given macros.
I will show the procedure step by step. You should be able to do the same by yourself.
First some theory about a system with assumed ideal behaviour:
A speaker is positioned at the frontwall with zero distance. It sends a perfect Dirac signal. The soundwave moves to the back wall (behind a listener, the listener is not discussed here) and is reflected there. Some energy is lost, thus the reflection level is reduced by a factor x. Now the reflectied soundwave moves to the front wall and is also reflected there with some enery loss by a factor x.
So we get an echo after a time t = 2 * room length(speed of sound. The echo can be considered as a new played sound by the speaker. The next echo cycle starts.
As a result we will get a sequence built of the original Dirac pulse and the following echoes (with descending amplitudes).
You can design such a pulse response by Generate - Testsignal - Length 65536, Set to one @ sample 0, length 1. Copy the pulse with Ctrl-C to the other curves 2-6. Lower the amplitude of the pulses accordingly with TD-Functions - Gain (here 0.7 with power of 1, 2, 3 ...), rotate the pulses to right direction by TD-Functions - Rotate with a number of samples according to the echo time. The sum of the single pulses taken by TD-Functions - Add will lead to the shown result.
Of course we are not happy with the frequency response. We like to have a horizontal flat and smooth frequency response. So we need a filter with an inverse response. In this case the responses of the echo signal and the filter will add to zero (filtering in time domain = convolution, filtering in frequency domain = multiplication, filtering in logarithmic frequency doamin = addition).
The echo signal is a minimum phase signal. The inverse of a minphase signl is also minphase. So we can simply apply the Acourate function FD-Functions - Amplitude Inversion minphase and we will get the next result.
The inverse frequency response is as expected. But more interesting is now the time domain behaviour of the filter. It also consists of the first Dirac pulse followed by another negative Dirac pulse with amplitude 0.7 ! The distance is exactly the given echo time. What does this mean?
It means that we compensate all the echoes by playing the music first in its original format (see first Dirac pulse part) and by playing (exactly at the time of the first echo reflected from the front wall) the music signal with reduced gain and inverted polarity. In ideal case the compensation signal will cancel the echo perfectly and there will be no further echo anymore.
Our front speakers play the role of a virtual bass array. We do not need a second system (with a DBA system we have another speaker at the rear wall. It will compensate the echo of the rear wall, thus the soundwave will travel only one time through the room).
The inverted frequency response of the filter exceeds 0 dB. We have to consider that the compensation signal plus the original signal will exceed 0 dBFS (full scale). To avoid clipping the filter gain has to be lowered accordingly. This is the price to be paid. Of course the following amplifier may correct it.
In our example we have designed a FIR filter. A very simple one. It is also possible to send the music signal through a delay, to invert it and to add it to the original music signal. So no FIR filter is required, a stupid DSP may do it. The disdvantages of such a solution will be discussed later.
We have taken an ideal example. Beside the gain reduction in reality the echoes will have their own frequency response, the room will act as a filter to the echoes (think about absorption and diffusion).
In fact we complain about the usual boost of the lower frequencies. The task is to get rid of the room modes in the lower frequency range. So we must do a bit more and I will write about in a next message.
It is also interesting that the echo cancellation will also work in case of a distance between front speaker and front wall. You may prove by yourself, that the echo path is always the double room length.
As the echo path is constant we can apply the echo cancellation. It is not possible e.g. for sidewall reflections.
We have learnt in part 1 that it is possible to compensate an echo by a compensation pulse response. So here I like to describe the way from theory to practice.
What we do not really know is how the echo looks like in reality. We do not know the damping factor and especieally we do not know the pulse response of the echo/echoes and the frequency response/s. It will be very difficult to predict the shape of the echo signal after several reflections. And we must be aware that it is difficult too to measure the echos separately. In our usual rooms the echo is already there before a first cycle of a low frequency has taken place. With a frequency of 20 Hz the echo signal has crossed the room several times with one cycle time of 50 ms.
Ok, but we can still proceed and shoot a bit in the dark.
In a first test a measurement of an uncorrected system has been taken. The length of the room is 4.74 m, at least one know data.
So we like to design an echo filter. The start of the filter is clear, it is a Dirac pulse. It takes cre for a 1:1 playback of the music.
The pulse response starts at sample 0 with amplitude 1, all other values are 0.
In a first approach we are not interested in frequencies above 150 Hz. This selection is arbitrary, you may play with other values.
So we create a lowpass filter by a rough assuption that the echo signal behaves like such a lowpass. With Acourate Generate - Crossover - Butterworth - 150 Hz and 4th order we can quickly create it. The we compute the minimum phase by TD-Functions - Phase Extraction - minphase because we expect the echo to react causal. Thus there we do not expect any pre-ringing.
Thus we have got a pulse response. Please note the amplitude scale left of the plot. Yep, the amplitude it really very small compared to the Dirac pulse with amplitude 1.
Now the lowpass filter has to be delayed. For small delays we can simply use the rotate function in Acourate. Vut how many samples? So we calculate:
4.74 m * 2 = 9.48 m double room length divided by 340 m/s speed of sound = 27,88 ms = 1338 samples (@ 48 kHz samplerate). We have to subtract the peak position of the lowpass pulse, in this case 167 samples. So we rotate the pulse by TD-Functions - Rotate with 1171 samples to bring the pulse peak to position 1338. Furthermore we apply TD-Functions - Gain - factor 0.7 to simulate a damped echo (I'll later explain this factor). The operations result in:
As we need a pulse with opposite sign (see part 1) we apply TD-Function - Change Polarity.
Finally we can ad the Dirac pulse and the prepared lowpass pulse by TD-Function - Add and get
The resulting filter has the desired pulse response and it shows a frequency response as shown in the next picture
We are ready with a first echo compensation filter, the design is quite simple.
Virtual Bass Array, part 2 has described an approach to cancel the echo along the longitudinal axis in the listening room. Now it has to be approved in practice. The described properties should be detectable also in a measurement.
So here is a measurement taken in the example room of 4.74 m length:
The picture shows the already known frequenc response of the echo compensation pulse together with the frequency response of the room (up to 300 Hz). Especially the resonance peak at about 36 Hz can be immediately seen, the compensation has a corresponding dip. Great, it fits together.
For higher harmonics there are deviations. With a high probability it is possible, that our compensation pulse is not optimal. We do not know the real behaviour of the echo signal. But also we have to keep in mind that the measurement includes influences of other room modes and reflections.
We can simulate the compensation by convolving the measurement and the compensation pulse, TD-Functions - Convolution
At 36 Hz the resulting amplitude is lowered by about 10 dB, this is pretty much. BTW, the previously described damping factor 0.7 has been found by the simulation. A greater factor results in a dip in the frequency response. A smaller factor causes a remaining peak. Now the curve is quite smooth (still a big bass boost due to another reason). In the 50 to 60 Hz range a dip is boosted y the compensation.
How does it sound? A music file has been prep'd with the compensation pulse. There is a bass drum that shows a big bass boost in uncorrected playback. I'm sure you can imagine. Now just with the simple echo cancellation the bass drum sounds dry and precise. So the virtual bass array works.
Of course we must expect playback colorations (btw we must also expect this by a DBA approach). And of course I recommend an overall room correction on top of the virtual bass array. This means to use the compensation pulse as a prefilter and to convolve it with a room correction filter to get a final correction. The prefilter is quite stable and it may assist in getting a more stable correction.
Anyway we have learnt a bit more about acoustics and about the functions of Acourate.