Ah, what kind of strikes me as odd is that in the routine garray_dofo it says:

double phase, phaseincr, fj;

...

phaseincr = 2. * 3.14159 / npoints;

Because phaseincr had been declared as double, Pi could have been written with 
a lot more decimal places. Or am I missing something?



> Gesendet: Sonntag, 22. November 2015 um 11:30 Uhr
> Von: "Christof Ressi" <christof.re...@gmx.at>
> An: "volker böhm" <vbo...@gmx.ch>
> Cc: pd-l...@iem.at
> Betreff: Re: [PD] oscillators (osc~ / cycle~) not working well in FM?
>
> >> the "cos_maketable(void)" in d_osc.c produces a waveform which is slightly 
> >> asymmetric, i.e. it has a tiny DC offset.
> 
> Thanks! That's exactly what I could observe when nulling [osc~] and 
> [tabosc4~]. Is there a reason for the wavetable being slightly asymmetric? 
> Looking at the source code, cos_maketable (in d_osc.c) does the calculation 
> in floats whereas garray_dofo (in g_array.c) uses doubles, so it's no wonder 
> that it's more precise. Still it's not perfect (I guess it can't) and I still 
> don't understand why an 8-point wavetable yeilds better results than a 
> 8192-point table...
> 
> And how does SC achieve such stable FM!?
> 
> Btw, I tried to use linear interpolation instead of 4-point interpolation and 
> there was no noticeable difference.
> 
> 
> 
> 
> 
> > Gesendet: Sonntag, 22. November 2015 um 10:44 Uhr
> > Von: "volker böhm" <vbo...@gmx.ch>
> > An: pd-l...@iem.at
> > Cc: "Christof Ressi" <christof.re...@gmx.at>
> > Betreff: Re: [PD] oscillators (osc~ / cycle~) not working well in FM?
> >
> > hi,
> > i think the timbre change in the FM example is due to a less than ideal 
> > cosine wavetable which is used for osc~ (and cos~ etc.).
> > the "cos_maketable(void)" in d_osc.c produces a waveform which is slightly 
> > asymmetric, i.e. it has a tiny DC offset.
> > this in return, causes the timbre shift when used in an FM context 
> > (asymmetric FM).
> > vb
> > 
> > 
> > 
> > On 22.11.2015, at 10:30, "Christof Ressi" <christof.re...@gmx.at> wrote:
> > 
> > >>> I have to say I didn't see much improvement with 8192 point wavetable 
> > >>> and tabosc4~ 
> > >  
> > > In your patch you substituted the carrier but the problem is the 
> > > modulator. Once you use [tabosc4~] as the modulator, the drift is minimal 
> > > (but it's still there). Actually it doesn't matter if you use [osc~] or 
> > > [tabosc4~] as the carrier. (See my attached patch).
> > > 
> > > I tested it in SC and you're right, I couldn't see any change in the 
> > > waveform either - even after a couple of minutes. 
> > > 
> > > Some weird things so far: 
> > > 1) [tabosc4~] is a better modulator than [osc~]
> > > 1) 8-points are better than 8192-points. 
> > > 2) [osc~] and [tabosc4~] will never null out, so [osc~] is implemented 
> > > differently (but how?)
> > > 
> > > Some interesting side note: SC actually doesn't use 4-point interpolation 
> > > for wavetable lookup but rather a form of linear interpolation: 
> > > http://doc.sccode.org/Classes/Wavetable.html
> > > http://doc.sccode.org/Classes/Osc.html
> > > 
> > > Still I'm asking myself if Max and SC might do some internal calculations 
> > > with higher precision than Pd...
> > > 
> > > Maybe Miller can help us with this?
> > > 
> > > 
> > > 
> > > Gesendet: Sonntag, 22. November 2015 um 05:11 Uhr
> > > Von: "Alexandre Torres Porres" <por...@gmail.com>
> > > An: "Christof Ressi" <christof.re...@gmx.at>
> > > Cc: "Matt Barber" <brbrof...@gmail.com>, Pd-List <pd-list@lists.iem.at>
> > > Betreff: Re: Re: [PD] oscillators (osc~ / cycle~) not working well in FM?
> > > 
> > > well, I was trying [phasor~] + [cos~] instead of [osc~] and same thing 
> > > happens, so whatever is the deal with [osc~] seems to be also with that.
> > >  
> > > I have to say I didn't see much improvement with 8192 point wavetable and 
> > > tabosc4~ 
> > >  
> > > check my test patch, both behave the same way
> > >  
> > > and, again, in SC or max is just perfect, anyone tried it? 
> > >  
> > > 
> > > SC code again:
> > >  
> > > {SinOsc.ar(SinOsc.ar(100, 0, 100 * 2pi), pi/2)}.scope
> > >  
> > > cheers
> > >  
> > > 2015-11-21 19:54 GMT-02:00 Christof Ressi <christof.re...@gmx.at>:I've 
> > > checked if there's a possible time drift between [osc~] and [tabosc4~] 
> > > and there's clearly none (I had them both run in parallel for several 
> > > minutes and compared the results).
> > > Then I did a testing patch (see attachment) where I take the difference 
> > > between the output of [osc~] and three [tabosc4~] objects (with various 
> > > table sizes). While the difference between the various [tabosc4~] objects 
> > > shows a nice periodicity and symmetry, the difference between [osc~] and 
> > > any [tabosc4~] object is somehow periodic but it's not symmetric (and 
> > > it's much larger). Does anyone understand how [osc~] is actually 
> > > implemented and why it generates a different output than [tabosc4~]?
> > > 
> > > 
> > > 
> > >  
> > >  
> > > 
> > > Gesendet: Samstag, 21. November 2015 um 20:24 Uhr
> > > Von: "Matt Barber" <brbrof...@gmail.com>
> > > An: "Christof Ressi" <christof.re...@gmx.at>
> > > Cc: "Alexandre Torres Porres" <por...@gmail.com>, Pd-List 
> > > <pd-list@lists.iem.at>
> > > Betreff: Re: [PD] oscillators (osc~ / cycle~) not working well in FM?
> > > 
> > > Try it with an 8-point table and [tabosc4~]. It's still far more stable 
> > > than [osc~].
> > >  
> > >  
> > >  
> > > On Sat, Nov 21, 2015 at 1:50 PM, Christof Ressi <christof.re...@gmx.at> 
> > > wrote:I've found the reason! Looking at the Pd source code (d_osc.c and 
> > > m_pd.h) [osc~] seems to read from a 512 (1<<9) point wavetable (defined 
> > > by LOGCOSTABSIZE and COSTABSIZE in m_pd.h), whereas SuperCollider's 
> > > SinOsc uses 8192 points. (Both programs do their audio math with 32-bit 
> > > floats.)
> > > So I tried to substitute [osc~] with [tabosc4~] reading from a 8192 point 
> > > wavetable (done with a simple cosinesum) - and the result is far more 
> > > stable (although not perfect)! I think you can't really prevent this kind 
> > > of drift with FM, although you can keep it very small by using very large 
> > > wavetables. The better solution, however, is using PM, as you've 
> > > discovered anyway.
> > >  
> > > 
> > > Gesendet: Samstag, 21. November 2015 um 19:12 Uhr
> > > Von: "Alexandre Torres Porres" <por...@gmail.com[por...@gmail.com]>
> > > An: "Christof Ressi" <christof.re...@gmx.at[christof.re...@gmx.at]>
> > > Cc: Pd-List <pd-list@lists.iem.at[pd-list@lists.iem.at]>
> > > Betreff: Re: Re: [PD] oscillators (osc~ / cycle~) not working well in FM?
> > > 
> > >> Does this make sense? :-D
> > >  
> > > yeah, I kinda had the same idea
> > >  
> > >> Can anyone explain why this kind doesn't in SC or Max?
> > >  
> > > that what I'd really love to know
> > >  
> > > here's my SC code that relates to my first example patch I posted here
> > >  
> > > 
> > > // 0Hz FM
> > > {SinOsc.ar(SinOsc.ar(100, 0, 100 * 2pi), pi/2)}.scope
> > >  
> > > quite stable
> > >  
> > > 2015-11-21 15:47 GMT-02:00 Christof Ressi 
> > > <christof.re...@gmx.at[christof.re...@gmx.at]>:
> > > 
> > > Hey Alexander, that's very interesting! What's funny: when using [metro] 
> > > + [vline~] instead of [phasor~], the drift is clearly slower. As you 
> > > noted, PM seems to be stable (It is noteworthy that DX7 actually uses PM 
> > > for better stability).
> > >  
> > > My guess it, it has something to do with rounding errors. And I can 
> > > somehow intuitively see how this will affect FM but not PM:
> > >  
> > > Let's imagine a huge truck on a highway. On the truck is another car 
> > > which can move forwards and backwards. And then there's a motercycle 
> > > going at a fixed speed.
> > >  
> > > FM -> The car would remain fixed on the truck and someone would press and 
> > > release the gas pedal of the truck periodically (starting from the same 
> > > speed as the motercycle). If the amount of pressure/relief is not 100% 
> > > precise, you can't really tell where exactly the car+truck will be after 
> > > a couple of miles, even if the timing of manipulating the gas pedal is 
> > > 100% exact, because small errors in speed will immediately result in 
> > > small but lasting errors in location. So there will probably be a slow 
> > > drift over time between the truck+car and the motercycle.
> > >  
> > > PM -> The truck moves at a fixed speed (same as the motorcycle) while the 
> > > car on the truck goes forwards and backwards at a fixed intervall. The 
> > > car is guaranteed to be in the middle of truck every N seconds. So even 
> > > if the movement of the car might not be perfect, the location is 100% 
> > > predictable at least every N*k seconds and this means that it will stay 
> > > in phase with the motorcycle.
> > >  
> > > Does this make sense? :-D
> > >  
> > > Can anyone explain why this kind doesn't in SC or Max??? (I didn't test 
> > > it myself) Larger look-up tables? More precision?
> > >  
> > >  
> > > 
> > > Gesendet: Samstag, 21. November 2015 um 17:06 Uhr
> > > Von: "Alexandre Torres Porres" 
> > > <por...@gmail.com[por...@gmail.com][por...@gmail.com[por...@gmail.com]]>
> > > An: "Roman Haefeli" 
> > > <reduz...@gmail.com[reduz...@gmail.com][reduz...@gmail.com[reduz...@gmail.com]]>
> > > Cc: 
> > > "pd-list@lists.iem.at[pd-list@lists.iem.at][pd-list@lists.iem.at[pd-list@lists.iem.at]]"
> > >  
> > > <pd-list@lists.iem.at[pd-list@lists.iem.at][pd-list@lists.iem.at[pd-list@lists.iem.at]]>
> > > Betreff: Re: [PD] oscillators (osc~ / cycle~) not working well in FM?
> > > 
> > > By the way, I was wondering and thinking if this was a particularity of 
> > > the "0Hz carrier FM", that is: a FM patch with no carrier frequency. But 
> > > I tried other regular FM patches with a carrier signal and could see that 
> > > it didn't keep static as well.
> > >  
> > > On the other hand, the same patch implemented as Phase Modulation (PM) 
> > > maintains a static waveform in Pd.
> > >  
> > > In my last example, the patch I had as "waveshaping" could be thought of 
> > > as a "0hz PM" patch.
> > >  
> > > Now, I tested the PM stability with the [phasor~] + [cos~] architecture 
> > > and also with [cycle~]. 
> > >  
> > > The FM instability happened with both [osc~] and [cycle~].
> > >  
> > > In Max, a FM patch with [cycle~] is stable.
> > >  
> > > In short, there's something fishy with FM in Pd...
> > >  
> > > cheers
> > >  
> > > 2015-11-21 13:25 GMT-02:00 Alexandre Torres Porres 
> > > <por...@gmail.com[por...@gmail.com][por...@gmail.com[por...@gmail.com]]>:
> > >>  Can you elaborate?
> > >  
> > > Not easily I'm afraid, so I'll try to keep it simple: it's a 
> > > demonstration on the relationship between FM and waveshaping, compare now 
> > > both patches in my new example. The waveshaping does not change through 
> > > time.
> > >  
> > > But let me attempt to reason why it should keep static - it's like any 
> > > other FM patch, once you have set the parameters, the waveform must be 
> > > static and not change in time. My tests with supercollider and Max had a 
> > > good result (waveform kept static). I also tried in Pd with cycle~ and in 
> > > the newest vanilla.
> > >  
> > > cheers
> > >  
> > > 
> > > 2015-11-21 11:26 GMT-02:00 Roman Haefeli 
> > > <reduz...@gmail.com[reduz...@gmail.com][reduz...@gmail.com[reduz...@gmail.com]]>:
> > > 
> > > On Sat, 2015-11-21 at 02:59 -0200, Alexandre Torres Porres wrote:
> > >> howdy, attached there's a patch where I was experimenting with FM
> > >> 
> > >> 
> > >> the waveform shouldn't change with time, but it does. Give it a while
> > >> though, 30 seconds is enough to hear a change in tone quality, then
> > >> resseting the oscillator phase brings it back to where it was
> > >> 
> > >> 
> > >> don't know why it does come out of phase, an equivalent patch in SC
> > >> and Max does not get out of phase...
> > > 
> > > I hear and see what you mean. Interesting question. Frankly, I don't
> > > quite understand why it is expected to stay in phase. Can you elaborate?
> > > 
> > > Roman
> > > 
> > >  _______________________________________________
> > > Pd-list@lists.iem.at[Pd-list@lists.iem.at][Pd-list@lists.iem.at[Pd-list@lists.iem.at]]
> > >  mailing listUNSUBSCRIBE and account-management -> 
> > > http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]]][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]]]]
> > >  _______________________________________________ 
> > > Pd-list@lists.iem.at[Pd-list@lists.iem.at][Pd-list@lists.iem.at[Pd-list@lists.iem.at]]
> > >  mailing list UNSUBSCRIBE and account-management -> 
> > > http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]]][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]]]]
> > > 
> > > _______________________________________________
> > > Pd-list@lists.iem.at[Pd-list@lists.iem.at] mailing list
> > > UNSUBSCRIBE and account-management -> 
> > > http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list][http://lists.puredata.info/listinfo/pd-list[http://lists.puredata.info/listinfo/pd-list]]
> > >  <FM-test-3-reply.pd>_______________________________________________
> > > Pd-list@lists.iem.at mailing list
> > > UNSUBSCRIBE and account-management -> 
> > > http://lists.puredata.info/listinfo/pd-list
> > 
> >
> 
> _______________________________________________
> Pd-list@lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> 
> http://lists.puredata.info/listinfo/pd-list
>

_______________________________________________
Pd-list@lists.iem.at mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to