Code: Select all
function parWM(w, c::PhaseCounter)
phase = phasor(c)
if phase < w
return -4 * (phase/w - 0.5)^2 + 1
else
return 4 * ((phase-w)/(1-w) - 0.5)^2 - 1
end
end
w is width and 0 ≤ w ≤ 1.
width = 0
width = 0.3
width = 0.5
width = 0.7
width = 1
I'm looking for efficient method to reduce aliasing in this oscillator. Not only looking, but want to understand what is better and why. And I hope for your help... On this forum I found polyBLAMP implementation by Tale:
http://www.kvraudio.com/forum/viewtopic ... r#p6107378
And it's working well in my case when width = 1 or width = 0 (when it's just a parabola). It also suppress aliasing with other width value, but there is audible aliasing.
Also I tried to apply polyBLAMP from this paper:
http://www.ness-music.eu/wp-content/upl ... squeda.pdf
But I failed... (I almost sure, that I did something wrong).
I'd not write, but I'm in stuck. The only solution currently I see is using Tale's polyBLAMP with oversampling. But I'm not sure this IS a solution and I believe there is a much better way. I'm also planning to use width in range [0.05, 0.5] or so, but currently it's not matter, I think. Also I'm trying to suppress aliasing in a single-parabola version of this oscillator for start:
Code: Select all
function parWM_bi_osc_lf(w, c::PhaseCounter)
phase = phasor(c)
if phase < w
return -4 * (phase/w - 0.5)^2 + 1
else
return 0
end
end