Ph LU Te

FPGASynth.PhLUTe History

Hide minor edits - Show changes to markup

June 20, 2010, at 08:11 PM by 98.119.9.10 -
Changed lines 70-71 from:

I've decided to revive this project and have re-examined the model implementation finding some curious things. I noticed that the code uses the MCU's gate signal to mute the bore. This should not be necessary! The bore/jet system seems to self oscillate once first excited. First guess is that one or more components has too much gain. I noticed that the muting has been present in every version. If I remove the mute logic, the system oscillates after excitation. I have changed FBscale2

to:

I've decided to revive this project and have re-examined the model implementation finding some curious things. I noticed that the code uses the MCU's gate signal to mute the bore. This should not be necessary! The bore/jet system seems to self oscillate once first excited. First guess is that one or more components has too much gain. I noticed that the muting has been present in every version. If I remove the mute logic, the system oscillates after excitation. I have changed FBscale2 to be adjustable by mod wheel from 0.5 to just above 0.55. At 0.5, the oscillation will fade to zero. I will examine all of the other components that could contribute gain and make sure the settings are accurate and that there isn't some arithmetic anomoly contributing to some extra unwanted gain.

June 20, 2010, at 08:09 PM by 98.119.9.10 -
Added lines 70-71:

I've decided to revive this project and have re-examined the model implementation finding some curious things. I noticed that the code uses the MCU's gate signal to mute the bore. This should not be necessary! The bore/jet system seems to self oscillate once first excited. First guess is that one or more components has too much gain. I noticed that the muting has been present in every version. If I remove the mute logic, the system oscillates after excitation. I have changed FBscale2

November 22, 2009, at 08:36 PM by 98.119.9.10 -
Changed lines 28-29 from:

The remaining issue is that the bore takes a long time to begin resonating from zero signal, especially at long wavelengths. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors. I believe the reason for this slow rise to resonation is caused by a poor model of the jet. A real flute player will make his/her mouth opening larger for lower notes. The angle at which the player blows into to flue is also a factor. This effectively lowers the frequency of the jet (much like thicker strings vibrate at lower pitches) so that the jet:bore wavelength ratio can remain 1:2. I will try bandwidth limited noise (with a ROM so that both a filter parameter and an amplitude corrector can be implemented for each note of the scale) as a better model since bandwidth limited noise will have more energy at lower frequencies than will straight white noise.

to:

The remaining issue is that the bore takes a long time to begin resonating from zero signal, especially at long wavelengths. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors. I believe the reason for this slow rise to resonation is caused by a poor model of the jet. I will try bandwidth limited noise (with a ROM so that both a filter parameter and an amplitude corrector can be implemented for each note of the scale) as a better model since bandwidth limited noise will have more energy at lower frequencies than will straight white noise.

Changed lines 67-69 from:

This project ended without a design I like. Mainly due to the transient generated when the waveguide length is changed.

to:

This project ended without a design I like. Mainly due to the transient generated when the waveguide length is changed.



June 14, 2008, at 12:46 AM by 71.189.44.199 -
Changed lines 64-67 from:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time.

to:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time.



This project ended without a design I like. Mainly due to the transient generated when the waveguide length is changed.

April 01, 2008, at 03:59 AM by 71.160.215.231 -
Changed lines 53-54 from:
to:
  • http://electro-music.com/forum/download.php?id=12120 A sample after improvements
April 01, 2008, at 03:09 AM by 71.160.215.231 -
Changed lines 59-60 from:

Much of the quartet sounds very much like flutes, but there are parts that sound almost brassy and others that sound like bowed strings. These characteritics are controllable to a good degree using the model adjustment program.

to:

Much of the quartet sounds very much like flutes, but there are parts that sound almost brassy and others that sound like bowed strings. These characteristics are controllable to a good degree using the model adjustment program.

April 01, 2008, at 03:07 AM by 71.160.215.231 -
Changed lines 59-60 from:

Much of the quartet sounds very much like flutes, but there are parts that sound almost brassy and others that sound like bowed strings. These effects are controllable to a good degree using the model adjustment program.

to:

Much of the quartet sounds very much like flutes, but there are parts that sound almost brassy and others that sound like bowed strings. These characteritics are controllable to a good degree using the model adjustment program.

