discrete summation formula on max
Hi list,
here a patch concerning the "discrete summation formula" showed in the Dodge-Jerse's book.
I developed the flowchart of page 162 (latest edition).
Unfortunately it doesn't work properly.
Could you please take a look at the following patch? Thanks
fv
(edited by admin - please use copy-compressed when posting patches)
hi federico,
here's my take on it, using the second formula from the book to avoid division by zero. I'm not quite sure, which treshold to use for "near zero"..
But there's still a problem with keeping the oscillators in sync...
I've used one main phasor~ and rate~.
The oscils seem to drift. Strangely, when *repeatedly" sending rate~ the "sync lock" message, they stay in sync.
PS:
there is a typo in your patch:
(2+N+1) should be (2*N+1)
I couldn't resist to also patch the gbuzz, which is easier to implement and more fun to use :)
happy buzzing,
thanks mudang,
the second is great. I'm trying to realize a patch to choice the number of the components.
best
hi mudang,
in your second patch i found there are strange components which grows up when
index is > 0.5. this is probably due to the division, because some zero is still present...
i will thinking about that.
thanks
fv
The artifacts you mention, are probably aliasing or clipping.
The second patch ("gbuzz") isn't band-limited and with high index values will also have a very high output amplitude.
The next step would be to implement a normalizing function, that keeps the amplitude in range.
There's a good paper on discrete summation formulas by Moorer:
http://www.jamminpower.com/PDF/Sine%20Summation.pdf
it doesn't deal with the division by zero problem, though...
Thanks for the paper,
In regard the second patch unfortunately it's not an aliasing problem...
The second patch works fine with an index
amplitude response in the spectrum is something like y=x raised to a
power
Best
fv
here there is a patch in which cycle gives no "zeroes", but the problem is still there!!!!
i suppose the wrong spectral component depends on other problems....
{
"boxes" : [ {
"box" : {
"maxclass" : "comment",
"text" : "no zero!",
"linecount" : 2,
"numinlets" : 1,
"numoutlets" : 0,
"fontname" : "Arial",
"patching_rect" : [ 259.0, 344.0, 64.0, 43.0 ],
"id" : "obj-17",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "print",
"numinlets" : 1,
"numoutlets" : 0,
"fontname" : "Arial",
"patching_rect" : [ 218.0, 354.0, 42.0, 25.0 ],
"id" : "obj-11",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "if $f1 != 0 then $f1 else 0.001",
"numinlets" : 1,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "" ],
"patching_rect" : [ 111.0, 251.0, 217.0, 25.0 ],
"id" : "obj-9",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "expr sin(6.2831*$f1)",
"numinlets" : 1,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "" ],
"patching_rect" : [ 111.0, 203.5, 173.0, 27.0 ],
"id" : "obj-59",
"fontsize" : 18.0
}
}
, {
"box" : {
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"patching_rect" : [ 60.0, 27.0, 31.0, 31.0 ],
"id" : "obj-61"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "/ 513.",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "float" ],
"patching_rect" : [ 109.0, 146.5, 56.0, 27.0 ],
"id" : "obj-63",
"fontsize" : 18.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "uzi 513 0",
"numinlets" : 2,
"numoutlets" : 3,
"fontname" : "Arial",
"outlettype" : [ "bang", "bang", "int" ],
"patching_rect" : [ 60.0, 73.0, 84.0, 27.0 ],
"id" : "obj-64",
"fontsize" : 18.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "t i i",
"numinlets" : 1,
"numoutlets" : 2,
"fontname" : "Arial",
"outlettype" : [ "int", "int" ],
"patching_rect" : [ 61.0, 110.5, 58.0, 27.0 ],
"id" : "obj-65",
"fontsize" : 18.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "buffer~ tab2 11.6326",
"numinlets" : 1,
"numoutlets" : 2,
"fontname" : "Arial",
"outlettype" : [ "float", "bang" ],
"patching_rect" : [ 34.0, 411.0, 175.0, 27.0 ],
"id" : "obj-66",
"fontsize" : 18.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "peek~ tab2",
"numinlets" : 3,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "float" ],
"patching_rect" : [ 64.0, 352.5, 100.0, 27.0 ],
"id" : "obj-67",
"fontsize" : 18.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "-~ 1.",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "signal" ],
"patching_rect" : [ 413.0, 533.0, 43.0, 25.0 ],
"id" : "obj-24",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "loadmess 0.75",
"numinlets" : 1,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "" ],
"patching_rect" : [ 797.0, 276.0, 115.0, 25.0 ],
"id" : "obj-18",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "spectroscope~",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 659.0, 756.0, 300.0, 100.0 ],
"id" : "obj-16"
}
}
, {
"box" : {
"maxclass" : "ezdac~",
"numinlets" : 2,
"numoutlets" : 0,
"patching_rect" : [ 489.0, 803.0, 45.0, 45.0 ],
"id" : "obj-15"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "*~",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "signal" ],
"patching_rect" : [ 467.0, 678.0, 32.5, 25.0 ],
"id" : "obj-14",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"fontname" : "Arial",
"outlettype" : [ "float", "bang" ],
"patching_rect" : [ 535.0, 581.0, 75.0, 25.0 ],
"id" : "obj-13",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "expr $f1/(2*$f2)",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "" ],
"patching_rect" : [ 534.0, 610.0, 121.0, 25.0 ],
"id" : "obj-12",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "/~",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "signal" ],
"patching_rect" : [ 414.0, 488.0, 32.5, 25.0 ],
"id" : "obj-10",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "expr $f1/2.",
"numinlets" : 1,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "" ],
"patching_rect" : [ 693.0, 276.0, 86.0, 25.0 ],
"id" : "obj-8",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"patching_rect" : [ 406.0, 62.0, 20.0, 20.0 ],
"id" : "obj-7"
}
}
, {
"box" : {
"maxclass" : "number",
"numinlets" : 1,
"numoutlets" : 2,
"fontname" : "Arial",
"outlettype" : [ "int", "bang" ],
"patching_rect" : [ 555.0, 77.0, 83.0, 25.0 ],
"id" : "obj-6",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "number",
"numinlets" : 1,
"numoutlets" : 2,
"fontname" : "Arial",
"outlettype" : [ "int", "bang" ],
"patching_rect" : [ 406.0, 97.0, 83.0, 25.0 ],
"id" : "obj-5",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"fontname" : "Arial",
"outlettype" : [ "float", "bang" ],
"patching_rect" : [ 406.0, 194.0, 129.0, 25.0 ],
"id" : "obj-4",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "expr $f1*(2.*$f2+1.)/2.",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "" ],
"patching_rect" : [ 407.0, 149.0, 167.0, 25.0 ],
"id" : "obj-3",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "cycle~ tab2",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "signal" ],
"patching_rect" : [ 693.0, 340.0, 92.0, 25.0 ],
"id" : "obj-2",
"fontsize" : 16.0
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "cycle~ tab2",
"numinlets" : 2,
"numoutlets" : 1,
"fontname" : "Arial",
"outlettype" : [ "signal" ],
"patching_rect" : [ 406.0, 340.0, 92.0, 25.0 ],
"id" : "obj-1",
"fontsize" : 16.0
}
}
],
"lines" : [ {
"patchline" : {
"source" : [ "obj-9", 0 ],
"destination" : [ "obj-67", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-9", 0 ],
"destination" : [ "obj-11", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-8", 0 ],
"destination" : [ "obj-2", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-7", 0 ],
"destination" : [ "obj-5", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-65", 0 ],
"destination" : [ "obj-67", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-65", 1 ],
"destination" : [ "obj-63", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-64", 2 ],
"destination" : [ "obj-65", 0 ],
"hidden" : 0,
"midpoints" : [ 134.5, 107.0, 70.5, 107.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-63", 0 ],
"destination" : [ "obj-59", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-61", 0 ],
"destination" : [ "obj-64", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-6", 0 ],
"destination" : [ "obj-7", 0 ],
"hidden" : 0,
"midpoints" : [ 564.5, 124.0, 501.0, 124.0, 501.0, 58.0, 415.5, 58.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-6", 0 ],
"destination" : [ "obj-3", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-6", 0 ],
"destination" : [ "obj-12", 1 ],
"hidden" : 0,
"midpoints" : [ 564.5, 135.0, 574.0, 135.0, 574.0, 261.0, 645.5, 261.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-59", 0 ],
"destination" : [ "obj-9", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-5", 0 ],
"destination" : [ "obj-8", 0 ],
"hidden" : 0,
"midpoints" : [ 415.5, 135.0, 702.5, 135.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-5", 0 ],
"destination" : [ "obj-3", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-4", 0 ],
"destination" : [ "obj-1", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-3", 0 ],
"destination" : [ "obj-4", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-24", 0 ],
"destination" : [ "obj-14", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-2", 0 ],
"destination" : [ "obj-10", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-2", 1 ],
"hidden" : 0,
"midpoints" : [ 806.5, 327.0, 775.5, 327.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-1", 1 ],
"hidden" : 0,
"midpoints" : [ 806.5, 327.0, 488.5, 327.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-14", 0 ],
"destination" : [ "obj-16", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-14", 0 ],
"destination" : [ "obj-15", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-14", 0 ],
"destination" : [ "obj-15", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-13", 0 ],
"destination" : [ "obj-12", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-12", 0 ],
"destination" : [ "obj-14", 1 ],
"hidden" : 0,
"midpoints" : [ 543.5, 665.0, 490.0, 665.0 ]
}
}
, {
"patchline" : {
"source" : [ "obj-10", 0 ],
"destination" : [ "obj-24", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
, {
"patchline" : {
"source" : [ "obj-1", 0 ],
"destination" : [ "obj-10", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}
}
]
}