self-modulating FM: non-n00b formulae?
a number of recent posts have had me revisiting classic FM synth algorithms, and these requests/queries have involved self-modulating "operators" or oscillators. In the classic FM algorithm, we scale the modulator’s amplitude as a function of its frequency; despite trawling the web and other resources (including Chowning, and an old Yamaha DX manual) I cannot find a reference to how one should scale the amplitude of the feedback signal in a self-modulating system. If the modulator ratio and index are high (> 1.), as the amplitude of the feedback signal approaches 1. there is a tendency towards noise/chaos. Is there a formula for relating feedback amplitude to modulator frequency that I’ve missed? The patch below describes the problem:
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 990.3oc6Y9sbSiCEF+5vL7NnwWxF7HIK+OXFlga161m.JCih8IIBbjB1NkBL zm8UR1N0zMo1qSpZKvMNikjk9N+7mO5n1u+7mMyag5JnxC8Jz6Pyl8ccKyrs YZYVWCy71vuJqfWYGnWlZyFPV6MusyZ3pZaGKAHeAO6SnpLdAu7UWHqVq1Uj iV.HNZ4NYVsPIQpknMpbjPlCW8Zjdfq.zk7hcPEJGpx.oouZERpDUvquPdg7 KqAIpjqeZDW19jHdIfdCh3OGcq0sax3a2Vp3YqExU5ggVARPOG.JaMWUsW8E BIjo1IsgPRWqxcaT6pKfZaHi6ZdoRVK4a.a391RAuX+7HxsMpV7wWRId8efJ w2rO.g5ueh1xqsB6CkPVcC9YgA9zv4HRTpdbHRbyOjXeL588zkP1IKx9Uob0 BqN8w1V9wyel4W8OyG8aU8Lu.Ju16vDfNBBzL75utEZBHuJwJooesynPw0g4 9vP2iM.7CBCND.wCBPMFDa1soMpuCrFDE0f03HCOCsWo3iB08QplNcqPHF2a Qzl2F4LcVCeQGl+2OfdwwvO4Dv+MwYOBSRmhEkxh70njZ7jyQAT6M2AJO6.R KEPbIbMpBJV9OpbmgqjS.WsNOBlNf067anpzISGBV+OStQhmBJHQLCJBhYFF jjduQhit4z9sblef8h96R3y9WHy70ISPuznrCu+.67fvnI4lhisIxZPXpIgD Jh5lMGtSpZ2X9F3EdD1QOOrKbR1uDh0wEZtFGZshrGXzo8f4bSW8BzSCMrof lDVat7Q8c4S+JNvGhbzyW8FTJoodCxep2nGgmTIwDlMKGkkdOWuA7sbd10C8 YX+34lJTOftiIFkFFXe2yB6td1k8JtPN32O2wGIBY8geck5MXFCVbbywTrYV Mg5PF7s7RsSpFJ+.H4KJrxA+D1SmbBV5f.byo6FplP5u.oWiOeYWa2HOJ3O4 V2i2nSvG1d1j6yix8.XCCo3CZDCOeFwljfOA7g+ky7gAS5TMAAtYK9iwmrul U.WiXXrq3D6T3ThsZhnj6usMdv8QzoeLFFN92FaD4DvDKXRtnlgYOV+s+eFX WKSG2BdUpckYcgS6aWTu0KGppERyeAAYuAQ94AsVjmCxepV7bQkoFx7AJhbz xJXLxh4bYENFYQebJqHmKq3wJKhSkUzXjUfyoEaLxJw4zJYrVd2JKxXjUpye IlNpzo3Gw55Q32hD2u+CgNZg4XeOYroIvO9RSPhc+KxwIL2mofjN1sgbqAih GMvltvZqbkuc6kPYU6T2nIc88eTUZtOZdy8BYy8MyrWIbon6Qh0sXmU8k+U8 34rp -----------end_max5_patcher-----------
and I hope the question does not belie the "non-n00b" in the title :)
also, maybe this is just how we get noise in an FM synth?? I fail to see the creative/synthesis value in self-modulation.
I think you are asking the wrong question– FM synthesis with feedback is _always_ non-linear, and therefore chaotic, by definition. It’s just that the simpler states (ie low, whole-number mod indexes, low feedback amplitudes etc) are easier to describe (via bessel functions to describe the amplitudes of partials etc) and, more importantly, to perceive and make sense of, than the more complex states. When it becomes ‘noisy’ or ‘chaotic’ is simply a cultural/human-perception thing. The noisiest, most complex signal feedback path in FM is still deterministic and periodic, albeit unpredictable.
Maybe you should ask ‘when does the fm spectrum become too complex for the human ear for it to perceive as having an unambiguous sense of pitch?’ or something similar
(and then apply for a research grant to answer it)
Hm… Here’s what I probably would do to come a little closer to an answer: first, I would convert your patch into a discretized equation describing the signal flow — that is, something that has the form F ( output_signal[n], fundamental, mod_ratio, mod_index, feedback_scalar, n ) = 0 (at this point, you should take into account that the send-receive that you have in your patch introduces a delay equivalent to the current vector size). Then I would convert this into a differential equation. If I already had the discretized function F(), then this is actually quite straightforward. As a next step, I would try to compute the biggest Lyapunov-exponent of the dynamic system described by the differential equation (I would expect to get a formula for this that depends on all of the scalar parameters of your patch at the same time). This can be _very_ tricky and hard, depending on the differential equation that you get. Once you have an expression for the biggest Lyapunov-exponent, you can tell the set of parameters that would cause your system to go into the chaotic region (at least, in the mathematical sense — which might or might not do much with the acoustic sense of ‘noisiness’).
And Terry is right, I wouldn’t jump into this unless I got a grant for it. ;-)
Both excellent answers, thank you. I clearly missed the the non-linear nature of feedback.
You might also try posting this on KVRAudio’s forum. There’s been a lot of work with filters and feedback (esp. delay-free loops) recently, and I can’t help but wonder if there might be some connection that could be of value.
Thanks Peter. I guess I was naively asking for a simple formula to tie fbAmp to modFreq. Ask the respondents state I framed the question poorly. And I’m already under the yoke of one research grant at the moment :)
There is an old paper out there about doing a sawtooth via feedback FM. It’s interesting to play with and might be a starting point for some interesting explorations.
…about 2/3rds the way down in this ccrma resource:
is a reference. But sadly, once Bessel functions are mentioned I glaze over. But all the formulas are sexy; like hieroglyphs.
Thanks for the assist
Forums > MaxMSP