Analog Filter Modeling


I believe we discussed zero-delay feedback stuff some time ago, but I couldn’t find that discussion. So if someone has found it, please post a link here!

Now that the guts of the 301 are open, we can see the models used for the filters. I have been interested in implementing some of the methods mentioned in Urs Heckman’s blog here:

I wasn’t sure if it was already in the core units, but after looking at the code, I don’t believe these techniques have been put to use as yet. I admit I haven’t looked at code in a while, and I have just done some peaking in master/mods/core/objects/filters, so please correct me if I’m wrong!

Anyway I noticed that there was some discussion of the TANH techniques in the development thread and wanted to begin a discussion if others are interested.




Ooo nice read, I’m gonna have to go through that for some ideas.

I’m actually currently implementing an IIR filter! Coincidentally I just fixed an insidious bug (1) that was holding me back for nearly a week, so I should have something relatively sooner now ha.

I fully intend to include a tanh in the feedback path somewhere. These posts are just the kind of thing I’ve been trying to find for inspiration!

(1) I was reading my output vector in reverse thanks to the neon store command, causing this strange high frequency noise in the output. It took literally forever to narrow that down.

PS, I’ve copied the optimized tanh function from the limiter DSP pretty easily, it’s a good reference.


I have been thinking that a delay unit with a built in feedback filter would be really nice. I like the ability to cut out the highs and lows in the feedback path.

There are no new/unusual/advanced DSP techniques used anywhere in the ER-301 firmware. All available time was spent getting the basics done (correctly). :sweat_smile:


Yes I seem to remember a discussion about it way back in the early days, and you deferring more advanced techniques on individual units until the firmware implemented most of the feature-set you had envisioned.

Now that we can hack your code, I figured it would be a good time to bring it back up again!

1 Like

Yeah I think I was involved in that conversation- some great resources I’ll try and link later when I’m at home are the digital filters used in by urs heckman, native instruments and the ones in the endorphins grand terminal - all ZDF filters

Actually now I think about it more andrew Simpton who designed the glue compressor did an exhaustive paper on digital filters for the drop plugin - pretty sure it’s available for the public to read and share, it’s bloody amazing

1 Like

Yes. I remember downloading and reading the paper, but now I can’t find it.


Nice! I have a bunch of DSP set up already to handle exactly this kind of thing, I think I’ll try my hand at a Neon version later today since the code looks pretty straight forward.

1 Like

Yeah I’d be very interested in that :slight_smile:
Fantastic and generous paper that one is

Also Nigel Redmon has a brilliant site that we should be able to implement on the 301 easily for bandlimted osc’s of any kind - I’ll find it and add it to this post

1 Like

Implemented it easy enough, sounds basically the same as the biquad filter I already have but I suppose the “state variableness” of it and the simplicity makes it a slightly better choice.

White Noise through Biquad @ 1000hz Q = 1/sqrt(2):

White Noise through SVF @ 1000hz Q = 1/sqrt(2):

Here’s a little jam pinging a couple SVFs:

Sounds pretty good on the aliasing saw as well, I think the tanh on the output helps a lot too:

Actually IIRC the mutable instruments repo has something similar to the SVF here, stmlib/filter.h at d9b189670be3d5c1e41ee143b6ee92171cfd6de3 · pichenettes/stmlib · GitHub

Come to think of it I gotta steal that optimized tan function as well :slight_smile:


@tomf would be super cool if those would be put on the repo for those of us less experienced with the developing side of things… Cheers!

You mean in my repo? It’s right here in my branch if you want to follow along. It’s nowhere near ready for release though, still needs a lot of work to be an actual real-life unit.

Edit: Optimized :sunglasses:


Now with a mix control: 0 is lowpass .5 is bandpass and 1 is highpass. Sorry to tease it’s just quite exciting!

Bandpass helpfully removes the dc offset from pinging with an oscillator. Had some fun making beeps again. I kind of stumbled upon this use of Turing to make sparkling sounds and just had to share!

I might just have to release this as is… I want to include a bunch of companion units here as well though like a LPG, AD, etc. maybe a one shot sample player.


Released here Strike v1.0.0 - Filters/LPG/Envelopes/Etc