Comb Filtering, Feedback, and DC Offset

Jun 29, 2013 at 6:39pm

Comb Filtering, Feedback, and DC Offset

There are a couple very old forums about this, but nothing in a while, and I’m at a loss:

I’m using a high-feedback [comb~] pull pitches out of noisy sounds (like a resonator or string modeling), and then reining the FB back in with some soft clipping (just using [tanh~] for now, but there are more interesting options).

The problem I keep running into is that certain sounds result in something that looks like DC offset when it comes out of the filter; the resulting signal is fully outside of the -1/1 range and then centers back around 0 (using [capture~] confirms this). I’m not sure if this is truly DC offset, but it looks like it. Obviously, this results in the audio dropping out and bizarre things with the [tanh~], etc.

I have tried using a tapin~/tapout~ pair for this project as well, and run into similar problems. I wish I could give a better idea of the sort of input sounds that result in this DC offset, but I’m at a loss as to what causes it — noises and pitches, sometimes loud, sometimes soft.

There’s probably a really simple solution or obvious alternative to [comb~] or taps here…

Thanks in advance for your help.

http://www.lawtonhall.com/

<code>

– Pasted Max Patch, click to expand. –

</code>

#254509
Jun 30, 2013 at 3:25am

Feedback on the comb~ objet never reaches 1.0, right?

As a point of departure you might try high passing the input and output (with a biaquad~ for example) and see if the issue you are experiencing lessens or even stops….

#254525
Jun 30, 2013 at 6:02am

also, have you tried dcblock~ in the feedback chain?

And as an alternative, do you get the same issue with teeth~ ?

#254542
Jun 30, 2013 at 8:20am

gain regulation and DC filtering is a good idea anyway before tanh~, FIR filters, or even dynamics processing.

#254550
Jun 30, 2013 at 8:35am

gen~ has a dcblock operator, which is essentially a biquad~ with the following coefficients:

<code>

– Pasted Max Patch, click to expand. –

</code>

#254552
Jun 30, 2013 at 8:40am

You’ll also have problems with positive feedback coefficients because this will exacerbate any DC that’s already in the signal. (check it out on spectroscope~, and you’ll see that 0 Hz is an a boost band) Negative coefficients will not boost 0 Hz.

Also, as an alternative to tanh, try:
x / (1 + 0.28*x^2)

It’s like tanh from [-1,1] but it asymptotically approaches 0 (rather than ±1) as x goes to ±inf and this helps with DC issues.

#254553
Jun 30, 2013 at 11:40am

Peter, I found your advice about lookup tables here, and I’m trying it with the formula you suggested (y=x/(1+0.28*x^2)).

Can you clarify how you use lookup~ for values outside of the [1,-1] range? (i.e. [4,-4])

Here’s where I’m at, using the [biquad~] coefficients suggested by Emmanuel (thanks!):

<code>

– Pasted Max Patch, click to expand. –

</code>

#254561
Jun 30, 2013 at 5:48pm

I’d skip the lookup table and just directly use the equation because you want the asymptotic return towards zero.

The lookup table is just to replace the expensive calculation of tanh. (Which really isn’t that bad provider you’re not doing tons of them). The range bit: calculate tanh for x between +/-4. (Outside of that tanh is practically +/-1)
Multiply the input to lookup by 0.25.

I think you’ll have better results with the equation, as it is also a handy natural feedback killer.

#254573

You must be logged in to reply to this topic.