The Orvillain DSP Thread

1762449157649.png


This is my in-development BBD delay plugin, with 500ms of delay time, and feedback set to 0.8, with a mix of 1.0 - so 100% wet.

By default it also has 4 BBD chips, each one with 4096 stages. But it will have selectable chip and stage counts.

Anyway, you can see the noise floor, and you can see the linear sine sweep, capping off at about 12kHz, and then each subsequent echo gets progressively darker over time.

This one is the same, but I've set the clipping modes to Opamp - the second exponential graph makes them a bit easier to track:
1762449612315.png

1762449578601.png


And I'm dealing with aliasing quite well too.
 
Last edited:
I'm feeling left out of the Helix Stadium launch excitement so I thought I'd make a post. :rofl


So here's a sweep of my BBD delay plugin, after a big rewrite and port over to JUCE C++ native, outside of the HISE framework where I began it. I've been working on the oversampling for the input, feedback, and output clipping stages. Here's with the default gains:
1763495368681.png


And here's with it cranked:

1763495294275.png



I disabled all of the filtering to be able to see what my oversampling performance is. Relative to CPU usage, this is actually really good. You can see a little bit sneaking in towards the end there, but honestly, most of that is quieter than -120dB. So I'm good with it where it is right now.


Here is a screenshot of the delay at all of its default settings:
1763495485537.png


Now those downward curves coming from the top towards the right edge. That is not aliasing. It is actually harmonic products coming from the ZOH Imager feature; which is something that real BBD's do.

Imagine that a BBD is like a camera, taking lots of photos in very quick succession, but not quick enough to capture every single movement of a person. You'd see gaps in the movement, and they'd jaggedly walk across the photos if you flipped through the quickly; like stop-motion animation almost. That's sampling in a nutshell.

But ZOH? ZOH is a phenomenon that BBD's do, where they will hold a "photo" for longer than intended. This creates staircase harmonic artifacts, and you definitely hear them. It comes from each bucket capacitor holding the charge value for the entire clock period, before transferring to the next stage. It is a part of the charm of analog delays, and I've modelled it!

The lines are wobbly because the modulation is turned on - wow, flutter, and jitter.

Ther vertical lines in the background are Doppler shift artifacts, coming from the combination of the input-sweep signal and the modulation mode. I need to double check that to be sure, but I think it is normal.

This thing is going to be killer!
 
I'm feeling left out of the Helix Stadium launch excitement so I thought I'd make a post. :rofl
Bad timing :LOL:

So here's a sweep of my BBD delay plugin, after a big rewrite and port over to JUCE C++ native, outside of the HISE framework where I began it.
Dude, that's great - JUCE is the shit - I've used it since probably the second edition? It's come a looooong way.

I've been working on the oversampling for the input, feedback, and output clipping stages. Here's with the default gains:
Where do you design the filters? Matlab? Octave? something else?
What are you using for the oversampling filters? Farrow?

Looking nice

Now those downward curves coming from the top towards the right edge. That is not aliasing. It is actually harmonic products coming from the ZOH Imager feature; which is something that real BBD's do.

Imagine that a BBD is like a camera, taking lots of photos in very quick succession, but not quick enough to capture every single movement of a person. You'd see gaps in the movement, and they'd jaggedly walk across the photos if you flipped through the quickly; like stop-motion animation almost. That's sampling in a nutshell.

But ZOH? ZOH is a phenomenon that BBD's do, where they will hold a "photo" for longer than intended. This creates staircase harmonic artifacts, and you definitely hear them. It comes from each bucket capacitor holding the charge value for the entire clock period, before transferring to the next stage. It is a part of the charm of analog delays, and I've modelled it!
That's pretty neat! What do you use to model the BBD non-linearity? Polynomials?

The lines are wobbly because the modulation is turned on - wow, flutter, and jitter.

Ther vertical lines in the background are Doppler shift artifacts, coming from the combination of the input-sweep signal and the modulation mode. I need to double check that to be sure, but I think it is normal.

This thing is going to be killer!
(y)
 
Bad timing :LOL:


Dude, that's great - JUCE is the shit - I've used it since probably the second edition? It's come a looooong way.


Where do you design the filters? Matlab? Octave? something else?
What are you using for the oversampling filters? Farrow?


Looking nice


That's pretty neat! What do you use to model the BBD non-linearity? Polynomials?


(y)
My filters are all done directly in c++ using standard cook-book/bi-linear transform formulas. Their cutoffs track the sample-rate and the BBD clock where needed. Coefficients are computed on the fly rather than being exported from an external tool.

The Oversampler uses a Polyphase-style up/down zero-stuffing approach, with a single lowpass filter designed using a windowed sinc approach. Cutoff is clamped to be between 0.45 x host sample rate and the number of taps scaled with the oversampling factor; this is also clamped between 31 and 2048. This uses a Blackman-Harris type window and is DC normalised. This ensures we clean up any potential aliasing artifacts when oversampling a signal. My clippers are all oversampled to a factor of 4. With some optimization (maybe some SIMD or AVX stuff later on??) I might increase that to 8.

The BBD non-linearities don't use a signal polynomial approach. Instead I treat it as a pipeline of several filtering and sample-hold style stages. The initial delay line uses windowed sinc as well, with a two-row blended approach.

I model things like bucket slew limiting, amplitude dependent droop, stage leakage, clock-rate dependent bandwidth, clock-rate dependent high frequency loss, voltage state management which helps to scale various signal levels throughtout the pipeline. I also model a compander, pre and de-emphasis, noise floor generator which is reactive to the input signal much in the way a real BBD analog delay pedal is.

Only the clipping stages are themeselves explicitly polymomial-style waveshapers. They are stateless so have no memory, which is another thing I'd like to explore going forward.
 
I’ve been mucking about with the BBD plugin the last couple nights, mostly playing dry and then tweaking it while listening in playback. It just dawned on me now at work that I can use ToneX to play through and I can hear the delay in real time.

Sometimes I’m amazed at my own dumbassness.

The only thing I’m missing from it is the stereo/panning options!!

I had an idea the other night that I thought could be cool; for assigning the panning of the repeats, if there were a dropdown menu of drum paradiddles to choose from, there could be some pretty cool sounds coming from that. I always want more control over the panning of the repeats. Like if you could manually assign the first 4-6 repeats, I’d be pretty stoked, but I’d be really curious to hear the paradiddle idea with the mix and feedback cranked up a bit, I think some really cool rhythmic shit can happen as a result.

There’s been several times I’ve been mixing a song I just recorded and I often intentionally play a part to make the repeat part of the part itself, but sometimes there’s a china or something going on in the same speaker and it gets washed out, so having more control of where it’ll repeat would be a big bonus for me.
 
in order to measure the frequency response of a system, there are a range of ways you can do so:

1 - Run a single sample click (called a dirac impulse) through the system
2 - Run a sine-sweep through the system - you get to decide the start and end frequencies, but 20hz-20kHz is typical.
3 - Run a series of impulses (called an impulse train) through the system.
4 - Run a solid sine-tone through the system.

So far the only thing my tiny brain has latched on to is that it's kind of appropriate for Orvillain to be running a train on his delays.
 
Back
Top