Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 May 2014 20:12:45 +1000 (EST)
From:      Ian Smith <smithi@nimnet.asn.au>
To:        Hans Petter Selasky <hps@selasky.org>
Cc:        freebsd-multimedia@freebsd.org
Subject:   Re: OSS mains HUM filtering 50Hz / 60Hz ?
Message-ID:  <20140514193740.D11699@sola.nimnet.asn.au>
In-Reply-To: <53732425.7070600@selasky.org>
References:  <537264F6.5060808@selasky.org> <53732425.7070600@selasky.org>

index | next in thread | previous in thread | raw e-mail

On Wed, 14 May 2014 10:07:01 +0200, Hans Petter Selasky wrote:
 > On 05/13/14 20:31, Hans Petter Selasky wrote:
 > > Hi,
 > > 
 > > Some of my USB audio headsets seems to be picking up mains HUM even if
 > > powered from battery. At first I thought the mains HUM came from the
 > > computer, but then I did some work and I verified my findings by
 > > sampling the AC network using a non-switching power supply. Maybe it

Hmm, by non-switching I suppose you mean via a transformer .. the ripple 
quality won't necessarily be better than a switched supply; it's down to 
the final filtering usually.

Any HV power lines or an electricity sub-station near you? (induction)

 > > does not belong in the FreeBSD audio stack, but I think it would be very
 > > clever to have a configurable band-reject filter in the FreeBSD DSP
 > > framework for 50 and 60Hz? Do we have such a filter mechanism already?
 > > 
 > > Not sure if this is a so-called "feature" or not ... :-)
 > > 
 > > http://en.wikipedia.org/wiki/Mains_hum
 > > 
 > > http://www.selasky.org/hans_petter/hum.png

Are those units mV, or what?

 > I tried the following patch with some success:
 > 
 > === pcm/feeder_chain.c
 > ==================================================================
 > --- pcm/feeder_chain.c	(revision 265912)
 > +++ pcm/feeder_chain.c	(local)
 > @@ -721,7 +721,7 @@
 > 
 >  		/* Soft EQ only applicable for PLAY. */

I'm wondering why Ariff chose to only apply it for playback?

 >  		if (cdesc.dummy == 0 &&
 > -		    c->direction == PCMDIR_PLAY && (d->flags & SD_F_EQ) &&
 > +		    (d->flags & SD_F_EQ) &&
 >  		    (((d->flags & SD_F_EQ_PC) &&
 >  		    !(c->flags & CHN_F_HAS_VCHAN)) ||
 >  		    (!(d->flags & SD_F_EQ_PC) && !(c->flags &
 > CHN_F_VIRTUAL))))
                        cdesc.use_eq = 1;

Can you give a quick pointer to the actual EQ code (just curious as to 
how it's done, having just taken the pcm code on faith so far).

 > And setting:
 > 
 > hint.pcm.0.eq=1
 > hint.pcm.1.eq=1
 > hint.pcm.2.eq=1
 > hint.pcm.3.eq=1
 
If that turns out to be a real solution to this problem, might we then 
need separate en/disabling of PLAY and REC eq?

Here I'm directly generating 24-bit wave files, some of which are around 
50Hz (plus harmonics), and some occasionally as low as ~22Hz, so I need 
specifically to not suppress these on playback, though finding amps or 
headphones that don't dampen these freqs too much can be fun ..

cheers, Ian


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140514193740.D11699>