I can tell you, though, that you won't be able to do feedback FM by modulating the frequency input of [osc~]. You have to do the phase modulation version of FM to do feedback. The reason is that if you feedback modulate the frequency value with a modulation index above 1, you are inevitably going to have a frequency of 0, which will stop the oscillator permanently. However, if you modulate the phase of a [phasor~] that reads a [cos~], the [phasor~] will never stop. Take a look at E08.phase.mod.pd, which is just a PM version of FM.
The other caveat is that you need to have a [block~ 1] to ensure that the feedback is accurate.
Just a heads up, I'm currently working on a FM tutorial that will cover all of this...
]]>This was described in an old Yamaha patent, but I think it never appeared in any synth.
]]>Now that you mention the DX7 acrell, my intention is that once i understand how to build this basic feedback fm algorithm i could probably evolv that idea and start recreating the algorithms from the DX7 in a pd patch.
]]>There are also more ambitious things you can do than straightforward FM. See some of the asymmetric FM stuff here: https://ccrma.stanford.edu/software/snd/snd/fm.html
]]>Thanks acreil, ive used the straightforward FM technique before and i wanted to try something different this time just to be able to go through the Computer Music Tutorial Book.
I asked the same question on a different forum and someone finally could solve the problem of feeding the signal back without getting a "dsp loop error", so i came up with a version of the basic ffm algorithm picture that i attached earlier but im not so sure its FFM... what do you think...
]]>[fexpr~] is just the loop filter, y[t] = 0.5(x[t]+x[t1]), as I said previously.
So the end result is this:
y[t] = cos(2*pi*f*t + 0.5*g[t]*(y[t1]+y[t2]))
2*pi*f*t is just the [phasor~] input and g[t] is the feedback coefficient. That's really it; the math isn't that hard.
]]>[fexpr~] is just the loop filter, y[t] = 0.5(x[t]+x[t1]), as I said previously.
[fexpr~] is known to be quite computationally expensive. To avoid using it, you could do it this way:
[rzero~ 1]

[*~ .5]
(Disclaimer: I haven't actually compared the two.)
]]>Fig. 7 shows the oscillatory burst and Fig. 8 shows the filter. There's some explanation in the text.
I used [fexpr~] because I was hoping that other types of filters would produce better results. But everything I've tried ends up being worse. I was hoping to use something that has a null at Fs/2 and Fs/4, but it doesn't seem to work any better. It's probably better to just oversample so that all of the oscillatory stuff is outside the audible range.
Oh, also note that the feedback coefficients in the patent would be in radians, so they should be 2*pi larger than in my PD patch, since [cos~] includes the 2*pi.
]]>The main problem i had was understanding what [fexpr~] was doing, since i couldnt understand why would you put a mathematical expression as a filter. But i made a little research and found this paper called "a general filter design language with realtime parameter control in pd, max/msp, and jmax" (anyone can google it and download the pdf) and it explains the family of [expr] objects, and now it all makes complete sense. And as i suspected i do need a little bit more math...
Thanks again!
]]>I tried the mean filter in the feedback loop, but it doesn't really sound closer to FM8's self modulating oscillator. FM8 is supposed to be a kind of perfect clone to DX7. I don't have a DX7, but I have FM8, so I'm using it as a guide to recreate DX7 patches in Pd.
So yeah, basically, the mean filter didn't seem to work and I wonder if anyone could help me out here
thanks
]]>I am now looking to implement feedback and was wondering what the best way to implement this was, i also saw this post
https://forum.pdpatchrepo.info/topic/10864/fmfeedbackhack
and was wondering if you'd come across it too and if you can offer any advice from your experiences ? Cheers
thanks
R
I dont actually know if the formulas are 100% correct but they seem pretty close comparing with fm8. I'm a bit in the dark about the whole 64 block issue so i will need to do a bit of research into that.
Cheers
R
]]>