Login / Register  0 items | $0.00 New
User avatar
Ichad.c
KVRian
 
1000 posts since 8 Feb, 2012, from South - Africa

Postby Ichad.c; Mon Dec 02, 2013 9:22 am

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
mystran
KVRAF
 
4596 posts since 11 Feb, 2006, from Helsinki, Finland

Postby mystran; Mon Dec 02, 2013 9:47 am

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.
Image <- plugins | forum
AdmiralQuality
Banned

Postby AdmiralQuality; Mon Dec 02, 2013 9:51 am

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!
AdmiralQuality
Banned

Postby AdmiralQuality; Mon Dec 02, 2013 9:55 am

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.
matt42
KVRian
 
933 posts since 9 Jan, 2006

Postby matt42; Mon Dec 02, 2013 10:01 am

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.
AdmiralQuality
Banned

Postby AdmiralQuality; Mon Dec 02, 2013 10:05 am

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).
User avatar
EvilDragon
KVRAF
 
14892 posts since 6 Jan, 2009, from Croatia

Postby EvilDragon; Mon Dec 02, 2013 10:11 am

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
AdmiralQuality
Banned

Postby AdmiralQuality; Mon Dec 02, 2013 10:15 am

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.
User avatar
EvilDragon
KVRAF
 
14892 posts since 6 Jan, 2009, from Croatia

Postby EvilDragon; Mon Dec 02, 2013 10:19 am

Good one! :D
mystran
KVRAF
 
4596 posts since 11 Feb, 2006, from Helsinki, Finland

Postby mystran; Mon Dec 02, 2013 11:10 am

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..
Image <- plugins | forum
User avatar
aciddose
KVRAF
 
11518 posts since 7 Dec, 2004

Postby aciddose; Mon Dec 02, 2013 11:34 am

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.
Xhip Synthesizer v8 (WinXP, Linux and MacOS alpha versions are available.)
Xhip Effects bundle v6.7 New: Resizable/skinnable/configurable GUI. (Linux and MacOS alpha versions are available.)
helium
KVRist
 
327 posts since 13 Nov, 2002, from Germany, Darmstadt

Postby helium; Mon Dec 02, 2013 11:44 am

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.
mystran
KVRAF
 
4596 posts since 11 Feb, 2006, from Helsinki, Finland

Postby mystran; Mon Dec 02, 2013 11:52 am

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 11:55 am, edited 1 time in total.
Image <- plugins | forum
AdmiralQuality
Banned

Postby AdmiralQuality; Mon Dec 02, 2013 11:53 am

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.
User avatar
Urs
u-he
 
21439 posts since 7 Aug, 2002, from Berlin

Postby Urs; Mon Dec 02, 2013 12:13 pm

AdmiralQuality wrote:as long as it works and is CPU efficient enough.

In this case it's most likely either or.
PreviousNext

Moderator: Moderators (Main)

Return to DSP and Plug-in Development