April 01, 2008, at 03:06 AM by 71.160.215.231 -
Changed lines 53-54 from:
to:

A Mozart string quartet played with phLUTes:

March 31, 2008, at 10:56 PM by 71.160.215.231 -
Added lines 38-39:

An envelope follower driving the servo speeds up bore resonance and may also be contributing to the ability of the instrument to do what I call Jovian trill harmonics. Certain trills cause the bore to begin resonating at one of several different harmonics. If one note is held after playing one of these trills, the harmonic continues to resonate for several seconds or indefinately depending on how pure the harmonic is.

Added lines 54-58:

Much of the quartet sounds very much like flutes, but there are parts that sound almost brassy and others that sound like bowed strings. These effects are controllable to a good degree using the model adjustment program.

The phLUTe playing the 1st violin part is given an increased velocity, so it will often be overblown. The phLUTe playing the 2nd violin is more tame playing it's fundamental. The lower phLUTes playing viola and cello parts go in and out of an overblown state with less velocity because the model overblows easier on lower notes.

March 31, 2008, at 10:49 PM by 71.160.215.231 -
Changed line 53 from:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time. Because of portamento issues, this would probably be mapped as one instrument per MIDI channel so that 4 parts can be created with different expressive character in each part.

to:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time.

March 31, 2008, at 10:49 PM by 71.160.215.231 -
Added lines 38-39:

I found the bits that did the ADSR level control were just wrong. Fixed them and now I get a much more expressive instrument. I also found the cause of some annoying distortion associated with the transient caused by bore length changes. This was caused by summers that were allowed to wrap. I fixed that with detection and clipping instead of wrapping.

Changed lines 42-43 from:
  • Portamento
  • Polyphonic version
to:
  • Polyphonic version - I think 4 bores are possible.
Changed lines 48-49 from:

Here is a sample of some note changes and overblowing. The pops at note changes are caused by transients generated when the instrument changes pitch. A slight portamento should help.

to:

Here is a sample of some note changes and overblowing. The pops at note changes are caused by transients generated when the instrument changes pitch. A slight portamento should help. <- actually portamento did NOT help and made the instrument either sound silly or it caused a zipper effect during pitch changes in the low register.

March 31, 2008, at 10:06 PM by 71.160.215.231 -
Changed line 48 from:
to:
March 31, 2008, at 10:05 PM by 71.160.215.231 -
Changed line 48 from:
to:
March 28, 2008, at 09:53 PM by 71.160.215.95 -
Changed lines 36-37 from:

The ADSR experiment was interesting and it seems to help. I'm now thinking more about using the conditions in the bore to calculate an optimum value for scale 2. I can use an absolute value process to make DC out of my bore signal. This DC signal can then be used to calculate the scale 2 value. The more signal in the bore, the closer scale 2 should be to .55. The less DC signal, the closer to .9999 it should be. Abs(bore) to a single pole IIR should make an envelope follower which I will try next.

to:

The ADSR experiment was interesting and it seems to help. I'm now thinking more about a servo loop using the conditions in the bore to calculate an optimum value for scale 2. I can use an absolute value process to make DC out of my bore signal. This DC signal can then be used to calculate the scale 2 value. The more signal in the bore, the closer scale 2 should be to .55. The less DC signal, the closer to .9999 it should be. Abs(bore) to a single pole IIR should make an envelope follower which I will try next.

March 28, 2008, at 08:24 PM by 71.160.215.95 -
Added lines 35-37:

The ADSR experiment was interesting and it seems to help. I'm now thinking more about using the conditions in the bore to calculate an optimum value for scale 2. I can use an absolute value process to make DC out of my bore signal. This DC signal can then be used to calculate the scale 2 value. The more signal in the bore, the closer scale 2 should be to .55. The less DC signal, the closer to .9999 it should be. Abs(bore) to a single pole IIR should make an envelope follower which I will try next.

March 28, 2008, at 06:06 PM by 71.160.215.95 -
Changed line 34 from:

