Band Limited Impulse Train Synthesis

I'm currently working on a piece of DSP/Synthesis software and I have run into the issue of generating band limited waveforms. I have been doing some research to try and find a good solution but I haven't had much luck. I have found some things about a BLIT to generate complex waveforms but I have not found a good example of an implementation. I am not very good with Math or Mathematical notation but I am great with dealing with c/c++ code. If anyone has a good explanation of how to generate a BLIT using c/c++ or resources about that I would much appreciate any help that you could give.

Thanks

P.S. I know this could also be a Stack Overflow question because of the programming nature but I thought I would try the DSP community first. Thanks again.

• musicdsp.org/archive.php?classid=1 – endolith Apr 22 '14 at 3:36
• I am familiar with the site. Is there a specific post that you are recommending? The link just takes me to the archive. – Alex Zywicki Apr 22 '14 at 4:29
• Any reason why you want to use this instead of BLEP - which is easier to implement and has a few available open-source implementation? – pichenettes Apr 22 '14 at 7:16
• No particular reason. Just following a possible solution to my problem – Alex Zywicki Apr 22 '14 at 13:39

the main idea behind BLIT is that these analog synth waveforms that we are trying to generate digitally can be thought of as the integral (over $t$) of impulse trains.

a sawtooth can be thought of as the integral of the sum of a little bit of DC and an impulse train. a square wave is the integral of impulses of alternating signs. the triangle wave is the integral of the square wave.

so, to create bandlimited waveforms of the above, the impulse trains are bandlimited which means that each impulse $\delta(t-t_n)$ is replaced by a $\operatorname{sinc}(t-t_n)$ function, which is that impulse bandlimited through a Nyquist brick-wall LPF. that sequence of bandlimited impulses is a BLIT.

then, since integration is a filter with s-plane transfer function of $H(s)=\frac{1}{s}$ and is LTI (Linear, Time-Invariant), integrating the BLITs will introduce no new frequency components. if your BLITs are bandlimited, so are the other waveforms that are derived from filtering the BLITs.

• Just to be clear. The sinc function itself is band limited or does it need to be band limited up to nyquist? – Alex Zywicki Apr 22 '14 at 13:42
• @AlexZywicki The sinc function is ideally band limited. It is the time domain function corresponding to an ideal (brick wall) low pass function in the frequency domain. – Matt L. Apr 22 '14 at 17:10
• @Matt L. Okay cool. I'm still a little lost on how to use this though. To generate the blit would I simply use the sinc function a if I were using a sin function and just specify the phase an what not or am I missing something involving some dsp concept I don't understand yet? – Alex Zywicki Apr 23 '14 at 3:51
• so Alex, what you have to do is first understand what your BLI is (no T, yet). likely a windowed $\operatorname{sinc}()$. but the impulse happens at times that do not generally land on a sampling instance. so then, knowing when the impulse happens, and making the bandlimited impulse happen at the same time, that involves using values of the $\operatorname{sinc}((t-t_n)/T)$ when $(t-t_n)/T$ is not an integer. then you have to be able to overlap at least a couple of BLI and sum them to get the BLIT. – robert bristow-johnson Apr 23 '14 at 5:42
• @robertbristow-johnson I just have a few more questions...sorry. What does (t−tn)/T represent? the phase? And how would they be added? by tat i don't mean how to do val1 + val2 but rather what is the significance of the values of the windowed since that i am adding and how do they relate to each other? they wouldn't be the same value i would assume. – Alex Zywicki May 1 '14 at 21:57