Linear feedback shift register

hello everyone!
after my very satisfying and succesful experiments building custom analog shift registers inside the er-301 (very easy, no need of programming skills) which you can find here:

i was thinking about another very interesting concept: linear feedback shift register (even better: lfsr batteries)
if you are unfamiliar with this concept you can find infos here:


there are modules that already implement this technique in the eurorack realm. perhaps the most well known is the turing machine. one of the most recent is detroit underground du-rdt, the one i have is instead The Harvestman\IME Zorlon Cannon mk2.
as you can see the concept might be used for a wide range of applications, from pseudo random cv sequences to pseudo random gates to pitched noise and tonal sound generation.

i’m sure this is something that can be done at dsp level and perhaps even at middle layer. what i’d like to ask is if there is a way to build one with available units (i’ve seen wild things here made with repurposing units for functions very far from the original meaning).
if not i’d like to aks if there is someone interested in developing it in LUA or if @odevices might be interested in creating a unit.
given the extreme modularity of the 301 it would be very interesting if the unit was a very bare bone implementation with which one can build different applications by chaining and combining them alone and them with other units.

example: the zorlon cannon mk2 is a dual module. each side of the module contains a battery of 4 lfsr which can be configured independently (length of the register and taps) and can be tapped independently but the 4 outs can be summed together.
if run at slow frequencies it generates sequences of gates from the individual outs and a cv sequence from the mix out. if run at audio rate it generates independent different sounds from each out or a mixed down version of 4 sounds from the out.
thanks for your attention :smiley:

1 Like

I haven’t dived in, but if you’re using a custom unit with custom controls, there’s various on/off states that can be created with gates, toggles and triggers to create some simple logic… as they can all be routed into each other in various ways and run at audio rate. Could be a fun starting point?

1 Like

yes indeed! thanks Neil!
i was also wondering if Velvet Noise unit is actually a lfsr type of thing. it might be given that it outputs pulses…

1 Like

So, @anon83620728 and I actually started down this path a while back, of trying to build pretty much this as a bespoke/middle layer unit. It got pretty challenging right out of the gate to design something that you would realistically want to use, so we put it on the back burner for now.

The first challenge was trying to figure out what to use for storage, and then how to address it. Using a sample recorder seemed the best fit CPU wise, and I got the CV component working OK - see below. But of course it doesn’t respond so well to changes in the clock or the loop length. You need to let it build up a new loop if you do that, so not very performance oriented.

The other thought was to use S&Hs for storage and address them with bump scanners. Depending how many steps you want (we were shooting for 16), having that many bump scanners would probably be pretty CPU intensive. I mean, the ER-301 might be able to handle it, but how much 301 CPU do you want to consume on something like this when there are other modules out there that do it…

Haven’t revisited it in light of Neil’s idea for using the toggles - that’s a thought. But I kind of reached the conclusion that this might be best done in the c++ layer.

Here’s the straw man custom unit patch I came up with for the looper based approach, in case it helps your thought process.

mt1.lua (18.2 KB)

Basically, hook up an external offset to r amt and set the gain so it scales from 0.0 - 1.0. This is kind of like the knob on the turing machine. At 0, it just holds the current pattern. At full clockwise, the pattern is fully random.

There’s a built in clock but you can put an external in if you want. If you want to change the loop length (default is 8), go into rand, and then into the dub looper’s reset control, and change the div to the desired length. range controls the range of notes generated. This CU has a built in scale quantizer built in to make it easier to hear what’s happening.

Maybe this helps?

3 Likes

thanks! food for thought!