I noticed that my C implementation does the same thing, so it's inherent in this simple model. Feedback scale #2 has an affect on both waveform and a kind of overall gain. I believe that it's nominal value of 0.55 shows a model at resonance. In my C implementation, I added an envelope to control it's value from 0.99 at start (from 0 signal in the delay line) ending at 0.55. This works the get the bore at full amplitude quickly. At the same time, I see a good deal of harmonic activity during the first second or so. I also noticed that higher frequency notes need a much faster decay than lower ones, distortion results. Next to add a ROM and an ADSR to control feedback scale 2. I suspect it will not give a classical flute attack sound. But it could be interesting anyway.

to:

I noticed that my C implementation does the same thing, so it seems inherent in this simple model. Feedback scale #2 has an affect on both waveform and a kind of overall gain. I believe that it's nominal value of 0.55 shows a model at resonance. In my C implementation, I added an envelope to control it's value from 0.99 at start (from 0 signal in the delay line) ending at 0.55. This works the get the bore at full amplitude quickly. At the same time, I see a good deal of harmonic activity during the first second or so. I also noticed that higher frequency notes need a much faster decay than lower ones, distortion results. Next to add a ROM and an ADSR to control feedback scale 2. I suspect it will not give a classical flute attack sound. But it could be interesting anyway.

March 28, 2008, at 06:05 PM by 71.160.215.95 -
Changed line 34 from:

I noticed that my C implementation does the same thing, so it's inherent in this simple model. Feedback scale #2 has an affect on both waveform and a kind of overall gain. I believe that it's nominal value of 0.55 shows a model at resonance. In my C implementation, I added an envelope to control it's value from 0.99 at start (from 0 signal in the delay line) ending at 0.55. This works the get the bore at full amplitude quickly. I also noticed that higher frequency notes need a much faster decay than lower ones, distortion results. Next to add a ROM and an ADSR to control feedback scale 2. I suspect it will not give a classical flute attack sound. But it could be interesting anyway.

to:

I noticed that my C implementation does the same thing, so it's inherent in this simple model. Feedback scale #2 has an affect on both waveform and a kind of overall gain. I believe that it's nominal value of 0.55 shows a model at resonance. In my C implementation, I added an envelope to control it's value from 0.99 at start (from 0 signal in the delay line) ending at 0.55. This works the get the bore at full amplitude quickly. At the same time, I see a good deal of harmonic activity during the first second or so. I also noticed that higher frequency notes need a much faster decay than lower ones, distortion results. Next to add a ROM and an ADSR to control feedback scale 2. I suspect it will not give a classical flute attack sound. But it could be interesting anyway.

March 28, 2008, at 06:02 PM by 71.160.215.95 -
Added lines 31-34:

Band limiting the noise did not help.

I noticed that my C implementation does the same thing, so it's inherent in this simple model. Feedback scale #2 has an affect on both waveform and a kind of overall gain. I believe that it's nominal value of 0.55 shows a model at resonance. In my C implementation, I added an envelope to control it's value from 0.99 at start (from 0 signal in the delay line) ending at 0.55. This works the get the bore at full amplitude quickly. I also noticed that higher frequency notes need a much faster decay than lower ones, distortion results. Next to add a ROM and an ADSR to control feedback scale 2. I suspect it will not give a classical flute attack sound. But it could be interesting anyway.

March 23, 2008, at 05:37 PM by 71.160.215.95 -
Changed lines 28-29 from:

The remaining issue is that the bore takes a long time to begin resonating from zero signal. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors.

to:

The remaining issue is that the bore takes a long time to begin resonating from zero signal, especially at long wavelengths. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors. I believe the reason for this slow rise to resonation is caused by a poor model of the jet. A real flute player will make his/her mouth opening larger for lower notes. The angle at which the player blows into to flue is also a factor. This effectively lowers the frequency of the jet (much like thicker strings vibrate at lower pitches) so that the jet:bore wavelength ratio can remain 1:2. I will try bandwidth limited noise (with a ROM so that both a filter parameter and an amplitude corrector can be implemented for each note of the scale) as a better model since bandwidth limited noise will have more energy at lower frequencies than will straight white noise.

March 23, 2008, at 04:39 PM by 71.160.215.95 -
Changed line 34 from:
  • Possibly a duophonic version
to:
  • Polyphonic version
