If one regards an audio signal with two channels as complex (no matter if it actually concerns a complexly generated material or a stereo recording or mix) – then one basically considers it as a mix of positive (levorotary) and negative (dextrorotary) angular frequencies. In the spectrum, the positive frequencies appear in the left half; the negative ones, reflected at the cutoff frequency, in the right half.

That is the total spectrum of the stereo recording of a brass band marching by, which I made in the 1970s from my window with two microphones. (It will come up again and again).

Naturally, the spectrum is also complex (gray – the real part, red – the imaginary part). On the left, one sees the amount of positive, right-reflected frequencies in addition to the amount of negative ones (in a linear representation!). Even in this crude graphic (approx. 1/2 million samples on a 512-pixel width), one recognizes at first sight that the two halves are not exactly symmetrical.

This becomes apparent if one views a 10-millisecond cut of the original recording (time domain) in an xy representation:

Horizontal: left channel (real part), vertical: right channel (imaginary part).

If the signal in both channels were identical, the motion would only swing in the diagonal position. However, one sees a somewhat smaller motion component, also in the direction of the other diagonal (top left/ bottom right). Broadcast engineers would say: an acceptable, 'mono-compatible' stereo recording.

(One has to imagine this graphic in motion! The corresponding VASP script for this can be found below).

Taking only the positive frequencies from this cut, the xy representation looks like this:

One nicely sees the motion beginning at the zero point, developing into 'pirouettes' around the left (counterclockwise). The pirouettes are the result of the overlapping of numerous levorotary circular movements of different frequency and amplitude.

In addition, the counterpart of the dextrorotary frequencies:

Both together amount to the xy motion of the original stereo signal as it is illustrated in the first xy representation.

[An interposed question: How do they sound respectively? – Unspectacular. As with any complexly processed sound material, one already has a diffused stereo impression which, however, does not convey a spatial image].

* * *

How does one attain such a split?

In a time-free context this is simple: One respectively sets one buffer half of the spectrum to zero and transforms the whole thing back again. This is how it appears as a VASP script:

sfload stereorecording.wav "load stereo recording
FFT "holistic Fourier transformation
clear.u "clear upper (in the graphic = right) buffer half
FFT- "Inverse transformation

But in a stream, in real time?
In Winter 2003/04 I invented a method which makes the split through a combination of all-pass filters also possible in the stream, without having to bother with a spectral level. In VASP it is implemented as an 'alias filter' from there on. The complex routines in AMP have also been equipped with it since then as a standard feature.

It was first used in 2005 during the processing of a Viennese song, together with Gilbert Handler in the scope of our 'Relativity Therapy' program. Here is a cut:


Everyone in Austria knows the Viennese song 'Stellts meine Ross in Stall' and countless tourists hear it every year in wine taverns. The cut is a part of the original zither accompaniment, whose frequencies, however, have been shifted approximately 7000 Hz downwards, and the image frequencies have been removed with alf.

The fact that something like a melody can still be heard at all and not simply the sounds of the resonations says much about the quality of this folk instrument. Because everything that is to be heard in this example was originally above 7000 Hz! (The background noise can be explained by the fact that the level naturally had to be extremely raised).

Here is the respective cut of the original (played by Helmut Burtscher):


With speech, for instance, there would not be much speech melody left already as of a 3000 Hz downshift.


* * *

If one generates frequencies that lie above the cutoff frequency of the digital rasterization (half the sample rate), then these will, as generally known, be reflected downwards again – the (in)famous 'aliasing'. However, if the generation or processing is complex, one recognizes it in the altered rotational direction and can eliminate it with the described method, also afterwards.

Besides the known and feared reflections at the cutoff frequency, there are reflections at the frequency zero point as well. They are less well-known, because they can only appear in a modulation process, but are substantially more obtrusive! Here is the same speech example without a downstreamed alias filter:


The original (fragment of a Hungarian poem):


* * *

Amazingly there are such reflections at the zero point also in analog electronics, where the circuits – as a rule only internally – work in a complex fashion, for example, with the aforementioned frequency shift. An analog shifter has namely existed for a long time already (Harald Bode / Robert Moog 1971). With an expanded circuit, such an alias filter would basically also be possible analogously. The expenditure for circuit technology, however, would have been far beyond the financial scope of an affordable effect device according to the state of technology at that time – which was already a problem with simple frequency shifters.

The next Spilling the Beans newsletter is dedicated to the application possibilities of such an expanded frequency shift.


(c) Günther Rabl 2011


Wolfgang Musil reconstructed the shifter with an alias filter as a MAX patch and we make it generally available in the scope of the workshop.

Christian Teuscher integrated several of my complex routines into a VST plugin a few years ago. This is also available.


Here is the VASP script for the test set-up described above:

sfload stereorecording.wav
cut 1sec,1.01sec "cut of 10 ms – could also be different
bevz 10s "bevel cut of 10 samples
alf "filters out the positive frequencies
stretch 1000 "1000-fold stretching for the view
view. "hotkey 'b' for the xy view
"the same for the negative frequencies:
sfload stereorecording.wav
cut 1sec,1.01sec
bevz 10s
alf- "filters out the negative frequencies
stretch 1000

Interesting, perhaps, is still another mode, alf.split, in which the left channel receives the real part of the positive frequencies and the right channel the negative ones. In this way, one can vary the panorama allocation of frequencies practically endlessly in series:

sfload stereorecording.wav