Cheap non-linear zero-delay filters

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS

Post

mystran wrote: then again tanh() is probably bullshit for those gain-cells too, since they claim most distortion is second order..
Hey Karrikuh, the above is somethig to look into, the "dirty" part you describe might just be too much distortion, since you should remember that tanh(x) has a "boosting" effect - and if you are boosting succesively - the boosts are driving higher into the next non-linearity range(hope that makes sense). I think that people that used OTAs where actually trying to get a cleaner sound and less noise(in theory they should be less noisy), so I don't think they are "driven" that hard. Here are some interisting diagrams which might be of some use as well:

http://vellocet.com/dsp/analog/SelfOscHarmonics.html

Notice all them even harmonics :wink:

Also if you haven't read (which I doubt) Timothy E. Stinchcombe's excellent Study of the MS10 & MS20 Filters - make a cup of coffee and get cracking! My head still hurts every time I read and re-read it :ud:

Regards
Andrew
Last edited by Ichad.c on Sat May 19, 2012 8:32 pm, edited 1 time in total.

Post

Hey mystran, a random Q out of curiosity:

Would you think your approach/methods for Zero-Delay filters could be applied to the Sallen-Key topology, and dare I say - the scary Leapfrog SV.

Regards
Andrew

Post

Oh and another (rather long) thread to look at:

http://music.columbia.edu/pipermail/mus ... 69900.html

Andrew

Post

Ichad.c wrote:
mystran wrote: then again tanh() is probably bullshit for those gain-cells too, since they claim most distortion is second order..
Hey Karrikuh, the above is somethig to look into, the "dirty" part you describe might just be too much distortion, since you should remember that tanh(x) has a "boosting" effect - and if you are boosting succesively - the boosts are driving higher into the next non-linearity range(hope that makes sense). I think that people that used OTAs where actually trying to get a cleaner sound and less noise(in theory they should be less noisy), so I don't think they are "driven" that hard.
Yeah, I also suspect I'm just driving the filter unreallistically hard. So after all could it be that the non-linearities within each OTA stage can actually be neglected in practice and the character of the filter is essentially determined by the feedback clipper? At least this is what I figured when comparing a simplified cascade (linear 1-pole stages, only one clipper in feedback path) to the OTA cascade emulation of Diva (unfortunately I do not yet own the real thing): I couldn't really hear a difference...

Post

I had to buy a new mouse (the cord started failing on the old one). Due to a temporary brain-malfunction I ended up buying a Tetra too; they really REALLY should make it illegal to sell synths and computer parts in the same stores.

So with my new (rather expensive) mouse, I might be able to do more educated guesses at some point. :P

Post

Ichad.c wrote: Would you think your approach/methods for Zero-Delay filters could be applied to the Sallen-Key topology, and dare I say - the scary Leapfrog SV.
If you can write down the differential equations (which should be straight-forward for linear models) then you can certainly apply the stuff to whatever you want. The question is how well it works.

Somehow (it might have something to do with the new mouse) I've also come to a possession of a Monotron (those are practically free, so couldn't resist) so I might try and see if I can mimic that filter at some point. :P

Post

karrikuh wrote: Yeah, I also suspect I'm just driving the filter unreallistically hard. So after all could it be that the non-linearities within each OTA stage can actually be neglected in practice and the character of the filter is essentially determined by the feedback clipper?
My take on this would be: Please forget this idea immediately.

Post

Mystrans's Cheap non-linear zero-delay filter,soon in every synth. :D
Brilliant,thanks.

Post

From what I can tell from a real OTA ladder filter, the nonlinearity is not tanh. For the diode clipper it's most likely the wrong model to choose as well. Of course it may sound perfectly fine, just saying unlikely to be 100% authentic if that's what you're after.

Richard
Synapse Audio Software - www.synapse-audio.com

Post

