[music-dsp] nonlinear filters for music?

Crackpot shifty at sidehack.sat.gweep.net
Tue Feb 26 11:35:38 EST 2002

On Mon, Feb 25, 2002 at 09:22:51PM +0100, Svante Stadler wrote:
> With zillions of filter plugins being made
> everyday, wouldn't it be more interesting
> to investigate the sounds of nonlinear filters?
> I'm wondering why there aren't any nonlinear
> filtering music tools around. 

considering how much mileage people get from what may
be the simplest non-linear effect, distortion, I hypothesize
that the bandwidth for exploration of the full set of
non-linear functions is HUGE.  In other words, there are a LOT
of different ones.  

from time to time, you will probably see one explored
in detail for a few generations, as it's applied to every
known instrument and synthesis technique...one or two instances
in the right environments ("songs") will make them stand out,
and they'll become more commonplace.

I do believe that a general DE plug-in would be interesting!
however, for most people, there are simply too many different
possibilities to explore...the transformations are, as someone
mentioned, potentially extreme---theoretically, one can transform
*anything* into *anything*.

>I can come up with
> the following reasons:

> 1) After extensive research, the conclusion has
> been that it's impossible to make them sound good
> (or even "interesting")

well, there are always those who throw up their arms early
in despair when their known-consistent methods break down.

> 2) Noone has tried it, since it's a really stupid idea.

Well, I can see how the nonadventurous dsp programmers
could be uncomfortable with the unfamiliarity.

> 3) There are a lot of such products, I just never
> heard of them.

shh!  don't tell anyone!

> I realize a lot of "vintage gear emulation" stuff
> probably use some small nonlinearities here & there to
> get that dirty sound, but I'm looking for some really
> novel, experimental stuff. Please help. I'm thinking
> of implementing really weird, almost arbitrary DE's like:
> x(n) = x(n-1) * x(n-100) / x(n-50) - x(n-3)*x(n-37)
> you know, just to see what happens. Good or bad idea?

wonderful!  make a hypothese, perform an experiment, explain
your results, share the source :)

> Also, how can you tell which filters are stable?

I can't find it here, but some advanced texts on non-linear 
differential equations introduce some useful concepts, such
as phase plots.  typically, you work with them by stating your
equation in delta form......e.g.:

delta x(n) = blah blah crazy stuff

it's also useful to examine the phase plots of the individual
linearly combined terms (you have two in the above eq).  For example,
just the term

Dx(n) = -x(n-3) * x(n-37)

will converge to zero if x(n) is <1, right?  and it could go to
infinity (blow up) if x>1, right?  it's only stable for x=1, (and
even then it oscillates with amplitude 1).  so, right away, you
know it could blow up on you.  

so, what you discover early on is the usefulness of "cushioning terms"
which keep the equation stable.  These could be e.g. nonlinear compression
functions, or linear high-pass filters...for example

Dx(n) = -x(n-3) * LPF[ x(n-37) ]

I *think* that would make it more stable for x>1

here's a simpler example, which may get you started, I call it
Noah's Favorite Filter:

y[n] = (1-f)*x[n] + f*y[n-1]*x[n-1]

notice how f can be adjusted to always return the filter to stability.
see how the nonlinearity of y*x is mixed in to taste.  I believe this
smooth mixing is a key element in early NL filter exploration.

one problem someone else brought up about this type of filter is
the bandwidth- it is known that a multiplication doubles the bandwidth,
but when the multiplication is *inside* the feedback loop, it is possible
for your filter to use infinite bandwidth.  this would eat up cpu cycles :)
fortunately, in this case, the overall effect is a combination low-pass 
filter and ring mod....I'm hoping the LPF keeps the bandwidth in check,
meaning, it prevents it from getting higher than Fs.  

btw, with NL filters, it is STILL very useful to examine their response
to sinusoids!  one caveat though, is you must re-init the state
of the filter each time you change the frequency- because it is possible
to "kill" a NL filter (to reduce an internal term to zero, so that no
input produces a useful response) or to "bash" a NL filter (to blow up
an internal term so that no input can rescue the output from infinity).

naturally, when actually using the filter, killing and bashing it are
potential hazards and should be tweaked out of the equation.

while we're at it, I should add that I am intrigued by the concept of
forced oscillators within filters!  for sync-like effects.  for more,
lookup chua's oscillator, although it doesn't appear to be a harmonic
one, I would prefer a harmonic forced-oscillator circuit.


                                 DSP Audio Effects! http://gweep.net/~shifty
     .        .       .      .     .    .   .  . ... .  .   .    .     .      .
"La la la laaa laaa laaa                   "      |     Niente 
 La la la laaa laaa laaa."  -Stereolab            | shifty at gweep.net

dupswapdrop -- the music-dsp mailing list and website: subscription info,
FAQ, source code archive, list archive, book reviews, dsp links

More information about the music-dsp mailing list