This article is a look at sub-oscillators, a common tactic for fattening up the bottom end, particularly in synths with only one oscillator, or only one oscillator per voice. Classic examples include the Roland Juno 106 and SH101, and the Korg Polysix. More recently, sub-oscs turn up on a lot of modern analog synths since they’re cheap to do and can add more punch and depth. The Arturia MiniBrute, Moog SubPhatty and most of the DSI synths include them.
My synth’s sub-osc only has square waves. Why is that?
A simple square wave one octave below the main oscillator pitch is the commonest sub-oscillator. On many synths, this is the only option, and there’s a simple switch or mixer knob to introduce this signal into the sound. The reason this is commonest is because it’s the cheapest and simplest to do. You just feed the oscillator output to a bistable flip-flop circuit and bingo! Instant sub-osc!
Of course, you don’t have to stop at one octave down. You can repeat the process and get two, three, or more octaves below the main oscillator.
The Roland SH101 has a nice neat implementation using a CMOS 4013 dual bistable chip to offer three sub-oscillator waveforms; square at -1 octave, square at -2 octaves, and 25% pulse at -2 octaves. The pulse is interesting because the 25% pulse wave has the strongest 2nd harmonic of all pulse widths, so there is still a marked -1 octave sound present.
Here’s the circuit from the SH101:
It’s a pretty simple pair of flip-flops, with the 25% pulse being achieved using a couple of diodes as a diode-OR circuit. If either flip-flop output is high, the OR’s output is high. This gives a signal which is high 75% of the time and low 25% of the time – a 25% pulse wave (ok, so it’s a 75% pulse wave really, but it’s the same thing).
Note that the original Vdd in the SH101 was +14V, but CD4013 isn’t fussy and it’ll work pretty much anywhere from +5V to +20V.
Can we get other sub-oscillator wave shapes like ramps, triangles, and sines?
Other sub-oscillator wave shapes like a sub-osc ramp or a sub-osc triangle are possible, but a little bit more involved. Let’s have a look at some ways to do it.
Sub-oscillator ramp waveform
One way to generate a sub-oscillator ramp wave is to take the main oscillator ramp waveform and the sub-oscillator square wave and add them together. If the balance of the components is trimmed just right, this produces a sub-osc ramp.
It’s interesting to think about how this works with respect to the harmonic series. The square wave has only the odd harmonics(f,3f,5f,7f,9f,etc), whereas the ramp waveform has all the harmonics (f,2f,3f,4f,5f, etc). A ramp with twice the frequency f therefore has harmonics 2f,4f,6f,8f,10f, etc. If we add that to the square wave, we get the complete series – the ramp wave at f. Clever, eh?!
Here’s an implementation of that idea using the SH101 circuit from above to produce the sub-octave square we need. Note that I’ve also added buffers and offsets to the outputs to make everything +/-5V output. This requires a clean -5V source (since we don’t want noise in our audio) but I’ve done it the quick’n’dirty way and used the -15V supply rail.
Sub-oscillator triangle waveform
Ok, so how would we make a sub-oscillator triangle wave?
One way is use the sub-octave square wave to switch back and forth between the main oscillator’s ramp wave, and an inverted copy of that ramp wave.
The top two lines shown the ramp and the inverted ramp, both in blue. The third line is the sub-octave square wave switching signal. The fourth line is what we get if we select the first ramp when the square is high, and the second (inverted) ramp when the square is low.
Since the Ramp’s reset time is not zero (it should be small, but it won’t be zero) you tend to get small glitches on the peaks of the Triangle, as shown on the bottom line. These can be filtered quite effectively, since they’re brief pulses and consist mostly of high frequencies.
Another way to achieve the same effect is to start with a bipolar sub-octave ramp wave like we’ve seen above, and use a precision full-wave rectifier to rectify it. The rectifier “folds the lower half of the waveform over” and leaves it at the top. It looks like this:
This produces the same results and has similar issues with glitches, especially at the peak of the triangle, but it only requires two op-amps, which is nice and simple.
Sub-oscillator sine waveform
The typical way to make sine waves in a synthesiser oscillator is by waveshaping a triangle wave. If the triangle is fed into a distortion circuit with a soft-clipping characteristic, the pointy peaks of the triangle are squashed and rounded, and the result is pretty close to a sine wave. Getting within a few percent error is relatively easy, and with careful trimming, it can be adjusted to within one percent error. That’s not pure enough for test equipment, but it’s good enough for rock’n’roll.
The necessary soft-clipping can be generated by an OTA or by a discrete differential pair transistor arrangement. Tim Stinchcombe has an excellent discussion of the various methods available over on his website. The differential pair is probably the commonest method since it is simple and cheap. Thomas Henry deserves the credit for popularising this design, although it predates his implementation by some many years.
We’ve seen how to produce sub-octave square waves, pulses, ramps, triangles, and sines. Of course, these circuits can be combined and mixed and matched however you like. You can combine a sub-octave ramp generator with a comparator to give you a sub-octave pulse with pulse width modulation, for example. You could do the same with a sub-octave triangle too. There are lots of options, and the limit is really only the amount of circuitry you’re willing to consider as “reasonable”. It wouldn’t be too hard to combine the Square+Pulse+Ramp circuit with the Triangle+Sine circuit to build a sub-oscillator with a full set of waveforms (Ramp, Square/pulse, triangle and sine) at -1 or -2 octaves. While it wouldn’t be hard, it would use a lot of parts, and this is mostly why you typically see simpler designs in commercial synth circuits.