Re: [AH] Nonlinear or pseudorandom modulators

From Brian Willoughby
Sent Wed, Feb 7th 2018, 07:57

Hi Mike. You can get rid of the delays if you run every other S&H off a =
different, non-overlapping clock. If you do this, you=E2=80=99ll have a =
short BBD (Bucket Brigade Delay). Those are made with hundreds or =
thousands of S&H stages, and the shape of the clocks are very critical. =
Basically, the analog voltages march through the BBD in sync with the =
gait of the Left, Right, Left, Right of a virtual drill instructor.

Probably the simplest way to create the needed controls would be a 25% =
duty cycle clock for the even S&H stages, and another 25% duty cycle =
that is delayed by 50% of the period for the odd S&H stages. Creating a =
25% duty cycle clock is as easy as sending a clock to a counter, and =
using the AND function to combine the lowest two output bits. The other =
25% duty cycle clock can be created by using a NOT function on the =
higher bit and then AND to combine this with the lowest bit. =
Unfortunately, the Nord doesn=E2=80=99t have a counter, per se, but at =
least the McGill page mentions how to create one. Thankfully, you=E2=80=99=
d only need a 2-bit counter to generate the 25% duty cycle clocks.

By the way, the Nord S&H seems to be edge-triggered, based on the =
graphics, but I haven=E2=80=99t read the manual so I can=E2=80=99t be =
sure. Typical S&H circuits in the analog world are level controlled =
rather than edge-trigger - they literally have a Sample mode and a Hold =
mode. Some circuits refer to this as Track and Hold, since the Track =
mode literally allows the output to follow changes in the input =
continuously, while only the Hold mode keeps the output constant. In the =
latter case, I suppose an analog S&H is edge-triggered because the =
output is set to the value of the input at the moment that the Hold =
signal activates - and that=E2=80=99s like an edge-trigger.

The advantage of this BBD-like technique is that you can speed up the =
clock that feeds the counter, and the whole thing won=E2=80=99t break =
when there is less than 1 millisecond between clocks. You might not need =
your random pattern loop to exceed 1 kHz, but the option might be =
interesting.


As for resetting the loop, I think the problem is that your patch has =
only one output for the S&H chain. Looking at the McGill page you cited, =
I think that an 8-input Multiplexer would work, fed by a counter that =
selects the input. When you want to reset the loop, reset the counter to =
0 and it will select input 0. Since the Nord apparently doesn=E2=80=99t =
have an 8-input Mux, you=E2=80=99d need three stages of 2-input X-Fade =
units, for a total of 7 X-Fade units. The counter would also need to be =
constructed as suggested in the McGill page. In other words, all stages =
of your S&H chain would have their output connected to the corresponding =
input on the 8-way Mux, and that way you would have more control over =
the order. Of course, this would mean that your S&H chain would have to =
stop clocking if you want to hold the same pattern, and it would have to =
clock at least 8 times to completely replace a pattern. What I=E2=80=99m =
describing would be quite a bit different than the setup you have now.

p.s. I think that Andy=E2=80=99s suggestion about using 2 registers =
would only really work with real LFSR units, but that=E2=80=99s not what =
you=E2=80=99ve built at all. Probably the only reason you don=E2=80=99t =
understand his suggestion is that it doesn=E2=80=99t make sense in your =
context.


All of this has me wondering whether a virtual digital modular with all =
of the basic functions from that McGill page would be vastly more useful =
than the Nord Modular. Then again, maybe the Nord Modular 2 added all of =
this?

Brian


On Feb 6, 2018, at 9:59 PM, Mike Perkowitz <xxxx@xxxxxxxxx.xxx> wrote:
> Thanks for the ideas everyone! I read these suggestions and some stuff =
about shift registers (and shift registers in the Nord: =
https://www.cim.mcgill.ca/~clark/nordmodularbook/nm_logic.html) and =
built a cascade of 8 S&H modules, fed by a noise source. The input to =
the first register is actually fed by a crossfade between the noise =
source and the last register. With the crossfade set to noise, it just =
cascades through the registers with random values. But when I flip the =
input to last register, the same 8 values just keep cycling through. By =
tapping one register as a mod source, I get a looped modulator. The nice =
thing here is that if I flip the crossfade quickly, I can replace part =
of the loop. And with the crossfade in the middle, I can gradually =
randomize the sequence.
>=20
> Here's the patch on the Nord: =
http://music.perkowitz.net/new/shift-registers.png
> And you can hear it here: =
https://soundcloud.com/perkowitz/shift-register
>=20
> One disadvantage here is that there isn't a way to reset the loop (I =
don't really understand Andy's suggestion about using 2 registers). One =
way around that would be to just use the clock to cycle through the =
registers and keep them aligned that way. Another drawback here is that =
it's complicated enough that you couldn't use that many in one patch -- =
the basic pieces take up about 12% of DSP in the Nord. One thing I =
picked up from nordmodularbook is that, as I figured, trying to build it =
off "simultaneous" triggers in a virtual modular doesn't really work. =
His suggestion was to put a short delay between the register triggers, =
so you'll see those cascade in reverse from the bottom register up =
(since you want each register to sample the previous one before the =
previous one does its own sampling). Once I added that, it worked pretty =
smoothly. What I don't understand is why it needs 9 S&Hs to implement 8 =
registers, but okay.=20
>=20
> You can see why I prefer doing this in a virtual modular. I have no =
plans to buy 9 hardware S&Hs :)
>=20