Steiner Parker filter topology

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

Urs wrote: Well, the whole topology of a "real" Steiner-Parker filter is differential, much like a diode ladder, but without shared capacitors between the stages. I guess this is called "diode ring".
Is this what you mean by diode-ring?

Code: Select all

float Diode (float Vi, n, VT, IS)
{
return IS * lambertW_0(exp((Vi/(n*VT))-1.f));
}

float diodeRing (float Vcarrier, float Vmodulator)
{
float addTop = Vcarrier + Vmodulator;
float addBottom = -Vcarrier + Vmodulator;
float TopDiodes = Diode(addTop) + Diode(-addTop);
float BottomDiodes = Diode(addBottom)+Diode(-addBottom);
return TopDiodes + -BottomDiodes;
}
That's gonna be pretty expensive... I'm a cheap bastard, something slightly asymmetrical with a greater linear region will do for me :)
Last edited by Ichad.c on Thu Mar 19, 2015 12:00 pm, edited 1 time in total.

Post

Doesn't that code require an oracle to select the correct branch of lambertW?

Post

mystran wrote:Doesn't that code require an oracle to select the correct branch of lambertW?
Cough,No need to compute the lambertW_-1 branch, It should read lambertW_0 :oops: Corrected my post.

The diode code above is just a fancy min(0.f, x), hence why we have better options imho.

P.S. If anybody wants to hear how a real one sounds like: First AP, then BP, HP and LP.

https://soundcloud.com/tubeohm-sounds/s ... p-bp-hp-lp

Post

Here's another *unoptimized* version, hope I didn't muck anything up... I wanted to use less cycles, so for this version I went for a buffered version with a single non-linearity(though I'm not too sure if I chose the best place for it). In wxMaxima:

Code: Select all

declare([ic1eq,ic2eq,LP,BP,HP], mainvar);
optimize(solve([
0 =  g*(LP-V1)-(V1-k*V2) +BP + ic1eq,
0 =  g2*(V1-V2)-V2 + HP + ic2eq     ], 
[V1, V2]));

Code: Select all

///Buffered multi-input SK-Filter - thanks to Andy and Urs

 k = resonance *2.f;
 g2 = g * tanhXdX(ic2eq);

float denom = g2*k+(-g-1.f)*g2-g-1.f;
float t0 = HP+ic2eq;

float V2 = -((g*g2*LP+g*t0+HP+g2*BP+ic2eq+g2*ic1eq)/ denom);
float V1 = -((t0-V2*g2-V2)/g2);

  ic1eq = 2.f*((V1 - k*V2) - BP) - ic1eq;
  ic2eq = 2.f*(V2 - HP) - ic2eq;

out = V2;
And yeah, I know that I can compute V1 via V2, this is just a straight copy/paste from Maxima, but Maxima is disagreeing with my syntax atm and it's too early in the morning to read a help file :P

*Edit*: Simplified the equations a bit.

Cheers
Andrew

Post

Guys...

In MicroBrute (SP filter) cutoff increases with resonance :) - and this behaviour makes filter very interesting, more alive and squelchy.
Any idea what kind of nonlinearities are playing role here?
giq

Post

itoa wrote:Guys...

In MicroBrute (SP filter) cutoff increases with resonance :) - and this behaviour makes filter very interesting, more alive and squelchy.
Any idea what kind of nonlinearities are playing role here?
Diodes... you might need to do a model for the full circuit, not just the simplified Sallen-Key form and use a transfer function like y = e^x - 1 for the diodes while you can keep a tan-ish soft clipper in the feedback path.

Post

I'm not sure. AFAIK this kind of structure acts like a differential transistor pair, that saturates. I'm not good enough at electronics but gonna give it a try :). URS do you have any simplified scheme with diodes?

btw. I achieved a kind of this behaviour without altering nonlinearities. SP looks like half of diode-ladder filter with additional feedback (damping) path. As DL behaves like this (res+ -> freq+), I scaled one of the feedback path to make it bit closer to DL and indeed cutoff freq started to increase for bigger resonances :).
giq

Post

itoa wrote:Guys...

In MicroBrute (SP filter) cutoff increases with resonance :) - and this behaviour makes filter very interesting, more alive and squelchy.
Any idea what kind of nonlinearities are playing role here?
I have a very good idea, an excellent idea in fact :)
The Glue, The Drop - www.cytomic.com

Post

Andy: any tips? :)
giq

Post

itoa wrote:Andy: any tips? :)
Yeah, be kind to your parents ;)

Bang away at the basic circuit math, you'll get there.
The Glue, The Drop - www.cytomic.com

Post

Of course I would never ask for the solution..

But us I understood how to simulate and solve this:

Code: Select all

      ->     V1     ->     V2    
LP----R1-----+------R2-----+------+----Out
             |             |      |   
           | = C1        | = C2   v Res
           V |           V |      |
             |       HP----+      |
             |                    |
       BP----+--------------------+
Can you tell me where are the missing diodes? :)

I found some circuits, but I should start from this basic model.
giq

Post

itoa wrote:Of course I would never ask for the solution..

But us I understood how to simulate and solve this:

Code: Select all

      ->     V1     ->     V2    
LP----R1-----+------R2-----+------+----Out
             |             |      |   
           | = C1        | = C2   v Res
           V |           V |      |
             |       HP----+      |
             |                    |
       BP----+--------------------+
Can you tell me where are the missing diodes? :)

I found some circuits, but I should start from this basic model.
Well, this model simplifies in a way that diodes might be difficult to model properly. The original circuit has a third capacitor so the two sides of the ladder are not coupled for one stage. Hence it's not a ladder, really. For the second first stage the current through the capacitor isn't the same thus one can not model the diodes as a differential pair.

All IMHO and many months after dealing with this ;-)

- U

Post

So the capacitor is between V1 and V2 ?
giq

Post


Post

maybe look at it like this for a simplified look (lowpass only)

Code: Select all

                    gnd
                     |
                  C2 =
                     +-->-------------------+-- out
                     |                      |
  in---|<---+---|<---+---|<---+---|<---in   |
            |                 |             |
          c1=               c3=             v res
            |                 |             |
            +-----------------+-------------+
It's like two lowpass filters meeting in the middle. One lowpass filter uses the diodes as voltage dependent resistor of bias + input, the other one as voltage dependent resistor of bias - input (diodes are set other way round)

Input enters the row of diodes from both ends. Output is in the center. C1 and C2 are the capcitors of the first lowpass stage. C3 is the capacitor of the second stage.

While it's still Sallen Key, kind of, the capcitors for the first stage are separate.

Post Reply

Return to “DSP and Plugin Development”