<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>The BLITs and BLEPs deal with the aliasing you get from sharp
edges. I am more concerned with the jitter you get from the
mathematical residue of the ratio of F/Fs. In my experience it is
an issue mostly with sawtooth waveforms. Triangles and sines seem
to have much less trouble.</p>
<p>Someone mentioned oversampling the NCOs and decimating. It seems
to me the act of decimation just brings the problem back. Why not
just filter the NCO straight and skip the oversampling/decimation?</p>
<p>--tr</p>
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 7/15/2018 4:12 AM, Andrew Simper
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAAxOnzb-B6FE_2MzVF6qpNqUO3RjyDr9PcUUfjt6mpT9-gfaNw@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<div dir="ltr">On Sun, 15 Jul 2018 at 00:45, Richie Burnett <<a
href="mailto:rburnett@richieburnett.co.uk"
moz-do-not-send="true">rburnett@richieburnett.co.uk</a>>
wrote:<br>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">...-Richie,
<br>
<br>
Ps, I would encourage you to read up about BLIT, MinBLEP,
polyBLEP, etc, if your're interested in digital synthesis of
classic analog waveforms with reduced aliasing. These
algorithms solve the problem of aliasing a more elegantly
than just increasing the sample rate. They are a lot more
efficient than simply burning CPU cycles by oversampling,
which turns out to be a relatively poor method of achieving
the end result. Papers by Tim Stilton and Eli Brandt are a
good place to start.<br>
<br>
Sent from my Xperia SP on O2<br>
<br>
</blockquote>
<div><br>
</div>
<div>If you want to use BLEP then stick with Linear Phase
BLEP, it's easy to handle DC offset accumulation with
frequency changes. There is another method which is probably
better in this case: DPW. The basic idea is you integrate
the desired waveform and generate this directly using a
trivial non-bandlimited method, you then use numerical
differentiation to recover the desired waveform. For example
for a sawtooth you need a parabolic waveform, which you can
easily generate by squaring your phase accumulator as
follows...</div>
<div><br>
</div>
<div>init:</div>
<div>phase = 0</div>
<div>prb = 0</div>
<div>inc = freq/samplerate</div>
<div>incinv = 1.0/inc</div>
<div><br>
</div>
<div>tick:</div>
<div>phase += inc</div>
<div>if (phase >= 0.5) phase -= 1.0</div>
<div>prbz = prb</div>
<div>prb = phase*phase</div>
<div>saw = (prb - prbz)*incinv</div>
<div><br>
</div>
<div>This can also be applied reduce aliasing in waveshapers,
but it does introduce low pass filtering of 1/2 + 1/2 z^-1,
which delays the input by half a sample. Thanks to
Antti Huovilainen for putting me onto this method :)</div>
<div><br>
</div>
<div>Cheers,</div>
<div><br>
</div>
<div>Andy</div>
<div><br>
</div>
<div><br>
</div>
</div>
</div>
</blockquote>
<br>
<pre class="moz-signature" cols="72">--
--Tim Ressel
Circuit Abbey
<a class="moz-txt-link-abbreviated" href="mailto:timr@circuitabbey.com">timr@circuitabbey.com</a></pre>
</body>
</html>