[pulseaudio-discuss] patch to add low pass filtered lfe output via module-lfe-lp

Justin Chudgar justin at justinzane.com
Thu Feb 28 22:56:24 PST 2013


Thank you for the feedback. I'll be out of town tomorrow, but I'll work on 
fixing/improving much of what you mentioned over the next few days. 

I was planning to address the channel preferences somehow. I know that some 
recievers have a "small/medium/large" setting for each channel-pair indicating 
the low freq capabilities of the attached speakers. This seems like a good 
idea from the perspective of limiting the audio knowledge required of the end 
user, but becomes a nightmare with the current "key=value" modargs system.

As far as the 1st order butterworth, it was simply the easiest thing for me to 
get working. I'm a total novice when it comes to technical audio and signal 
processing, so I am very interested to hear specific recommendations on the 
actual lowpass/highpass implementation. I'm planning on trying librtfilter just 
to be able to quickly listen to different implementations. If there is a better 
way, let me know.

Regarding the phase issues, duhhh, what? :) I actually wondered about that, 
but, I have no knowledge or experience to base a judgement on the matter. I 
know that for my wife and I, we might listen to an actual properly mastered 
movie 3-4 times a year. We listen to crap streaming "tv" with compressed-to-
hell mono or stereo almost daily and well mastered stereo audio daily. So, for 
me, accidentally mangling the presentation of well mastered surround tracks is 
of negligable concern. Getting stereo or mono to sound good from all 6 
speakers matters very much.

My motivation in writing this was to get decent sound out of the 12"x110" 
transmission line subwoofer and 5 driver center-channel speakers that I built 
-- also without prior knowledge. :) I'd like to know what use-cases of 
variable bandpass per channel seem to be most significant for pulseaudio 
generally.

Just to be explicit, links to documentation about appropriate filters would be 
greatly helpful.

Thanks!

-- 
#---------------------------------------------------------------------------#
Justin Chudgar | 530-921-0738 | 5040 Saddlehorn Rd, Weed, CA 96094
#---------------------------------------------------------------------------#

On Friday, March 01, 2013 12:14:54 PM Alexander E. Patrakov wrote:
> 2013/3/1 Justin Chudgar <justin at justinzane.com>:
> > As per discussions with FordPrefect. tanuk, theBear, ohsix, etc. on
> > #pulseaudio.
> > 
> > This is an initial, working version. Testing and review are most welcome,
> > plus thoughts on a better lp filter.
> 
> Disclaimer: I only did the review, without any attempt to compile and
> test the code.
> 
> I assume that it is for the situation where some speakers cannot
> reproduce low frequencies accurately (and, to be precise, start
> distorting other frequencies when given a signal with low-frequency
> components).
> 
> Your patch (besides obvious code-style issues and unused options) has
> a hard-coded assumption that only the center channel needs to be
> filtered. Windows rightfully has a preference for this: sometimes all
> 5 satellites are tin cans that should not be given low-frequency
> content (because otherwise they will distort other frequencies, too),
> sometimes only the front and cerner speakers, sometimes only the
> center. I think that this preference should be exposed somehow, but
> should stay specific to a sink (i.e.: apply that filter to my onboard
> card, but not to the USB card).
> 
> Also, it is important to make sure that the filtering operation adds
> to the LFE channel the sum of low-frequency signals that were filtered
> out from the satellites. This is important because of 5.0 content
> (such as concerts) that does contain low frequencies in all channels,
> but doesn't provide the LFE channel, and some people want to listen to
> such content on "5 tin cans + subwoofer" systems.
> 
> In your patch, the filter is a first-order IIR filter. Are there any
> considerations why this is chosen? If I were designing this, I'd at
> least investigate and document why a second-order Butterworth or
> Bessel filter, or even a FIR-based filter is not usable for extractlng
> the LFE signal that should be fed to the subwoofer (or is it?).
> 
> And, because you are filtering the LFE channel, you are inevitably
> introducing some phase shift, and it might be perceived as something
> that destroys the coherent sound field created by satellites and the
> subwoofer. I am not sure whether filtering the LFE channel itself (as
> opposed to subtracting low-frequency content from all other channels
> and adding it to LFE) is a good idea at all. If the LFE channel is
> obtained by decoding a DTS track in software, then there is no way to
> obtain non-LFE content in the LFE channel, because it is encoded at
> the 375 or 750 Hz sample rate in the file and pre-filtered during
> resampling back to 48 kHz. AC3 also has special processing of the LFE
> values - namely, only a fixed number of exponents is transmitted, thus
> effectively limiting the bandwidth. I.e., in both cases, it is safe to
> assume that the LFE channel is already pre-filtered. If you do want to
> filter it again, please use a filter that has a constant or
> approximately-constant delay (i.e. Bessel filter or a FIR-based one),
> and apply the same delay to satellites. Just for your reference, in
> DTS, both the LFE reconstruction filter (also used for pre-filtering
> during encoding) and the subband filter used for encoding and decoding
> signals for satellite speakers have the length of 1024 samples and are
> specified as FIRs, so no phase delays accumulate during the
> encode-decode process.


More information about the pulseaudio-discuss mailing list