March 23, 2008, at 04:37 PM by 71.160.215.95 -
Changed line 43 from:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time.

to:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time. Because of portamento issues, this would probably be mapped as one instrument per MIDI channel so that 4 parts can be created with different expressive character in each part.

March 23, 2008, at 04:31 PM by 71.160.215.95 -
Added lines 42-43:

From the looks of the resource usage in an XC3S500E FPGA, there is room for as many as 4 phLUTes total in this design (without using external RAM). There is also plenty of time to calculate 4 instances in the state machine. I may move to a polysynth version at some later time.

March 22, 2008, at 08:29 PM by 71.160.215.95 -
Changed lines 39-41 from:
to:
March 22, 2008, at 08:26 PM by 71.160.215.95 -
Changed lines 36-39 from:

When I have finished making a usable musical instrument out of this, I will post a sample and the code.

to:

When I have finished making a usable musical instrument out of this, I will post code.

Here is a sample of some note changes and overblowing. The pops at note changes are caused by transients generated when the instrument changes pitch. A slight portamento should help. Attach:phLUTe_003.wav

March 22, 2008, at 06:50 PM by 71.160.215.95 -
Changed lines 28-29 from:

The remain issue is that the bore takes a long time to begin resonating from zero signal. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors.

to:

The remaining issue is that the bore takes a long time to begin resonating from zero signal. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors.

March 22, 2008, at 06:49 PM by 71.160.215.95 -
Changed lines 26-27 from:

One main issue encountered during development was that the model would not resonate with seemingly random, but consistent notes. Examination of the C version's output number stream indicated that because the Lagrange interpolators use very small numbers, loss of significant digits was causing the output to be zero when the interpolator delay amount was near 1.0. This was fixed by both increasing calculation width to 35 bits signed from 18 bits signed and by adjusting the Lagrange interpolator subtrahend by a factor of 2^19 and then dividing the multiplier product by 2^19 to restore proper magnitude. This fixed the dead notes and also provides a much more consistent waveform and tonal quality from note to note.

to:

One main issue encountered during development was that the model would not resonate with a seemingly random, but consistent collection of notes. Examination of the C version's output number stream indicated that because the Lagrange interpolators use very small numbers, loss of significant digits was causing the output to be zero when the interpolator delay amount was near 1.0. This was fixed by both increasing calculation width to 35 bits signed from 18 bits signed and by adjusting the Lagrange interpolator subtrahend by a factor of 2^19 and then dividing the multiplier product by 2^19 to restore proper magnitude. This fixed the dead notes and also provides a much more consistent waveform and tonal quality from note to note.

March 22, 2008, at 06:48 PM by 71.160.215.95 -
Changed lines 20-21 from:

This is a work in progress. At this point, I've tested a C version of the logic required in fixed point binary using 18 bit signed integer arithmetic. I've translated the C code into Verilog. Debugging the system continues.

to:

This is a work in progress. At this point, I've tested C versions of the logic required in fixed point binary using both 18 bit signed integer and 32 bit signed integer arithmetic. I've translated the C code into Verilog.

March 22, 2008, at 06:46 PM by 71.160.215.95 -
Changed line 18 from:

The block diagram represents the instrument when it is being energized. The cubic polynomial nonlinearity is created when the jet is present. When the jet is not present, neither is the nonlinearity. In my implementation, the design zeros the output of the nonlinearity when the envelope value is equal to zero. If this is not done, the system will continue to oscillate even in the absence of the jet.

to:

The block diagram represents the instrument when it is being energized. The cubic polynomial nonlinearity is an approximation of the nonlinearity present in a real flute when the jet is present. When the jet is not present, neither is the nonlinearity. In my implementation, the design zeros the output of the nonlinearity when the envelope value is equal to zero. If this is not done, the system will continue to oscillate even in the absence of the jet.

March 22, 2008, at 06:44 PM by 71.160.215.95 -
Changed lines 16-17 from:

a0 and b1 (not shown in the drawing) are the reflection filter control parameters. These numbers can be performance controls and can be used to limit or enhance the ability of the model to period halve when overblown. R is the DC blocker parameter (and is not a performance control). R is set to the nominal value of 0.995. SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period halving behavior. The performance control values can receive input from various MIDI continuous controllers.