jupiter8 wrote:Mystrans's Cheap non-linear zero-delay filter,soon in every synth. Very Happy
Brilliant,thanks.
I totally saw this coming. Of course it's perfectly fine as long as devs don't start marketing it as something exclusive to their product.
Richard_Synapse wrote:From what I can tell from a real OTA ladder filter, the nonlinearity is not tanh. For the diode clipper it's most likely the wrong model to choose as well. Of course it may sound perfectly fine, just saying unlikely to be 100% authentic if that's what you're after.

Richard
I'm more of the school of "if it sounds good, it's good", so I don't really care if the nonlinearity is perfectly reproduced. From my experience, it's more the placement of the clipper within the topology rather than its particular shape that determines the overall character.

Post

Richard_Synapse wrote:From what I can tell from a real OTA ladder filter, the nonlinearity is not tanh. For the diode clipper it's most likely the wrong model to choose as well. Of course it may sound perfectly fine, just saying unlikely to be 100% authentic if that's what you're after.
Like I tried to point out (perhaps not explicitly enough) it depends on the OTA.

For something like CA3080 (or even LM13700 as long as you leave the diode linearization unconnected) tanh() is quite reasonably model, since the whole this is just another long-tailed pair plus a few current mirrors. So if you built an OTA ladder with 4x CA3080 for the stages and another for the resonance control, then you should get roughtly tanh() all the way.

Ofcourse, most OTA cascades in the wild are not built out of CA3080s, but something like CEM3320 so the question of "what are the correct non-linearities" then becomes "how are the CEM3320 gaincells implemented".

Post

jupiter8 wrote:Mystrans's Cheap non-linear zero-delay filter,soon in every synth. :D
Well, hopefully not. Hopefully "mystran's cheap non-linear zero-delay filters" in every synth that doesn't have anything better already. ;)

Post

Is this one based on Vadim's 0df filter, or is it a new concept?

Post

Regarding CEM3320:

If someone has one lying around, you could take one of the stages, replace the capacitor with a resistor (to convert current to voltage, rather than integrate it), then feed it a saw-tooth (with some sane control current and rest of the chip connected to some safe bypass-configuration) and measure voltage over the resistor (with a scope). That would give you a linear (assuming your saw-tooth is linear) to memory-less non-linear curve for gain-cell. This relies on neglecting the buffer input current (or at least assumes it's linear) but that's probably perfectly fine.

I'm not an EE so (1) I'm intentionally making the above a bit vague, because you should know what you are doing and (2) please don't blame me if you get magic smoke. If the chip is already part of a filter, you'll need to disconnect it first (this might involve desoldering if it's not in a socket).

Similarly you could then measure from the stage-output (eg what the buffer gives) to get an idea of whether the buffers themselves are non-linear (in the previous discussion we've been assuming the buffers are linear enough to neglect).

For measuring the feedback amplifier, you could either measure after first stage and apply an inverse mapping to remove the effect of the first stage-non-linearity or you could try to measure from pin 1 directly.

Also SSM2044 is something totally else (ie based on the datasheet I wouldn't call it OTA cascade really); for all I know it might even behave more like a transistor ladder.

Post

mystran wrote:

Code: Select all


 r' = r / (1.458 * 1.96) ~ r / ( 2.86 ) 

 dV0/dt = f * tanh( 1.1 * in - r' * tanh(1.96 * V3) - v0) 
 dV1/dt = f * tanh( 1.1 * v0 - v1 ) 
 dV2/dt = f * tanh( 1.1 * v1 - v2 ) 
 dV3/dt = f * tanh( 1.1 * v2 - v3 )


[...]

edit: sound sample for the above (if I didn't make any mistakes) http://www.signaldust.com/files/cascade.mp3
(mp3 but high bitrate.. oh and 44.1kHz host rate with x4 oversampling)
Since I edited the sound sample into the post afterwards and we transitioned to the next page so someone might no have noticed it (and nobody commented), does any of you like that sound? (and apologies for crappy playing)

Karrikuh specifically: are you getting similar results to the above?

Post Reply

Return to “DSP and Plugin Development”