Complex numbers & phasors

Processing Prerequisites

Learning objectives

  • Read a complex number in rectangular (a+bia + bi) and polar (∣z∣|z|, arg⁡z\arg z) form and switch between them, taking arg⁡z\arg z from atan2⁡(b,a)\operatorname{atan2}(b, a)
  • Interpret Euler's formula eiθ=cos⁡θ+isin⁡θe^{i\theta} = \cos\theta + i\sin\theta geometrically as a point on the unit circle
  • Explain why a rotating phasor z eiωtz\,e^{i\omega t} projects to the real cosine ∣z∣cos⁡(ωt+arg⁡z)|z|\cos(\omega t + \arg z), whose peak comes arg⁡z/ω\arg z/\omega early
  • Recognize why every seismic amplitude is a phasor and every filter acts on magnitude and phase together

A complex number is a pair of real numbers, but written together so we can multiply them like rotations instead of just scalings. That single change of perspective is what makes them indispensable for processing.

1. Rectangular form

Write z as

z;=;a+biz \\;=\\; a + bi

where a is the real part, b is the imaginary part, and the symbol i obeys one rule and one rule only:

i2=−1i^{2} = -1

Every field law you already know still holds: associativity, commutativity, distributivity, and division by anything but zero. What you lose is order: z_1ltz_2z\_1 \\lt z\_2 has no meaning for complex numbers. The one new thing is that squaring ii gives a negative, and that is enough to unlock everything that follows.

2. The complex plane

Plot zz as a point in a 2D plane: real axis horizontal, imaginary axis vertical. This is called the complex plane (or the Argand diagram). A complex number is now a vector from the origin to a point. Addition is vector addition; subtraction is vector subtraction; multiplication, as we will see in a moment, is something geometrically much more interesting.

3. Polar form: magnitude and phase

Instead of Cartesian coordinates, use length and angle:

|z| = \\sqrt{a^2 + b^2}\\quad\\text{(magnitude)} \\qquad \\arg z = \\operatorname{atan2}(b,\\,a) \\in (-180^\\circ, 180^\\circ\]\\quad\\text{(phase)}

The two-argument arctangent matters. The ratio b/ab/a loses both signs, so arctan(b/a)\\arctan(b/a) cannot tell 1+i1 + i from −1−i-1 - i: it calls both 45°. operatornameatan2(b,a)\\operatorname{atan2}(b, a) reads the signs and puts −1−i-1 - i at -135^\\circ, in the third quadrant where the arrow actually points. Then

z=∣z∣,bigl(cos(argz)+isin(argz)bigr)z = |z|\\,\\bigl(\\cos(\\arg z) + i\\sin(\\arg z)\\bigr)

This is just the usual conversion between Cartesian and polar coordinates. The point is: a complex number carries two pieces of information at once, an amplitude and an angle. That pairing is why they match oscillating signals so cleanly.

4. Euler’s formula

eiθ=cos⁡θ+isin⁡θ\boxed{e^{i\theta} = \cos\theta + i\sin\theta}

This is the single most important identity in signal processing. Read it right to left: the point (costheta,sintheta)(\\cos\\theta, \\sin\\theta) on the unit circle can be written as the exponential eithetae^{i\\theta}. That means multiplication by eithetae^{i\\theta} is a rotation by the angle theta\\theta: a pure twist, with no stretch.

Combining with polar form:

z=∣z∣,eiargzz = |z|\\,e^{i\\arg z}

Every complex number is a magnitude times a rotation.

5. Rotating phasors

Now hand theta\\theta a clock. Let theta=omegat\\theta = \\omega t, where omega\\omega is angular frequency (radians per second) and tt is time. (This book writes time dependence as e+iomegate^{+i\\omega t}; texts that write e−iomegate^{-i\\omega t}, as much of seismology does, turn the other way and flip the sign of every phase shift.) Then

z(t)=∣z∣,ei(omegat+argz)z(t) = |z|\\,e^{i(\\omega t + \\arg z)}

is a vector of fixed length ∣z∣|z| turning counter-clockwise about the origin at the angular rate omega\\omega. That is a phasor.

The physical, real-world signal is the projection onto the real axis:

\\operatorname{Re}\[z(t)\] = |z|\\,\\cos(\\omega t + \\arg z)

A rotating phasor is a cosine when you look at its shadow on the real axis, and its angle decides when that cosine peaks: ∣z∣cos(omegat+argz)|z|\\cos(\\omega t + \\arg z) reaches its maximum argz/omega\\arg z/\\omega seconds before cosomegat\\cos\\omega t does. In the figure below, drag the arrow and watch its shadow; then pass it through a filter H=∣H∣,eivarphiH = |H|\\,e^{i\\varphi}, one complex number, and watch what that does to the height and the timing.

