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>

next in thread | previous in thread | raw e-mail | index | archive | help
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



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