FM feedback

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS

Post

I'm planning to rework my FM synth (Piper) a little and feedback is one of the things I'd like to add.

(Amusingly it's one of a handful of my own creations I actually find myself using.)

How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?

Do you grab the feedback value pre or post envelope?

..other pointers?

Also, I am considering adding an arp that is assignable per operator. Seems like it could be pretty awesome, anyone tried anything like that?

Post

Rock Hardbuns wrote:How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?
I think it's something like...

Code: Select all

output = amp * sin(2 * pi * accumulator + output * fb)
Do you grab the feedback value pre or post envelope?
I would say post. That way the envelope affects the amplitude of the feedback [edit]by affecting the amplitude of the output[/edit]. You can get those cheesy FM brass sounds that way. :)
Also, I am considering adding an arp that is assignable per operator. Seems like it could be pretty awesome, anyone tried anything like that?
Cool! 8)

I'm not aware of anyone doing that before.

Post

Leslie Sanford wrote: I think it's something like...

Code: Select all

output = amp * sin(2 * pi * accumulator + output * fb)
Yes, that's kind of what I meant, I think. Output in this case would hold the data from the last pass, essentially working like a single sample delay. Right?

When you see the diagrams, there's just an arrow going back to the input, but there is no way to do it in a single pass I would think.
I would say post. That way the envelope affects the amplitude of the feedback [edit]by affecting the amplitude of the output[/edit]. You can get those cheesy FM brass sounds that way. :)
Duly noted.

Btw: Are you still working on the DS-8 thing? It could be cool.

Post

Rock Hardbuns wrote:How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?
Implementing feedback FM will result in pitch droop of the fundamental with sinusoidal FM. For those "classic" FM sounds, you want to implement PHASE modulation. The two ways of doing this:

- For a lookup table oscillator, or anything based around a waveshaped ramp, just scale your feedback signal by the desired envelope, then add it directly to the phase increment value. Make sure you add the modulation signal before the wrap-around for the ramp.

- For other FM methods (oscillating filter, modulating a delay line, etc.), just run your modulation signal through a first-order differentiator (a one-zero filter). Differentiating frequency gives you phase.

The single sample delay approach is implicit in this method - to get around this, you can oversample, and get fractions of a delay. Also, try playing around with the sign of the feedback. I'm sure there are other waveshaping and filtering tricks that can be performed on the feedback signal as well to get some nice results. High FM indices will result in aliasing, but this is part of the "classic" sound as well, and can be useful in the generation of noisy transients.

Sean Costello

Post

Rock Hardbuns wrote: Yes, that's kind of what I meant, I think. Output in this case would hold the data from the last pass, essentially working like a single sample delay. Right?

When you see the diagrams, there's just an arrow going back to the input, but there is no way to do it in a single pass I would think.
Yeah, it's just like how we have to deal with sample delays in filters.
Btw: Are you still working on the DS-8 thing? It could be cool.
Mainly as a thought experiment. I was playing around with this plugin which emulates Yamaha's 4-op FM synth chip (which I believe the DS-8 uses). I was impressed by the variety of sounds you can get using just two operators. It's been awhile since I've played with FM.

I would love to get my hands on an actual DS-8, but I haven't seen any on ebay, and anyway I don't know if I can justify the expense.

Post

Valhallasound >
Yes, I usually assume that FM means PM. Actual FM is so unusual.
I currently do 2x oversampling, without anti-aliasing. I find that it tends to make the aliasing noise "whiter" which can actually be a wanted artifact.

Though I am thinking of adding an optional sinc downsampler this time around.

Leslie >
Hm, that one been around forever, but I've always ignored it because of the gui. Time to give it a try perhaps.

Post

PM with feedback is equivalent to slanting the y-axis to the right (or left) and then reading out where the sine intersects that axis while moving it underneath. As soon as the y-axis intersects more than one point of the sine signal, you get chaotic noise. Using this analogy you can search for the correct intersection point without oversampling.

Post

Christian Schüler wrote:PM with feedback is equivalent to slanting the y-axis to the right (or left) and then reading out where the sine intersects that axis while moving it underneath. As soon as the y-axis intersects more than one point of the sine signal, you get chaotic noise. Using this analogy you can search for the correct intersection point without oversampling.
I understand what you are saying, but in practical terms, the other way was so much simpler.

I just posted this in /Instruments:
http://www.kvraudio.com/forum/viewtopic.php?t=255695

I gave up on the arp idea. Turns out I would have had to rewrite the voice logic, and I wasn't in the mood. :D

Post

Oh, you didn't want to solve this?

a * x + b = arcsin( x )

:hihi: :hihi: :hihi:

(edit: I think there is no analytic solution so a search is the only possible. So it is even the question if it turns out more efficient than oversampling)

Post Reply

Return to “DSP and Plugin Development”