to:

The reflection filter is a first order lowpass IIR filter. a0 and b1 (not shown in the drawing) are the reflection filter control parameters. These numbers can be performance controls and can be used to limit or enhance the ability of the model to period halve when overblown. R is the DC blocker parameter (and is not a performance control). R is set to the nominal value of 0.995. SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period halving behavior. The performance control values can receive input from various MIDI continuous controllers.

March 22, 2008, at 06:43 PM by 71.160.215.95 -
Changed lines 26-29 from:

One main issue encountered during development was that the model would not resonate with random, but consistent notes. Examination of the C version's output number stream indicated that because the Lagrange interpolators use very small numbers, loss of significant digits was causes the output to be zero when the interpolator delay amount was near 1.0. This was fixed by both increasing calculation width to 35 bits signed from 18 bits signed and by adjusting the Lagrange interpolator subtraction by a factor of 2^19 and then dividing the multiplier product by 2^19 to restore proper magnitude. This fixed the dead notes and also provides a much more consistent waveform and tonal quality from note to note.

The remain issue is that the bore takes a long time to begin resonating from zero signal. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force and other factors.

to:

One main issue encountered during development was that the model would not resonate with seemingly random, but consistent notes. Examination of the C version's output number stream indicated that because the Lagrange interpolators use very small numbers, loss of significant digits was causing the output to be zero when the interpolator delay amount was near 1.0. This was fixed by both increasing calculation width to 35 bits signed from 18 bits signed and by adjusting the Lagrange interpolator subtrahend by a factor of 2^19 and then dividing the multiplier product by 2^19 to restore proper magnitude. This fixed the dead notes and also provides a much more consistent waveform and tonal quality from note to note.

The remain issue is that the bore takes a long time to begin resonating from zero signal. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force magnitude, the jet force ADSR and other factors.

March 22, 2008, at 06:40 PM by 71.160.215.95 -
Added line 25:
March 22, 2008, at 06:38 PM by 71.160.215.95 -
Added lines 34-35:

When I have finished making a usable musical instrument out of this, I will post a sample and the code.

March 22, 2008, at 06:36 PM by 71.160.215.95 -
Changed lines 16-17 from:

a0 and b1 are the reflection filter control parameters. these numbers can be performance controls and can be used to limit or enhance the ability of the model to period halve when overblown. R is the DC blocker parameter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period halving behavior. The performance control values can receive input from various MIDI continuous controllers.

to:

a0 and b1 (not shown in the drawing) are the reflection filter control parameters. These numbers can be performance controls and can be used to limit or enhance the ability of the model to period halve when overblown. R is the DC blocker parameter (and is not a performance control). R is set to the nominal value of 0.995. SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period halving behavior. The performance control values can receive input from various MIDI continuous controllers.

March 22, 2008, at 06:34 PM by 71.160.215.95 -
Changed lines 9-10 from:

This project is an FPGA based MIDI monophonic synthesizer implementing a digital waveguide physical model of an open ended cylindrical bore excited by a jet of air. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

to:

This project is an FPGA based MIDI monophonic synthesizer implementing a digital waveguide physical model of an open ended cylindrical bore excited by a jet of air. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required currently uses 14 clocks (50 MHz) and one for init. The output sample rate of the synth is 100 KHz.

Changed lines 16-19 from:

The Bore delay line length is set to exactly two times the length of the Jet delay.

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

to:

a0 and b1 are the reflection filter control parameters. these numbers can be performance controls and can be used to limit or enhance the ability of the model to period halve when overblown. R is the DC blocker parameter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period halving behavior. The performance control values can receive input from various MIDI continuous controllers.

Added lines 21-22:

The FPGA version is now working at a basic level. The instrument's range spans 5 octaves starting at middle C.

Added lines 24-30:

Issues Encountered: One main issue encountered during development was that the model would not resonate with random, but consistent notes. Examination of the C version's output number stream indicated that because the Lagrange interpolators use very small numbers, loss of significant digits was causes the output to be zero when the interpolator delay amount was near 1.0. This was fixed by both increasing calculation width to 35 bits signed from 18 bits signed and by adjusting the Lagrange interpolator subtraction by a factor of 2^19 and then dividing the multiplier product by 2^19 to restore proper magnitude. This fixed the dead notes and also provides a much more consistent waveform and tonal quality from note to note.

