[sdiy] FPGA 2-OP FM MIDI Polysynth
Scott Gravenhorst
music.maker at gte.net
Thu Apr 30 23:21:46 CEST 2009
Eric Brombaugh <ebrombaugh1 at cox.net> wrote:
>Scott Gravenhorst wrote:
>> I put another sample file on the FPGA synth wiki, it's a high quality mono MP3 file
>> made from me noodling with settings while the recorder was running. Then edit out
>> the crap and silences. This shows a wider range of the kinds of tonal sounds I've
>> obtained. There is also a range of dissonant sounds possible that are not represented.
>>
>> http://www.fpga.synth.net/pmwiki/uploads/FPGASynth/8vFM-2x4_random_samples.mp3
>>
>> synth site again:
>>
>> http://www.fpga.synth.net/pmwiki/pmwiki.php?n=FPGASynth.8vFM-2x4
>
>Scott -
>
>Nice stuff. The polyphony allows some nice sustains and tasking several
>2-op generators per note allows for interesting dissonance.
>
>I hadn't looked at your wiki page until just now. Well described. I did
>note something interesting in your block diagram though: You have a
>separate NCO for the modulation and carrier. If you look at the equation
>for the FM process, you'll see that w(t) occurs twice - in principle you
>could eliminate the NCO that you're multiplying by B for the modulation
>source and just use the output of the 1st NCO. All the FM work that I've
>done has relied on this to simplify the circuits some.
I don't understand how this is done... I tried to multiply the phase accumulator output by B and I
got weird stuff because the thing would binary wrap. My phase accumulators are designed to do a
binary wrap - is that the problem? I use a phase increment value to define the frequency. Each
clock the phase increment value is added to the phase accumulator. That provides a sawtooth that
wraps naturally.
>If you're using separate NCOs then you don't really need the B
>multiplier - just load the 2nd NCO with a different frequency.
What I envisioned when I wrote the code was that w(t) represents the phase of a zero to 2*pi
incrementing "wheel" whose phase value is presented to a sine table as an address. So I took this
to imply a phase accumulator attached to a sine table.
>OTOH, using just one NCO allows the phasing of the modulation waveform to be
>somewhat more predictable since it's always in sync. It's all a tradeoff
>depending on resources and what sounds you're shooting for.
I couldn't figure out how to do this: [use a single NCO and still provide w(t) and B*w(t)] without
actually implementing the phase accumulator for each w(t). Now that you point it out, I could have
eliminated a multiplier and let the VB.NET patch program do that multiply and just supply a pitch
value B times the w(t) value. How to do this with only one phase accumulator escapes me.
-- ScottG
________________________________________________________________________
-- Scott Gravenhorst
-- FPGA MIDI Synthesizer Information: home1.gte.net/res0658s/FPGA_synth/
-- FatMan: home1.gte.net/res0658s/fatman/
-- NonFatMan: home1.gte.net/res0658s/electronics/
-- When the going gets tough, the tough use the command line.
More information about the Synth-diy
mailing list