Phasor: rotating vector in the complex planeωte^(iωt) = cos(ωt) + i·sin(ωt) - the phasor is the rotating vector

At the opening setting the arrow is 1.50 long at 60° and turns at omega=1.2\\omega = 1.2 rad/s, so its shadow is a cosine 1.50 high that peaks 0.87 s before cosomegat\\cos\\omega t: 60° is a sixth of a turn, and a sixth of the 5.24 s period is 0.87 s. The filter H = 0.5\\,e^{i\\,30^\\circ} then halves the height and moves the peak another 0.44 s earlier. A height and a time shift are all a linear filter can do to a single frequency.

6. Why processing lives in phasor-land

A monochromatic seismic wave at angular frequency omega\\omega has two degrees of freedom: its amplitude and its phase. Complex numbers carry exactly those two numbers in a single object. When a linear filter acts on a signal, it multiplies each frequency by a complex gain: the filter’s magnitude response scales amplitudes and its phase response shifts phases. Magnitude and phase are inseparable, and treating them as a single complex number is what lets us write

Y(omega)=H(omega),X(omega)Y(\\omega) = H(\\omega)\\,X(\\omega)

instead of two coupled equations for real and imaginary parts. Deconvolution, phase-shift migration and frequency-domain FWI all lean on expressions of exactly this form.

7. Multiplying phasors: magnitudes multiply, phases add

If z_1=∣z_1∣,eitheta_1z\_1 = |z\_1|\\,e^{i\\theta\_1} and z_2=∣z_2∣,eitheta_2z\_2 = |z\_2|\\,e^{i\\theta\_2}, then

z_1z_2=∣z_1∣∣z_2∣,ei(theta_1+theta_2)z\_1 z\_2 = |z\_1||z\_2|\\,e^{i(\\theta\_1 + \\theta\_2)}

The magnitudes multiply; the phases add. When we say a filter applies a +30^\\circ phase shift at angular frequency omega\\omega, that is literally a multiplication by eipi/6e^{i\\pi/6}, and the output cosine arrives pi/(6omega)\\pi/(6\\omega) seconds earlier: 0.44 s at omega=1.2\\omega = 1.2 rad/s, the shift in plate (d) of the figure. The same 30^\\circ at twice the frequency is only half the time, so one phase applied to every frequency moves each by a different time; that is how a phase rotation changes the shape of a wavelet.

8. Complex conjugate

The conjugate of z=a+biz = a + bi is barz=a−bi\\bar z = a - bi: flip the sign of the imaginary part. Two useful facts:

  • zcdotbarz=∣z∣2z \\cdot \\bar z = |z|^{2}: multiplying a complex number by its conjugate gives the squared magnitude, a real, nonnegative number.
  • \\operatorname{Re}\[z\] = \\tfrac{1}{2}(z + \\bar z): the real part is the average of zz and its conjugate. Applied to the unit phasor eiomegate^{i\\omega t}, cosomegat=tfrac12(eiomegat+e−iomegat)\\cos\\omega t = \\tfrac{1}{2}(e^{i\\omega t} + e^{-i\\omega t}): two arrows turning in opposite directions, whose midpoint is the shadow. The one turning clockwise is where negative frequencies come from.

These show up constantly when we manipulate real signals in the frequency domain.

The one sentence to remember

A complex number is a magnitude and a phase; eiθe^{i\theta} is a rotation by θ\theta; a rotating phasor projected onto the real axis is a cosine, and its phase is a time shift of arg⁡z/ω\arg z/\omega. Most of what follows in Part 0 builds on those facts.

Where this goes next

Section 0.3 introduces convolution, the forward model that turns a wavelet and a reflectivity series into a seismic trace. Section 0.4 will then show that convolution in time becomes simple multiplication in the frequency domain, which is why we keep coming back to phasors.

References

  • Bracewell, R. N. (1999). The Fourier Transform and Its Applications (3rd ed.). McGraw-Hill.
  • Oppenheim, A. V., Schafer, R. W. (2009). Discrete-Time Signal Processing (3rd ed.). Prentice Hall.
  • Strang, G. (2016). Introduction to Linear Algebra (5th ed.). Wellesley-Cambridge.

This page is prerendered for SEO and accessibility. The interactive widgets above hydrate on JavaScript load.