ar1, ar2hilbertasig

An IIR implementation of a Hilbert transformer.

*asig* – input signal

*ar1* – cosine output of *asig*

*ar2* – sine output of *asig*

**hilbert** is an IIR filter based implementation of a broad-band 90 degree phase difference network. The input to **hilbert** is an audio signal, with a frequency range from 15 Hz to 15 kHz. The outputs of **hilbert** have an identical frequency response to the input (i.e. they sound the same), but the two outputs have a constant phase difference of 90 degrees, plus or minus some small amount of error, throughout the entire frequency range. The outputs are in quadrature.

**hilbert** is useful in the implementation of many digital signal processing techniques that require a signal in phase quadrature. *ar1* corresponds to the cosine output of **hilbert**, while *ar2* corresponds to the sine output. The two outputs have a constant phase difference throughout the audio range that corresponds to the phase relationship between cosine and sine waves.

Internally, **hilbert** is based on two parallel 6th-order allpass filters. Each allpass filter implements a phase lag that increases with frequency; the difference
between the phase lags of the parallel allpass filters at any given point is approximately 90 degrees.

Unlike an FIR-based Hilbert transformer, the output of **hilbert** does not have a linear phase response. However, the IIR structure used in **hilbert** is far more efficient to compute, and the nonlinear phase response can be used in the creation of interesting audio effects, as in the second example below.

The first example implements frequency shifting, or single sideband amplitude modulation. Frequency shifting is similar to ring modulation, except the upper and lower sidebands are separated into individual outputs. By using only one of the outputs, the input signal can be "detuned," where the harmonic components of the signal are shifted out of harmonic alignment with each other, e.g. a signal with harmonics at 100, 200, 300, 400 and 500 Hz, shifted up by 50 Hz, will have harmonics at 150, 250, 350, 450, and 550 Hz.

sr= 44100kr= 4410ksmps= 10nchnls= 2instr1 idur = p3 ibegshift = p4 ; initial amount of frequency shift - can be positive or negative iendshift = p5 ; final amount of frequency shift - can be positive or negative kfreqlinsegibegshift, idur, iendshift ; A simple envelope for determining the amount of frequency shift. ainsoundin"supertest.wav" ; Use the sound of your choice. areal, aimaghilbertain ; Phase quadrature output derived from input signal. asinoscili1, kfreq, 1 ; Quadrature oscillator. acososcili1, kfreq, 1, .25 amod1 = areal * acos ; Trigonometric identity - see references for further details. amod2 = aimag * asin ; Both sum and difference frequencies can be output at once. aupshift = (amod1 + amod2) * 0.7 ; aupshift corresponds to the sum frequencies, while adownshift = (amod1 - amod2) * 0.7 ; adownshift corresponds to the difference frequencies. ; Notice that the adding of the two together is identicaloutsaupshift, aupshift ; to the output of ring modulation. endin ; a simple score f1 0 16384 10 1 ; sine table for quadrature oscillator i1 0 29 0 200 ; starting with no shift, ending with all ; frequencies shifted up by 200 Hz. i1 30 29 0 -200 ; starting with no shift, ending with all ; frequencies shifted up by 200 Hz. e

The second example is a variation of the first, but with the output being fed back into the input. With very small shift amounts (i.e. between 0 and +-6 Hz), the result is a sound that has been described as a "barberpole phaser" or "Shepard tone phase shifter." Several notches appear in the spectrum, and are constantly swept in the direction opposite that of the shift, producing a filtering effect that is reminiscent of Risset's "endless glissando."

sr= 44100kr= 44100 ; kr MUST be set to sr for "barberpole" effectksmps= 1nchnls= 2instr2 afeedbackinit0 ; initialization of feedback idur = p3 ibegshift = p4 ; initial amount of frequency shift - can be positive or negative iendshift = p5 ; final amount of frequency shift - can be positive or negative ifeed = p6 ; amount of feedback - the higher the number, the more pronounced ; the effect. Experiment to see at what point oscillation occurs ; (often a factor of 1.4 is the maximum feedback before oscillation). kfreqlinsegibegshift, idur, iendshift ainsoundin"supertest.wav" areal, aimaghilbertain asinoscili1, kfreq, 1 acososcili1, kfreq, 1, .25 amod1 = areal * acos amod2 = aimag * asin aupshift = (amod1 + amod2) * 0.7 adownshift = (amod1 - amod2) * 0.7 afeedback = (amod1 - amod2) * .5 * ifeed ; feedback taken from downshift outputoutsaupshift, aupshiftendin; a simple score f1 0 16384 10 1 ; sine table for quadrature oscillator i2 0 29 -.3 -.3 1.4 ; upwards sweep, at a rate of .3 times a second, lots of feedback i2 30 30 .1 .1 1.4 ; downwards sweep, .3 times a second, lots of feedback i2 60 29 5 -5 1.4 ; sweep goes from .3 time a second, descending in pitch, ; to .3 times a second ascending in pitch, with a ; large amount of feedback. e

The use of phase-difference networks in frequency shifters was pioneered by Harald Bode.^{1} Bode and Bob Moog provide an excellent description of the implementation and use of a frequency shifter in the analog realm in;^{2} this would be an excellent first source for those that wish to explore the possibilities of single sideband modulation. Bernie Hutchins provides more applications of the frequency shifter, as well as a detailed technical analysis.^{3} A recent paper by Scott Wardle^{4} describes a digital implementation of a frequency shifter, as well as some unique applications.

- H. Bode, "Solid State Audio Frequency Spectrum Shifter." AES Preprint No. 395 (1965).
- H. Bode and R.A. Moog, "A High-Accuracy Frequency Shfiter for Professional Audio Applications."
*Journal of the Audio Engineering Society*, July/August 1972, vol. 20, no. 6, p. 453. - B. Hutchins.
*Musical Engineer's Handbook*(Ithaca, NY: Electronotes, 1975), ch. 6a. - S. Wardle, "A Hilbert-Transformer Frequency Shifter for Audio." Available online at http://www.iua.upf.es/dafx98/papers/.

Sean Costello

Seattle, Washington

1999

New in Csound version 3.55