[pulseaudio-discuss] Bass management

Alexander E. Patrakov patrakov at gmail.com
Sat Sep 23 13:59:58 UTC 2017

2017-09-22 22:12 GMT+05:00 Christian Weinz <christian at madez.de>:
> Hello,
> I use headphones, and have tactile transducers on my chair. This makes
> the audio sound louder and feel more intense. This is good for my ears
> and my neighbours.
> This setup requires 2.1 output. I tried the GNOME-Settings to set the
> output to 2.1. That option was not available. I also tried alsamixer,
> paprefs and pavucontrol, to no avail. I played around with
> hdajackretask, and finally, after overriding both the Pink Mic port to
> Center/LFE and the Blue Line In to Back, I can select 2.1 audio in the
> GNOME-Settings. This was difficult to setup.
> Then, however, I had the full-range signal on both my headphones and on
> the synthesized LFE channel. This means I hear voices in my chair. To
> prevent that, I set the lfe-crossover frequency, but then I lose the
> bass in my headphones. Both is bad.

Thank you for accurately describing the frequency responses both of
the headphones and the transducer. In particular, for confirmation
that there is a significant overlap, which is the necessary condition
to make sure that what we'll design will work not only for your

> Now I found the patch "Add option to disable highpass-filter on non-lfe
> channels." by Markus Ebner at
> https://pw-emeril.freedesktop.org/patch/171424/
> This patch, if it works at advertised, would solve my problem. But the
> patch was rejected. I would comment there, but because the websites
> certificate is invalid, I cannot create an account to comment, since
> Google's reCAPTCHA refuses to work.
> To summarize, for my setup I need the full-range stereo signal on my
> headphones and a low-pass filtered LFE signal for the transducers. Is
> there a way to do this with PulseAudio?

The patch will not solve your problem acceptably, because the low
frequencies from the headphones and the transducer will not be
in-phase, due to the delay created by the filter.

I think (but am not sure, input from other DSP experts is welcome)
that the following is better than the approach in the original patch:

1. Apply a lowpass filter, in the form of two cascaded 2nd order
Butterworth filters, to each channel. Store the result.
2. Apply a matching highpass filter, in the form of two cascaded 2nd
order Butterworth filters, to each channel. Also store the result.
3. Send the sum of low frequencies (as stored on step 1) for each
input channel, appropriately scaled, to the LFE channel.
4. For each non-LFE input channel, add low frequencies extracted
during step 1 to high frequencies extracted during step 2. Send the
result to the corresponding output.

Note: step 4 does not reproduce the original waveform. What you get is
an "allpass filter", which changes phase (so that it matches what we
send to the LFE channel), but not amplitude.

> To add on this question, my Denon AVR X3100W has individual cut-off
> frequencies for each channel, and the subwoofer has its own low-pass
> frequency. How can I have this fine-grained control with PulseAudio?

We need to reverse-engineer the kind of filtering that they use and
try to find justification, or conditions when it is valid. As I said,
naive attempts of attaching independently-tuned filters to each
channel are Just Wrong from the DSP viewpoint, because of phase.

Alexander E. Patrakov

More information about the pulseaudio-discuss mailing list