The remain issue is that the bore takes a long time to begin resonating from zero signal. A Model Adjustment Program (MAP) is being developed so that easy experimentation can be done with jet force and other factors.

Once the model begins to resonate, the tone is very flute like. The model also exhibits flute like performance behavior in overblowing.


March 22, 2008, at 06:22 PM by 71.160.215.95 -
Added line 13:

Block Diagram

Deleted lines 14-15:

http://www.fpga.synth.net/pmwiki/phLUTe.gif"phLUTe Block Diagram"

Deleted lines 15-48:

Block Diagram

          Env ->--[X]--<- noise                
                   |
                   V                 phLUTe Block Diagram
                   |
          Lev ->--[X]
                   |
EnvAmt->-+         V
         |         | 
Env -->-[X]----->-[+]                                         single reg
                 1 |          cubic polynomial              +-|PREVIOUS|--+
                   V            nonlinearity                |             |
                   |        +-->-+-->--+->-[NEG]->-+        |             |
         +---------+        |    |     |           |        ^             V
         |                  ^    V     V           V        |             |
         |    +---------+   |    |     |           |        |             |
      2 [+]->-|JET DELAY|->-+->-[X]->-[X]->--->---[+]---->--+-[+]-<-[NEG]-+
         |    +---------+                                      |
         ^                                     b1              |
         |                                     |               |
         |                                     V               V
         |                      single reg     |               |
         ^                  +->-|FEEDBACK1|->-[X]    +---<----[+]-<---[X]--<-R
         |                  |                  |     | Hdcx            |
SCL1 ->-[X]                 ^      reflection  V     |                 ^
         |                  |        filter    |     |   single reg    |
         ^                  +-<-------------<-[+]    +->-|FEEDBACK2|->-+
         |   +----------+   |                  |     |
         +-<-|BORE DELAY|-<-+                  ^     V
         |   +----------+                      |     |
         V                              a0 ->-[X]-<-[+] 3
         |                                           |
SCL2 ->-[X]->------->----------->------->--------->--+
March 22, 2008, at 06:21 PM by 71.160.215.95 -
Added lines 13-14:

http://www.fpga.synth.net/pmwiki/uploads/FPGASynth/phLUTe.gif

March 22, 2008, at 06:20 PM by 71.160.215.95 -
Changed line 13 from:

http://www.fpga.synth.net/pmwiki/phLUTe.gif

to:

http://www.fpga.synth.net/pmwiki/phLUTe.gif"phLUTe Block Diagram"

March 22, 2008, at 06:17 PM by 71.160.215.95 -
Changed line 13 from:
to:

http://www.fpga.synth.net/pmwiki/phLUTe.gif

March 22, 2008, at 06:15 PM by 71.160.215.95 -
Added lines 13-14:
February 28, 2008, at 09:30 PM by 71.106.218.244 -
Changed lines 14-27 from:

[--[@noise ->-+

         |                     phLUTe Block Diagram

Env ->--[X]

         |
         V
         |

Lev ->--[X]

         |
         V
         |                                                    single reg

Env ->--[+] 1 cubic polynomial +-|PREVIOUS|--+

         |                      nonlinearity                |             |
         V                  +-->-+-->--+->-[NEG]->-+        |             |
         |                  |    |     |           |        ^             V
to:

[--[@ Env ->--[X]--<- noise

                   |
                   V                 phLUTe Block Diagram
                   |
          Lev ->--[X]
                   |

EnvAmt->-+ V

         |         | 

Env -->-[X]----->-[+] single reg

                 1 |          cubic polynomial              +-|PREVIOUS|--+
                   V            nonlinearity                |             |
                   |        +-->-+-->--+->-[NEG]->-+        |             |
         +---------+        |    |     |           |        ^             V
Changed lines 45-46 from:

SCL2 ->-[X]->------->----------->------->--------->--+@]--]

to:

SCL2 ->-[X]->------->----------->------->--------->--+ @]--]

February 28, 2008, at 12:47 AM by 71.106.218.244 -
Changed line 51 from:

