From the original SynthMaker forum (2004–2014), with its members’ names and dates.
sambean ·
Hey Peeps
I've been working on a Blep square oscillator recently, and I thought I'd share the current progress.
It only has one Blep table running at the moment so it can't quite reach the top registers, but it sounds pretty good for the bass.. It's also not too efficient at the moment so you coudn't really rack too many up..
Next on the list is to try to get this working with some hard sync, shouldn't be too hard, I just need to trigger the blep with the HS trigger, feed it the sample cross point and the step size... Then I'll try to get multiple tables running to get the higher frequencies..
edit: Forgot to mention, there's some problems with float arrays atm so the Blep wont sound right after copy and pasting. To fix, go to the Blep generation module (BlepOsc->BlepGen) and re-type 1024 into the properties, this should redraw the tables..
edit2: it's blep not belp.. 😉
lalo ·
cool 🙂
thanx sam
oddson ·
What the bleep is blep? 😕
band-limited _________ ???
How big is the propeller on your beanie? 😉
Shifrin ·
oddson wrote: What the bleep is blep? 😕
band-limited _________ ???
Step
oddson wrote: How big is the propeller on your beanie? 😉
I reckon it's pretty large!
Nice one Sam, going to be fun picking this apart - I don't know a load about Bleps although I've tried to read through some of the papers on them! Blits I'm OK with - Bleps on the other hand... 🙂
Cheers!
Shif.
Josh ·
Wow sam cool stuff.
I don't know what blep is either but im guessing its bandlimiting of sorts to get rid of aliasing. This could perhaps be the beginning of a general anti alias module that we can slap on our homemade osc's to banish aliasing forever ha.
Had a look at this, interesting stuff - the graphic display is actually helpful for me. Parts of it I understand, like the Sinc generation and Blackman windowing - so I'm not totally lost 😉
Am I right in thinking this isn't a 'minimum phase' BLEP?!
Gonna go back and fiddle some more, cheers for this Sam 🙂
Shif.
Shifrin ·
More dumb questions!
Is the delay of the naive signal used to line up the naive signal with the BLEP such that the discontinuity in the naive signal occurs with a certain point in the BLEP? Would this delay then change if the BLEP table size changed?
It really is very cool how simply adding in this BLEP (at the right place!) to the naive Square-wave radically reduces the amount of audible aliasing.
Going to spend some more time pulling this apart tomorrow 😉
Shif.
sambean ·
Yup, it's a step alright..
You are correct that isn't a minimum phase version, but just a standard linear phase. This gives you a nice integer delay so it's easier to align the blep step with wave step, it's been discussed quite extensively over at kvr and on the music-dsp mailing lists.. The minimum phase version would still require a delay as it's minimum phase and not zero pahse, the thing is this delay would be fractional and more difficult to implement..
The delay length should be equal to wavetable size/(oversampling factor * 2) I think...
A quick bit on the theory, the aliasing on 'trivial' squares results from the transition from +ve to -ve occuring on fractional values.. as time is quantized this get's rounded and causes aliasing. With a bandlimited square you'll see a small ripple before and after the transition, this 'compensates' for the fractional step. With the Blep, we are in effect crossfading the fractional step with a pregenerated bandlimited step..
They're actually a lot easier to implement compared to blips once you have the configuration setup..
I think it may also be possible to forgo the interpolation if we use a larger wavetable, this could allow us to use 4 blep tables with relatively low cpu and be able to get to the higher frequencies. (For those who are interested the quantization noise is proportional to the differential of the Blep step, which in turn is equal to the original sinc, each time we double the oversampling factor, we half the amplitude of the sinc, and hence reduce the quantiztion noise by 6dB)...
Beanie Propellor?... Are you implying I'm a geek!!!
Sam
oddson ·
sambean wrote: Beanie Propellor?... Are you implying I'm a geek!!!
Sam... re-read your messages in this thread and try to tell me you're not. 😉
You are a DSP Geek of the highest order and most of us here only wish we could be too... 😈
stefan ·
Awesome work.
Even the property panel is awesome. 🙂
Shifrin ·
Thanks for the information Sam, makes things a little clearer!
Shif.
Tom7777 ·
I havent ever heard of blep either 😀 Nice work 😀
stefan ·
http://www.cs.cmu.edu/~eli/papers/icmc01-hardsync.pdf is a decent read, even if it has locked itself into the "windowed sinc" method, when it really is optimal FIR filter design you're after.
rl ·
This is my humble request to raise the status of master sambean from "dsp wiz" to "uber dsp wiz"
sequencer ·
I'll second the status request...
Excellant work indeed.
stefan ·
sequencer wrote: I'll second the status request...
Excellant work indeed.
I went for something a bit more subtle and futureproof, since I guess Sambean might pull similar stunts over and over again considering his current history 🙂
sequencer ·
Ah. Very subtle, but if he keeps going like he is, you'll run out of room after a few more status upgrades 😀
sambean ·
Aw shucks... 😊
stefan ·
I'm just curious, will you consider using some more regular FIR design instead of windowing a sinc later on? Easier to optimize it for speed, noise etc then.
sambean ·
stefan wrote: I'm just curious, will you consider using some more regular FIR design instead of windowing a sinc later on? Easier to optimize it for speed, noise etc then.
Probably could do, I've never tried other methods though, I think there's a Least Squares method, but I'm not sure of the maths. I'll look it up though..
Sam
@oddson, You've finally given me the inspiration for my avatar 😉 hehehe
stefan ·
sambean wrote:
stefan wrote: I'm just curious, will you consider using some more regular FIR design instead of windowing a sinc later on? Easier to optimize it for speed, noise etc then.
Probably could do, I've never tried other methods though, I think there's a Least Squares method, but I'm not sure of the maths. I'll look it up though..
Sam
@oddson, You've finally given me the inspiration for my avatar 😉 hehehe
Beta / Anttii has raved about not using the windowed sinc approach since it basically "teaches" you this whole blit/blep business in the wrong way and isn't optimal perfomance wise. There's quite a lot of decent info from him over at kvr in threads about minBLEPs.
Love the avatar btw 🙂
Tom7777 ·
Like the new avatar Sambean 😀
rlahalla ·
Wait...did you actually make your cat sit still with a beanie on his head, or does your cat wear one too??? 😀 I'm sorry, I couldn't help it..awesome work though (and yes, I long to be that DSP-geeky!)
GaryG ·
rlahalla wrote: Wait...did you actually make your cat sit still with a beanie on his head, or does your cat wear one too???
maybe that IS sambean, a highly intelligent supercat destined to conquer the world with his fiendinsh DSP...
or maybe I'm taking b*ll*cks again... 😀
.g
oddson ·
sambean wrote: ...@oddson, You've finally given me the inspiration for my avatar 😉 hehehe
I was going to goad you into choosing an avatar.
Funny that I did so without meaning to.
Nice choice! 🙂
sambean ·
Hehe...
Little update.. Have implemented 4 blep tables now, so you can get higher in frequency, and configured all the properties setting so you can change the table size and and the rest of the osc will be configured...
I've also removed the interpolation as I saw not noticable difference in quality without it..
I've also added a bandlimiting option, this and the other settings should be kept a power of two ie 2,4,8,16,..... This allows you to cut the frequency resolution of the osc...
I'm not sure what the best settings should be, but you can experiment yourselves to see..
Shouldn't be too difficult now to implement in hard sync, I'll get that sorted next...
stefan wrote:
sambean wrote:
stefan wrote: I'm just curious, will you consider using some more regular FIR design instead of windowing a sinc later on? Easier to optimize it for speed, noise etc then.
Probably could do, I've never tried other methods though, I think there's a Least Squares method, but I'm not sure of the maths. I'll look it up though..
Sam
@oddson, You've finally given me the inspiration for my avatar 😉 hehehe
Beta / Anttii has raved about not using the windowed sinc approach since it basically "teaches" you this whole blit/blep business in the wrong way and isn't optimal perfomance wise. There's quite a lot of decent info from him over at kvr in threads about minBLEPs.
Love the avatar btw 🙂
Think I'll stick to the windowed sinc for just now...
http://cnx.org/content/m10577/latest/
😮
lalo ·
super wiz ^ 10000 🙂
great sam...where did you learn all the math basics...did you do some engineering degree? 🙂
and the dsp ones ?
sambean ·
I studied physics at university, but a lot of the maths involved in that doesn't really apply. The most important parts I'd say would be a bit of calculus- integration/differntiation, complex numbers, and Transforms- Fourier/Laplace..
If you're interested I reccomend just carrying on from when you last studied. Don't jump in with stuff you don't know the background to as it can just be disheartening.. Get a couple of mathematics books aimed at early university level and just work through the relevant chapers, I book I've had for more than 10 years and still refer to is 'The Fundamentals of University Mathematics'
For the dsp I studied a Music Tech MSc, this just gave me the foundations of dsp, and the rest is just through reading and experimenting (mainly with SM!) A good couple of books are 'A DSP Primer' and Discrete time Signal proccesing by oppenheimer and schafer. The second may be a bit heavy going, but is considered a 'Must Have'..
The important thing is to just take your time and make sure you understand the principals of something before moving onto the next, It may take a long time, but in the end it's worth it.. Oh, and make sure you do the questions at the end of the chapters, it's easy just to read and say to yourself 'I get it now..' But you need to do your homework 😉 ...
See also:
http://www.amazon.co.uk/Discrete-time-Signal-Processing-Prentice-Hall/dp/013216292X/sr=1-1/qid=1159172385/ref=sr_1_1/202-1710964-4607813?ie=UTF8&s=books
infuzion ·
I hope someone's putting the links in the Wiki (I would, but I have to run 🙂 )
monx ·
Hey, this is great stuff. I'm working on a Nintendo synth in SM, right now using SM's bandlimited saw/square and doing oversampling for the noise channel (far from ideal). I have been reading up on BLIT/BLEP and would ideally implement the entire synth that way. if anyone wants a tutorial in this stuff, check this out: http://www.fly.net/~ant/bl-synth/
infuzion ·
Cool, thanks monx!
Wrote something here? To have a post removed or your name hidden, write to [email protected].