You are probably already using Zero Delay Feedback filters, so let your customers know!

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

Post

AdmiralQuality wrote: Again, this is all way overly complex. I'm not looking to model the exact behavior of diodes or any particular circuit.
This is as easy as it gets - don't look at odd math naming - look at the code pattern:
mystran wrote: dV0/dt = iCtl * (tanh(in - r*V3) - tanh(V0))
dV1/dt = iCtl * (tanh(V0) - tanh(V1))
dV2/dt = iCtl * (tanh(V1) - tanh(V2))
dV3/dt = iCtl * (tanh(V2) - tanh(V3))
That's a ladder - if you get that - just follow the rest of mystran's Maxima tutorial(ironically on page2 of that thread).

AdmiralQuality wrote: (Which I'd rather avoid, I don't want filters that constantly change their CPU load according to the values in the samples they're processing.)
Totally agree with you on this part, imagine you suddenly jump from 1 to 3 iterations with 32-voice polyphony :-o

Post

AdmiralQuality wrote: I'm sure mystran is a very bright guy who knows all kinds of math stuff, but I don't get the impression he's very results oriented. He likes having a problem. I like having a solution.
I don't really like having problems, and it's not like knowing math is a matter of being particularly bright. If I happen to know a tiny bit of math at this point, it's simply because it's been necessary to learn that much in order to solve some past problems. It doesn't just magically appears in my head, I have to work for it just like everyone else and it's practically always quite time-consuming and frustrating process.

I still do it, because I like having a solution.

Post

Ichad.c wrote:
AdmiralQuality wrote: Again, this is all way overly complex. I'm not looking to model the exact behavior of diodes or any particular circuit.
This is as easy as it gets - don't look at odd math naming - look at the code pattern:
mystran wrote: dV0/dt = iCtl * (tanh(in - r*V3) - tanh(V0))
dV1/dt = iCtl * (tanh(V0) - tanh(V1))
dV2/dt = iCtl * (tanh(V1) - tanh(V2))
dV3/dt = iCtl * (tanh(V2) - tanh(V3))
That's a ladder - if you get that - just follow the rest of mystran's Maxima tutorial(ironically on page2 of that thread).
That's not code. There a divide operator on the left of the = sign.

And why the tanh functions? (That's going to be EXPENSIVE.) And where's the negative feedback?
AdmiralQuality wrote: (Which I'd rather avoid, I don't want filters that constantly change their CPU load according to the values in the samples they're processing.)
Totally agree with you on this part, imagine you suddenly jump from 1 to 3 iterations with 32-voice polyphony :-o
And with 2 4-pole filters per voice!

Post

mystran wrote:
AdmiralQuality wrote: I'm sure mystran is a very bright guy who knows all kinds of math stuff, but I don't get the impression he's very results oriented. He likes having a problem. I like having a solution.
I don't really like having problems, and it's not like knowing math is a matter of being particularly bright. If I happen to know a tiny bit of math at this point, it's simply because it's been necessary to learn that much in order to solve some past problems. It doesn't just magically appears in my head, I have to work for it just like everyone else and it's practically always quite time-consuming and frustrating process.

I still do it, because I like having a solution.
There are different kinds of "bright". I don't believe intelligence is a linear spectrum.

I somehow managed to independently invent the IIR without previously having known a thing about it. (Other than a vague recollection that resonance is negative feedback.) My grade 7 math has gotten me this far.

Post

AdmiralQuality wrote:And why the tanh functions? (That's going to be EXPENSIVE.)
Come on AQ, you can do better than this. I'm sure you can come up with your own fast tanh or what ever saturator you like. If mystran had obscured the code with some crazy polynomial approximation you'd be complaining about it not being transparent. Of course you already know this.

Post

matt42 wrote:
AdmiralQuality wrote:And why the tanh functions? (That's going to be EXPENSIVE.)
Come on AQ, you can do better than this. I'm sure you can come up with your own fast tanh or what ever saturator you like. If mystran had obscured the code with some crazy polynomial approximation you'd be complaining about it not being transparent. Of course you already know this.
I didn't ask for transparent. I asked for pseudo-code. (Or even code-code. :) )

Why a saturator? Who designs a filter with non-linear response? In my experience (mostly just by my ear) the first non-linearity is clipping. (Which is actually REQUIRED in the resonance to keep things from exploding.)

I'm also not seeing why there's no delay introduced by this. Take the tanh() out and it looks just like my filter (minus the resonance).

Post

AdmiralQuality wrote:That's not code. There a divide operator on the left of the = sign.
Because that's a differential.

http://en.wikipedia.org/wiki/Notation_f ... rentiation

Post

EvilDragon wrote:
AdmiralQuality wrote:That's not code. There a divide operator on the left of the = sign.
Because that's a differential.

http://en.wikipedia.org/wiki/Notation_f ... rentiation
See, I thought THIS was a differential.

Image

Anyway, we should probably return this thread to the topic of who invented whatever it is and what we should call it. (Though hasn't it been nice to not be fighting for a few pages? :) ) I'll take a look at your code contributions soon (deep in something else at the moment). Thanks all who provided them.

Post

Good one! :D

Post

I've been staring at a Steiner-Parker filter schematic for a couple of days now, which is just a diode ladder (as far as I can tell), trying to figure out -> how the hell it is possible to just apply the input to the 'middle' of the ladder and 'magically' a highpass filter appears?
That particular filter is a bit weird (especially in terms of how it looks in the schematic), but I think Doepfer(?) had a similar multi-input design in something closer to the MS20 circuit (or something else with basic same structure, can't remember which one it was), where it might be more obvious. The actual signal flow logic is pretty similar, it's just the frequency control design that is sort of WTF in this one.

But in terms of signal flow.. the idea is that on the main low-pass path (the diodes) it's just bunch of low-pass poles, and then by inserting the other inputs to the other sides of the caps, you can skip some of the low-pass poles, and turn that particular capacitor into a high-pass with respect to that input. The resonance uses this logic too.. so the resonance path essentially gets a band-pass response. The second resonance path also makes it look weirder, but without doing some actually analysis I can't really tell you why it's designed that way.

You could also SPICE or bread-board it and see what's going on... plus poking probes into circuits (real or virtual) is just fun.

edit.. oh and sorry for the off-topic, if the plan was to return to the original discussion..

Post

Steiner-parker is a sallen-key filter implemented by using an (a-)symmetrical chain of diodes as a variable resistor.

It works exactly as the moog transistor ladder does, only rather than the capacitors going between the two sides of the ladder, the "poles" of the ladder in the steiner-parker are split in two and with current flowing in opposite directions.

Positive signal current flows along one path and negative signal current the other. That is why you need two capacitors, because unlike in the transistor-ladder design the positive and negative components of the signal path are at different points in the ladder.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

AdmiralQuality, you say that the differential equations posted aren't code (which is obviously is correct). But in some sense they are something better. They are a more general, more abstract description. If you would have some knowledge in how to numerically integrate ordinary differential equations you could choose the method to use and make different trade-offs. If somebody posts code of one particular way to integrate them you no longer have any freedom. The advantage then is of course that somebody else did the thinking for you and you just have to copy and paste the solution.

Post

aciddose wrote: Positive signal current flows along one path and negative signal current the other. That is why you need two capacitors, because unlike in the transistor-ladder design the positive and negative components of the signal path are at different points in the ladder.
Oh ok, that makes sense. Thanks.

edit: seems I just missed the connection from LP down on the right-hand side.. but IMHO the frequency control design is still rather weird. :)
Last edited by mystran on Mon Dec 02, 2013 7:55 pm, edited 1 time in total.

Post

helium wrote:If you would have some knowledge in how to numerically integrate ordinary differential equations you could choose the method to use and make different trade-offs. If somebody posts code of one particular way to integrate them you no longer have any freedom. The advantage then is of course that somebody else did the thinking for you and you just have to copy and paste the solution.
Basically I just want to hear and analyze the difference, to see what all the "0-delay" (sorry!) evangelists are talking about, if anything.

As things are, I seem to have some discrepancies in my filter tuning which I mostly compensate for with some ugly fudge. I'm wondering if this isn't a shift in the resonant frequency that's a result of the one (sub)sample delays in the poles and/or the resonance feedback.

I don't need to understand it as long as it works and is CPU efficient enough. I'd certainly like to, and for the first few versions I understood every line of Poly-Ana. But at this point I've incorporated a few lines of code that are effectively opaque to me, contributed from friends and the KVR community. Fast pitch to float calculations and sine generators, for example.

A 0-delay-whatever would be accepted too, if I found it helped. And then when the people who've been convinced that no product that doesn't have it is worth anything, I can say it has it. Pure marketing, it's not like anybody's been complaining about the sound of Poly's filters. (That's the whole reason I built the synth! People liked the Naive/SCAMP filter so much.) Though again, if it helps my tuning discrepancy then that'd be great.

Post

AdmiralQuality wrote:as long as it works and is CPU efficient enough.
In this case it's most likely either or.

Post Reply

Return to “DSP and Plugin Development”