The block diagram represents the instrument when it is being energized. The cubic polynomial nonlinearity is created when the jet is present. When the jet is not present, neither is the nonlinearity. In my implementation, the design zeros the output of the nonlinearity when the envelope value is equal to zero. If this is not done, the system will continue to oscillate.

to:

The block diagram represents the instrument when it is being energized. The cubic polynomial nonlinearity is created when the jet is present. When the jet is not present, neither is the nonlinearity. In my implementation, the design zeros the output of the nonlinearity when the envelope value is equal to zero. If this is not done, the system will continue to oscillate even in the absence of the jet.

February 28, 2008, at 12:45 AM by 71.106.218.244 -
Changed lines 49-50 from:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

to:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values which control the resonant behavior of the system. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

February 28, 2008, at 12:44 AM by 71.106.218.244 -
Added lines 50-51:

The block diagram represents the instrument when it is being energized. The cubic polynomial nonlinearity is created when the jet is present. When the jet is not present, neither is the nonlinearity. In my implementation, the design zeros the output of the nonlinearity when the envelope value is equal to zero. If this is not done, the system will continue to oscillate.

February 28, 2008, at 12:40 AM by 71.106.218.244 -
Changed lines 54-55 from:

Portamento Possibly a duophonic version

to:
  • Portamento
  • Possibly a duophonic version
February 28, 2008, at 12:38 AM by 71.106.218.244 -
Changed lines 51-52 from:

This is a work in progress. At this point, I've tested a C version of the logic required in fixed point binary using 18 bit signed integer arithmetic. I've translated the into Verilog and am debugging the system.

to:

This is a work in progress. At this point, I've tested a C version of the logic required in fixed point binary using 18 bit signed integer arithmetic. I've translated the C code into Verilog. Debugging the system continues.


February 28, 2008, at 12:36 AM by 71.106.218.244 -
Changed line 49 from:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values supplied (performance values). Usually they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

to:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values. They are performance values. Nominally they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

February 28, 2008, at 12:34 AM by 71.106.218.244 -
Changed line 49 from:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are feedback values supplied (performance values). Usually they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

to:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are bore waveguide feedback scaling values supplied (performance values). Usually they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

February 28, 2008, at 12:31 AM by 71.106.218.244 -
Changed line 30 from:
      2 ]->-|JET DELAY|->-+->-[X]->-[X]->--->---[-]---->--+-[-<-[NEG]-+
to:
      2 ]->-|JET DELAY|->-+->-[X]->-[X]->--->---[---->--+-[+]-<-[NEG]-+
February 28, 2008, at 12:29 AM by 71.106.218.244 -
Added lines 48-49:

a0 and b1 are the reflection filter control parameters. these numbers are performance controls. R is the DC blocker paramter (and is not a performance control). SCL1 and SCL2 are feedback values supplied (performance values). Usually they are SCL1=.50 and SCL2=.55. Changing them changes the character of the sound and period doubling behavior. The performance control values will receive input from various MIDI continuous controllers.

Changed lines 51-55 from:

This is a work in progress. At this point, I've tested a C version of the logic required in fixed point binary using 18 bit signed integer arithmetic. I've translated the into Verilog and am debugging the system.

to:

This is a work in progress. At this point, I've tested a C version of the logic required in fixed point binary using 18 bit signed integer arithmetic. I've translated the into Verilog and am debugging the system.

Features I would like to add: Portamento Possibly a duophonic version

February 28, 2008, at 12:06 AM by 71.106.218.244 -
Changed lines 9-10 from:

This project is an FPGA based MIDI monophonic synthesizer implementing a digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

to:

This project is an FPGA based MIDI monophonic synthesizer implementing a digital waveguide physical model of an open ended cylindrical bore excited by a jet of air. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

February 28, 2008, at 12:05 AM by 71.106.218.244 -
Changed lines 9-10 from:

This project is an FPGA based MIDI monophonic synthesizer implementing digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

to:

This project is an FPGA based MIDI monophonic synthesizer implementing a digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

February 28, 2008, at 12:04 AM by 71.106.218.244 -
Changed lines 9-10 from:

This project is a MIDI monophonic digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

to:

This project is an FPGA based MIDI monophonic synthesizer implementing digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

February 28, 2008, at 12:03 AM by 71.106.218.244 -
Changed lines 9-10 from:

This project is a digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The design is monophonic due to limited RAM. The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

to:

This project is a MIDI monophonic digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

February 28, 2008, at 12:02 AM by 71.106.218.244 -
Changed lines 9-10 from:

This project is a digital waveguide physical model of a jet excited cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The design is monophonic due to lack of RAM. The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

to:

This project is a digital waveguide physical model of an air jet excited open ended cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The design is monophonic due to limited RAM. The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

February 27, 2008, at 09:43 PM by 71.106.218.244 -
Changed lines 9-10 from:

This project is a digital waveguide experiment physical model of a jet excited resonant digital waveguide loop.

to:

This project is a digital waveguide physical model of a jet excited cylindrical bore. The design is based on Perry Cook's slide-flute model. This model changes pitch by changing the length of the waveguides (making sure that the bore delay line is always twice the length of the jet delay line). The design is monophonic due to lack of RAM. The state machine to perform the functions required uses 12 clocks (50 MHz) and one for init. The state machine runs twice for each DAC enable (sample clock). This is done to raise the instrument's pitch range by one octave. The output sample rate of the synth is 1.0 MHz.

Added line 47:

The Bore delay line length is set to exactly two times the length of the Jet delay.

February 27, 2008, at 09:32 PM by 71.106.218.244 -
Changed lines 45-47 from:

SCL2 ->-[X]->------->----------->------->--------->--+@]--]

