<div dir="ltr"><div dir="ltr">I've modelled the SSM2040 in detail, it's available as a filter module for the virtual eurorack VCV software: <a href="https://cytomic.com/vcv-rack-modules/">https://cytomic.com/vcv-rack-modules/</a> and I've done a comparison video matching against the SSI2140 datasheet version implemented in the LA67 Maca module: <a href="https://www.youtube.com/watch?v=wVYYDvAXEjY">https://www.youtube.com/watch?v=wVYYDvAXEjY</a><div><br></div><div>René's summary is great, but I'll add a few more details inline below:</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 8 Sept 2024 at 22:39, René Schmitz <<a href="mailto:synth@schmitzbits.de">synth@schmitzbits.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi Rutger and all,<br>
<br>
<br>
The TANH comes from the input side, i.e. the long tail pair transistors, <br>
this is more or less symmetric as one would expect.<br>
<br>
(If you ignore minor effects such as the different Vce voltages, Vbe <br>
matching, source resistances etc.)<br>
<br>
<br>
For a single stage:<br>
<br>
The asymmetry comes from the output of the one-mirror OTA. It can't sink <br>
past -0.6V (The collector of the output transistor can't go lower than <br>
it's emitter voltage, with the bases near GND thats about -0.6V).<br>
<br>
Thus you see clipping at -0.6V.<br>
<br>
It really only makes a difference if you're *not* summing the current <br>
into a virtual ground. As was done in the 2040 of course, which uses <br>
emitter followers.<br>
<br>
(But you can run the 2040 gain stage into an opamp integrator and do not <br>
get any of the clipping at all.)<br></blockquote><div><br></div><div>The main non-tanh part of the input is due to the finite beta of the input differential pair.</div><div><br></div><div>The "classic" buffer (non-virtual ground) adds some voltage offset (around -1.05V depending on the BJT used) to the signal, which is then fed back to the negative input of the same stage, which raises the input by the same amount, and which gives the circuit extra headroom of around a negative excursion of around -1.65V before clipping. This will leave positive excursions intact for the first stage, but since each stage inverts then this positive waveform will then become negative and get clipped off at the next stage, which is repeated another two times. This clipping is done without buffering from the low pass capacitor by the negative input BJT, but also a near positive voltage rail clipping in a similar manner from the current mirror. These two unbuffered "diode" clippers drain the low pass capacitor of current before that stage's voltage is buffered - and the buffer also adds a little drive.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
BTW the 2164 also has voltage compliance limits for its output current <br>
(albeit different).<br>
<br>
So you can run the 2164 into an "open" load, and get extra <br>
nonlinearities. Thats mentioned in AN701.<br>
<br>
<br>
If you cascade several inverting 2040 stages, then at the output you get <br>
(more or less) symmetric clipping because you alternately treat the <br>
positive and negative input swings at consecutive stages.<br></blockquote><div><br></div><div>Yes, it's not quite symmetric since there is a one pole worth of low passing combined with the flipped clipping, but when the cutoff is wide open it becomes effectively symmetric for audio rate signals.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
I think this was what JH was talking about. But also look at a single <br>
stage to understand what the root behaviour is.<br>
<br>
<br>
<br>
Best,<br>
<br>
René<br>
<br></blockquote><div><br></div><div>Thanks for the rundown René.</div><div><br></div><div>Andy</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
<br>
<br>
Am 08.09.2024 um 12:34 schrieb Rutger Vlek via Synth-diy:<br>
> Dear all,<br>
><br>
> In the sparse moments between day time job and fatherhood I'm trying <br>
> to push forward with an idea I've had for a long time. I'm trying to <br>
> capture the variation in favourable non-linear characteristics from <br>
> well-known filters (read SSM2040 and Moog Ladder) and implement them <br>
> in a more modern topology (read SSI2164). Would also be great to be <br>
> able to select between them, while using the same filter core. I'm not <br>
> necessarily aiming for perfectly cloning the response of vintage <br>
> filters, but rather hope to take inspiration from them and perhaps to <br>
> discover other pleasant non-linearities.<br>
><br>
> I've been approaching this with Spice as well as with mathematical <br>
> modelling in Python, using a multi-dimensional Newton-Raphson solver <br>
> with the system of equations needed to describe the various filters.<br>
><br>
> Right now I'm trying to understand the character of the SSM2040, and <br>
> am a bit puzzled. I am familiar with the inverting cascaded topology <br>
> of this filter. And with the typical math that describes the <br>
> non-linearities of an OTA-based filter:<br>
> Vout = g * tanh(Vin-Vout).<br>
><br>
> I have been reading across the internet about the asymmetrical <br>
> saturation of this filter, most notably in the application notes for <br>
> making filters with the SSI2164: <br>
> <a href="https://www.soundsemiconductor.com/downloads/AN701.pdf" rel="noreferrer" target="_blank">https://www.soundsemiconductor.com/downloads/AN701.pdf</a>. Based on this <br>
> information, I had assumed that the tanh only operates in one <br>
> direction, something like this:<br>
> y = tanh(x) if x < 0<br>
> y =x if x > 0<br>
><br>
> However, in Spice, when simulating the internals of the SSM2040 using <br>
> Jurgen Haible's schematic <br>
> (<a href="http://jhaible.com/legacy/tonline_stuff/jh2040.gif" rel="noreferrer" target="_blank">http://jhaible.com/legacy/tonline_stuff/jh2040.gif</a>), I don't see that <br>
> happening. Instead, I see tanh distortion in both directions.<br>
><br>
> Only when I push the input harder (beyond 1Vpp), I see one side of the <br>
> output clipping much sooner than the other. This seems in line with <br>
> the effect described in AN701, but is the SSM2040 really driven that <br>
> hard in real world applications, and is it really *this* additional <br>
> effect, on top of the already present tanh distortion, that explains <br>
> the SSM2040's character? And if so... how would one model it <br>
> mathematically?<br>
><br>
> Rutger<br>
><br>
> ________________________________________________________<br>
> This is the Synth-diy mailing list<br>
> Submit email to: <a href="mailto:Synth-diy@synth-diy.org" target="_blank">Synth-diy@synth-diy.org</a><br>
> View archive at: <a href="https://synth-diy.org/pipermail/synth-diy/" rel="noreferrer" target="_blank">https://synth-diy.org/pipermail/synth-diy/</a><br>
> Check your settings at: <a href="https://synth-diy.org/mailman/listinfo/synth-diy" rel="noreferrer" target="_blank">https://synth-diy.org/mailman/listinfo/synth-diy</a><br>
> Selling or trading? Use <a href="mailto:marketplace@synth-diy.org" target="_blank">marketplace@synth-diy.org</a><br>
<br>
-- <br>
--<br>
<a href="mailto:synth@schmitzbits.de" target="_blank">synth@schmitzbits.de</a><br>
<a href="http://schmitzbits.de" rel="noreferrer" target="_blank">http://schmitzbits.de</a><br>
<br>
________________________________________________________<br>
This is the Synth-diy mailing list<br>
Submit email to: <a href="mailto:Synth-diy@synth-diy.org" target="_blank">Synth-diy@synth-diy.org</a><br>
View archive at: <a href="https://synth-diy.org/pipermail/synth-diy/" rel="noreferrer" target="_blank">https://synth-diy.org/pipermail/synth-diy/</a><br>
Check your settings at: <a href="https://synth-diy.org/mailman/listinfo/synth-diy" rel="noreferrer" target="_blank">https://synth-diy.org/mailman/listinfo/synth-diy</a><br>
Selling or trading? Use <a href="mailto:marketplace@synth-diy.org" target="_blank">marketplace@synth-diy.org</a><br>
</blockquote></div></div>