<<home  <<previous  next>>

Quadrature Mixing





Maybe you are familiar with the effect of multiplying two sinusoids on analog synths. The original frequencies disappear, and you get two new frequencies in return: the sum and difference frequencies. Such multiplication can also be done with two input audio signals, and is then known by the name of ring modulation.

Quadrature mixing is a fascinating extension of this process. Basically, it works like this: of each input signal, a -pi/2 radian phase shifted version must be created. Together with the original signal, the shifted version makes a complex signal, also called analytic signal. When complex signals are multiplied, only the sum frequencies remain. It is single-sideband modulation. Because complex signals have no alias, there is no negative frequency product.

Complex signals can be considered streams of complex numbers, and regular complex multiplication apply to them. Illustrations of complex multiplication are on the page 'complex plane, intro' for example.





Let me start with synthesizing a complex signal. This is simply a cosine phase and a sine phase of identical frequency. Here it is done as a Pure Data patch, but it can also be done with Max/MSP or probably any modular (soft)synth.

Notice that sin[x] = cos[x-pi/2], so the second phase is shifted by -pi/2 respective to the first phase. When expressed in units of time, the second phase is a quarter of a cycle ahead in the positive direction of the x-axis. That is a delay, actually.

The first phase is called real phase and the second phase is the imaginary phase. In engineering terms, they are called in phase and quadrature phase respectively.

cosandsin






Here I packed the complex modulator in a subroutine 'complexsinusoid' and duplicated it. There is a complex signal (a+ib) and another one (c+id). These signals are complex multiplied. The product is a complex output signal with real phase and imaginary phase again.

Notice the frequencies of the complex sinusoids: 180 Hz and 50 Hz. When done with real-only signals, multiplication would result in a sum frequency of 230 Hz plus a difference frequency of 130 Hz. You would see an amplitude-modulated signal. In the complex case, there is only the sum frequency of 230 Hz.

complexproduct2





Imagine you have complex-modulated a signal into another frequency range, and you want to restore that signal later. Then it must be demodulated. This goes with complex division instead of multiplication. When the modulator was (cos[x]+i*sin[x]), there is no scaling factor involved, and the complex division boils down to an inverse rotation. Which in turn is a simple sign-flip of the imaginary part in the modulator.

(a+ib)/(cos[x]+i*sin[x]) = (a+ib)*(cos[x]-i*sin[x])

With complex multiplication it is not really defined which input signal is the modulator and which is the modulated, because they modulate each other. With demodulation it is different. The input signal is divided by the demodulator. Therefore, the sign-flip must be in the demodulator and not in the input signal. If (c-id) is the demodulator (cos[x]-i*sin[x]), the demodulation goes:

(a+ib)*(c-id) = (ac+bd) + i(bc-ad)

A difference frequency is the result, still with the correct phase shift to make a complex signal. In the patch here, the output has frequency 180-50 = 130 Hz.

differencefreqs





For comparison, here is a multiplication of two real signals with 180 and 50 Hz frequency. Sum and difference frequencies both appear in the output: 130 and 230 Hz. From the waveshape you can see that there is amplitude modulation.

ringmod




Quadrature mixing with synthesised signals is not the real challenge, because the output frequencies could be created with easier methods. With a real world signal as an input, quadrature mixing can do something which can not be done otherwise: shift all frequencies to another range, creating a single sideband. In order to do quadrature mixing on a real world signal, that signal must first be made complex.




A set of two all-pass filter cascades can convert a real signal into a complex signal over a large range of frequencies. In Pd, you can find this process in an abstraction called hilbert~. For the purpose of demonstration, I have copied the content of hilbert~ into my main patch.

The output phases of the filter set are both phase-shifted with respect to the original signal. But it is done in such a way that the phase distance from the first to the second output is always -pi/2. Only for the lowest frequencies and for the highest octave this does not work.

In the patch, a sinusoid test input is used to visually check if the phase distance and direction is correct. But it can be replaced with any signal, even if that signal contains many different frequencies simultaneously.

There are more ways to produce a complex signal. For details and illustrations, see the page 'Hilbert Transform'.

hilbertdemo






To illustrate the never ending confusion around phase shifts and their direction, I did a similar patch with Max/MSP's hilbert~ object. As you can see, the second output phase is not time shifted forward, but backward relative to the first output. That means a positive phase shift. A cosine from the first output goes with a negative sine from the second output.

This is not an analytic signal! It has a negative rotation. It is easy to do something about that. A sign-flip of the second phase makes positive frequencies. It may be the case that the filters inside the object are accidentally swapped. The object source code is not open, so there is no way to check the filters. But if we would swap the outputs, the phase relation would be correct. That is another workaround.

Since both output signals were phase shifted in a non-phaselinear way to get the pi/2 phase interval, the phaselinearity of the signal is lost anyway, and probably it does not matter so much which workaround you choose.

wronghilbert



Initially, I had made a similar mistake in the modulator, when doing this page with Max/MSP examples. My mistake neatly compensated the inverse rotation of Max/MSP's hilbert~ object, and there were sum- and difference frequencies where I expected them. After discovering what went wrong, I had to redo all illustrations, and took that opportunity to use Pd instead. My advice is: check the rotational direction of a phase shifter before you do a lengthy webpage (or distribute a software package).




Here is a Pd patch that shifts the frequencies of an input signal. The oscilloscopes show the input signal and the real phase of the modulated complex output.

I have chosen a simple input signal: an empty beer bottle blown. These are always around here. It's fundamental frequency is around 210 Hz, and I set the modulator at 210 Hz as well. The output shows the sum frequency, which will be some 420 Hz.

If the modulated signal is a final product, a musical signal which we are going to hear as is, and which does not need demodulation later, the imaginary phase of the product can be discarded.

hibottle






Here are some audio fragments for Quicktime, demonstrating the effect of single sideband modulation:



This is the original beer bottle sound:


This is the beer bottle through the modulator:



Into the modulator I have also played a kaval (Turkish flute) soundbite. The modulator frequency was at 440 Hz.






The next experiment is with difference frequencies. I set the modulator frequency to 105 Hz. That results in an output with 210-105=105 Hz. It is in the picture below.




Since I am not going to use the imaginary product, I erased the connections for it's computation, and replaced it by the computation of (a*c+b*d), the real phase for the difference frequencies.

Another empty beer bottle was blown, while the modulator / demodulator frequency was set at 105 Hz, half the input fundamental of 210 Hz. The output is single-sided again, and shifted to a lower frequency.

diffreqs




Here the sound of the low beer bottle:



Here is the sound of difference frequencies from the kaval. The modulator is at 500 Hz.





Quadrature mixing or single side band modulation has been a popular technique in radio transmission, reducing the required bandwidth and energy. As we have seen, it shifts frequencies by a fixed amount, that of the modulator frequency. This means that harmonic relations are not preserved. That is a pity: we can not use the technique for pitch shifting. For pitch shifting, each frequency should be shifted by a ratio. For example, to double the pitch would mean a 50 Hz frequency shift for a 50 Hz input component, and a 180 Hz shift for a 180 Hz component. This can only be done when all frequencies are sufficiently isolated, like in Fourier analysis.

While frequency shifting is not appropriate for conventional harmonic music, it is an appreciated technique in electronic music and soundscapes. The process is very simple, and can hardly be spoiled by a poor implementation. Although it works with an analytic signal, the content is actually not analysed. Nothing can go wrong there, whatever weird sound is sent in. The modulator frequency can be controlled dynamically to bend notes. Single-sidedness avoids the all too stereotypical effect of ring modulation. It is up to the composer or performer to exploit these benefits.