to:

SCL2 ->-[X]->------->----------->------->--------->--+@]--]


This is a work in progress. At this point, I've tested a C version of the logic required in fixed point binary using 18 bit signed integer arithmetic. I've translated the into Verilog and am debugging the system.

February 27, 2008, at 09:29 PM by 71.106.218.244 -
Changed line 13 from:

[@noise ->-+

to:

[--[@noise ->-+

Changed line 45 from:

SCL2 ->-[X]->------->----------->------->--------->--+@]

to:

SCL2 ->-[X]->------->----------->------->--------->--+@]--]

February 27, 2008, at 09:26 PM by 71.106.218.244 -
Changed lines 11-45 from:

to:

Block Diagram

noise ->-+
         |                     phLUTe Block Diagram
Env ->--[X]
         |
         V
         |
Lev ->--[X]
         |
         V
         |                                                    single reg
Env ->--[+] 1                 cubic polynomial              +-|PREVIOUS|--+
         |                      nonlinearity                |             |
         V                  +-->-+-->--+->-[NEG]->-+        |             |
         |                  |    |     |           |        ^             V
         |                  ^    V     V           V        |             |
         |    +---------+   |    |     |           |        |             |
      2 [+]->-|JET DELAY|->-+->-[X]->-[X]->--->---[-]---->--+-[+]-<-[NEG]-+
         |    +---------+                                      |
         ^                                     b1              |
         |                                     |               |
         |                                     V               V
         |                      single reg     |               |
         ^                  +->-|FEEDBACK1|->-[X]    +---<----[+]-<---[X]--<-R
         |                  |                  |     | Hdcx            |
SCL1 ->-[X]                 ^      reflection  V     |                 ^
         |                  |        filter    |     |   single reg    |
         ^                  +-<-------------<-[+]    +->-|FEEDBACK2|->-+
         |   +----------+   |                  |     |
         +-<-|BORE DELAY|-<-+                  ^     V
         |   +----------+                      |     |
         V                              a0 ->-[X]-<-[+] 3
         |                                           |
SCL2 ->-[X]->------->----------->------->--------->--+
February 27, 2008, at 09:24 PM by 71.106.218.244 -
Changed lines 1-11 from:

placeholder

to:

Author: Scott Gravenhorst

Verilog, designed for Spartan-3E SK, certainly adaptable for others.

Digital Waveguide phLUTe

Description:

This project is a digital waveguide experiment physical model of a jet excited resonant digital waveguide loop. Access to the system is provided by an embedded MIDI controller.


February 27, 2008, at 09:21 PM by 71.106.218.244 -
Added line 1:

placeholder