Dear Robert, On 22.06.2014, at 04:19, robert bristow-johnson <r...@audioimagination.com> wrote:
> it's possible that this is only a semantic issue. Thanks for clearing this up. It's indeed a semantic issue (use of the term "nodal analysis"), which then leads to further misunderstandings. What we do is, for each node we write down equations that may indeed contain non-linear terms. We end up with equations that look like this: Vout1 = g * ( tanh( Vin - feedback * Vout2 ) - tanh( Vout1 ) ) + iceq1 Vout2 = g * ( tanh( Vout1 ) - tanh( Vout2 ) ) + iceq2 Even in this simplified case it's clearly impossible to solve these linearly, be it in a matrix or brooding over one big sausage of an equation for each unknown value. What guys like us have done for a decade or two is what Hal Chamberlin has written in his famous book and what Smith/Stilson described in their equally famous paper: We have simply added artificial delay elements. We did so in order to do two things: 1. Drag the computation of the non-linear term out of the equation so that both sides can be written as linearly dependent 2. Make the computation of each equation independent of each other, so they need not be solved simultaneously Sometimes only one of those two methods is necessary, sometimes they are the same, and often adding a delay element is identical with Euler's method (i.e. Chamberlin's SVF implementation). In case of above equations, one would end up with following: Vout1 = g * ( tanh( Vin - feedback * Vout2z1 ) - tanh( Vout1z1 ) ) + iceq1 Vout2 = g * ( tanh( Vout1 ) - tanh( Vout2z1 ) ) + iceq2 I've marked delayed elements with a z1 suffix. By doing so the two equations can be solved in sequence and no complex math or iterative computation is required. However, it doesn't really sound right. Those delay elements create a plethora of problems. When I talked about "the other method", I was talking about solving the above set of equations simultaneously and without any added delay element. Before we run into another misunderstanding, like Andy pointed out, the iceq values that represent the current source equivalents of the capcitors *are* delay elements. They are necessary for integration of the time step, but no matter what method of integration we use, we always end up with the same set of equations to solve for the actual step. Two methods occur to be common to solve these equations simultaneously in realtime applications, without artificially added delay elements: 1. Treat the non-linear elements as piecewise linear and correct the result in iterative steps. 2. Get the computer to crunch numbers by iteratively predicting, evaluating and refining values using the actual non-linear equations until a solution is found. Both methods work well and make use of root finding algorithms such as Newton's method. Both methods buy numerical accuracy at the expense of computational effort over the methods using extra delay elements. Nevertheless, computers have recently become fast enough to make these methods viable for musical applications. Hence our enthusiasm! The gist is, being able to eliminate those delays was such a nice step forward in making good sounding synthesizers, someone had to coin a term for it. That term, as insufficient as it is, became zero delay feedback filters. It means what I said before, no unit delays were artificially added on top of the delays required for integration of the time step. Nowadays we're certainly using more differentiated terms as well, but that's the one that's most widely used (and abused) among our crowd. Please take my apologies for popularising this term all too lightheaded - I guess it wasn't ever clear enough that we meant to apply it *only* to filters based on nodal analysis as we define it and like I described above. On 22.06.2014, at 04:19, robert bristow-johnson <r...@audioimagination.com> wrote: > only if the thing goes chaotic (which is wildly non-linear with a helluva > lotta feedback). otherwise, there is no reason a non-chaotic non-linear > circuit can't get to a steady state if the input is stationary. "steady > state" means the transients have died down to negligible levels. like a > second or two after twisting the knob. Yep, wildly non-linear with a helluva lotta feedback is exactly what we're dealing with - above equations expanded to 6 poles (4 LP + 2 HP in the feedback path) with roughly 11 tanh-ish terms and some extra dirt in the code sound marvellous when feedback is cranked up far beyond 4 and the self oscillation clashes with the input. It's ear popping. Cheers, - Urs -- dupswapdrop -- the music-dsp mailing list and website: subscription info, FAQ, source code archive, list archive, book reviews, dsp links http://music.columbia.edu/cmc/music-dsp http://music.columbia.edu/mailman/listinfo/music-dsp