# Analytic signal An **analytic signal** is a complex-valued function built from a real-valued signal x(t) so that the result contains no negative-frequency components. It is formed as `z(t) = x(t) + j*xhat(t)`, where `xhat(t)` is the [[Hilbert_transform|Hilbert transform]] of x(t): a quadrature version of the same signal, shifted −90° at every frequency it contains. Discarding the negative-frequency half of a real signal's spectrum loses nothing, because a real signal's spectrum is symmetric and the negative half merely mirrors the positive one, but keeping only the positive half in a genuinely complex-valued function turns quantities that are awkward to define for a real signal alone — an instantaneous amplitude and an instantaneous phase — into ordinary properties of a single complex number at every instant. The microsim on this page builds the analytic signal for a chosen test waveform in real time and plots the real signal, its Hilbert transform, and the resulting envelope and phasor together, so the reader can watch the phasor's radius recover a hidden modulation shape as the underlying frequencies change. Because the construction is exact for any sum of sinusoids, an analytic signal built from an [[Amplitude_modulation|amplitude-modulated]] carrier recovers the modulating envelope exactly, which is the representation's headline use in [[Signal_modulation|modulation]] and demodulation and, in a further step not covered here, in single-sideband transmission. ## Definition For a real-valued signal x(t) the analytic signal is `z(t) = x(t) + j*xhat(t)`, where xhat(t) is x(t)'s Hilbert transform — the same signal with every frequency component shifted by −90°, so that a cosine component becomes a sine. Because the transform preserves each component's frequency and amplitude and only shifts its phase, z(t) can equivalently be built one sinusoid at a time and the results added, which the definition's linearity guarantees. ### Negative frequency components The reason a one-sided spectrum loses nothing traces to Euler's formula. A real cosine is the sum of two counter-rotating phasors, `cos(x) = (exp(j*x) + exp(-j*x))/2`[^stib032a], one turning at +f and one at −f, each carrying half the amplitude; the two are complex conjugates of each other, which is why a real signal's [[Fourier_transform|spectrum]] is symmetric in the first place, and the negative-frequency phasor carries no information the positive-frequency one lacks. Shifting every component by −90° turns each cosine into a sine, and adding j times that result to the original cosine cancels the −f phasor and doubles the +f one — a fact easiest to see by writing both the cosine and its shifted twin as sums of the same two counter-rotating phasors and adding term by term[^john021]. The outcome is a single phasor of the original amplitude, rotating at +f alone: `z(t) = A*exp(j*(2*pi*f*t + phi))` for a pure tone of amplitude A, frequency f and phase φ, in place of the two half-amplitude phasors, at +f and −f, that made up the real signal. Nothing is lost because the discarded half was redundant, and something is gained because the surviving half is a genuine complex number at every instant, with its own magnitude and angle, rather than one real number whose "phase" would otherwise have to be defined some other way. ## Examples ### Example 1 For a pure tone `x(t) = A*cos(2*pi*fc*t)`, the Hilbert transform is `xhat(t) = A*sin(2*pi*fc*t)`, and the analytic signal is `z(t) = A*exp(j*2*pi*fc*t)`: a single [[Complex_analysis|phasor]] of constant length A, turning at fc. In the sketch's single-tone preset the phasor traces a perfect circle and the envelope readout `|z|` holds at exactly 1, in the sketch's normalized units, for the whole sweep — the simplest possible check that the construction removes only the redundant negative-frequency half and adds nothing else. ### Example 2 For an [[Amplitude_modulation|amplitude-modulated]] signal `x(t) = (1 + m*cos(2*pi*fm*t))*cos(2*pi*fc*t)`, expanding the product gives a carrier at fc and two sidebands at `fc + fm` and `fc − fm`, each of amplitude m/2 relative to the carrier. Building the analytic signal from all three components at once, rather than trying to read the envelope off the real waveform directly, recovers the modulating shape exactly: the sketch's default preset, with carrier 8 Hz, modulation 2 Hz and depth 0.7, produces an envelope `|z(t)|` that traces `1 + 0.7*cos(2*pi*2*t)` in the sketch, the same curve the modulation started from, with none of the ripple at twice the carrier frequency that a simple diode envelope detector would leave behind. ### Example 3 For two equal-amplitude tones `x(t) = cos(2*pi*f1*t) + cos(2*pi*f2*t)`, the analytic signal is the sum of two co-rotating phasors of equal length, one at f1 and one at f2, and their sum traces a looping path in the complex plane whose length `|z(t)|` beats at half the difference frequency, `|f2 - f1|/2`, in the sketch, while the phase rotates non-uniformly rather than at one constant rate, since neither component dominates the sum evenly at every instant of the cycle. ## Properties ### Instantaneous amplitude and phase Because z(t) is an ordinary [[Complex_analysis|complex number]] at every instant, it has an ordinary magnitude and angle there too, `|z(t)|` and `arg(z(t))`, called the instantaneous amplitude and instantaneous phase. The arithmetic is the same as for any complex number: a value such as `3 - 2j` has magnitude `sqrt(3^2 + 2^2) = sqrt(13)` and angle `atan2(-2, 3)`, about −33.7°[^john030], and z(t) is read off exactly this way at each moment, using the real signal and its Hilbert transform as the two coordinates instead of two fixed numbers. Differentiating the instantaneous phase with respect to time gives an instantaneous frequency, a single number per instant built the same way a phasor's own turning rate is built from its phase[^stib031], generalizing "frequency" to signals whose content is not one fixed value, such as a swept tone or a chirp — a generalization that only makes sense once phase is defined at every instant the way the analytic signal defines it, rather than only for a signal that is a sum of fixed-frequency sinusoids. ### Complex envelope/baseband Multiplying the analytic signal by `exp(-j*2*pi*fc*t)` for a chosen reference frequency fc shifts every component of z(t) down by fc, turning a signal clustered around a [[Carrier_wave|carrier]] frequency into one clustered around zero; the result is the complex envelope, or complex baseband representation, of the original signal with respect to that carrier. Because the shift is a rotation rather than a filter, it changes no magnitude, only where each component sits on the frequency axis, so the envelope's own magnitude `|z(t)|` is unchanged and equals the same instantaneous amplitude computed directly from z(t). The baseband representation is the form most communications theory actually computes with: a signal's bandwidth, its [[Signal_modulation|modulation]], and its demodulation are usually easier to describe and simulate around zero frequency than around whatever carrier a particular radio link happens to use, and converting back is only a matter of choosing fc again and multiplying by the opposite rotation. ## Extensions of the analytic signal to signals of multiple variables ### Multi-dimensional analytic signal based on an ad hoc direction The one-dimensional construction does not extend uniquely to a function of two or more variables, such as an image, because "positive frequency" has no single meaning once frequency becomes a vector rather than a signed number: a two-dimensional spatial frequency can point in any direction, and there is no version of "less than zero" for a direction in ordinary [[Mathematics|mathematics]]. One practical extension sidesteps the ambiguity by picking a single direction — the direction of a scan line in an image, say — and applying the ordinary one-dimensional Hilbert transform along it only, treating every line as its own one-dimensional signal. The result is a genuine analytic signal along the chosen direction, useful when that direction is meaningful on its own terms, but it depends on the choice: rotating the image and repeating the construction along a different direction generally gives a different answer, which is the sense in which the direction is "ad hoc" rather than determined by the data itself. ### The monogenic signal A direction-independent alternative replaces the one-dimensional Hilbert transform with a genuinely rotation-invariant operator built from all of the signal's spatial directions at once, most commonly the Riesz transform, giving a construction usually called the monogenic signal. Rather than a single instantaneous phase, a monogenic signal yields a local amplitude and a local orientation at every point, so a two-dimensional pattern's energy and the direction it runs in can both be read off without first guessing which direction to analyse along. This generalization matters most in [[Digital_image_processing|image processing]], where texture and edges run in every direction across a single frame and no one scan direction can be preferred in advance; the trade is a more elaborate transform in exchange for an answer that does not depend on an arbitrary choice the one-directional extension cannot avoid. ## Microsims The primary sketch builds the analytic signal live from a chosen test waveform. Four sliders set the carrier or base frequency, a modulation or offset frequency, a modulation depth, and a sweep speed for a cursor that moves through the window, while a button cycles between the single-tone, AM, and two-tone presets described above. The time panel plots the real signal, its [[Hilbert_transform|Hilbert transform]], and a shaded band running between `+|z(t)|` and `-|z(t)|` that hugs the waveform's peaks; the spectrum panel draws the real signal's symmetric lines at both +f and −f alongside the analytic signal's one-sided lines at +f only, each marked as the full-height doubled line the earlier section on negative-frequency components describes; and the phasor panel plots z(t) directly in the complex plane, tracing its locus over the window and marking the instantaneous phasor at the sweeping cursor together with live numeric readouts of x, x̂, `|z|` and the angle of z. A three.js companion, a new framework sketch, renders `x(t) + j*Ĥx(t)` as a helix in which the envelope is the radius and the instantaneous frequency is the pitch, extending the flat phasor view into three dimensions. *Try:* Switch the sketch to its AM preset and watch the phasor panel's `|z|` readout trace the modulation envelope exactly, with no ripple at the carrier rate, then switch to the two-tone preset and watch the same readout begin to beat instead. ## Wikipedia : Wikitube **Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Analytic_signal) : [Wikitube](https://en.wikitube.io/wiki/Analytic_signal) Skeleton mirrored at revision 1369755896. Prose, emphasis and the microsims are Wikitube's own. ## See also - [[Hilbert_transform]] - [[Amplitude_modulation]] - [[Signal_modulation]] - [[Carrier_wave]] - [[Fourier_transform]] - [[Digital_image_processing]] - [[Complex_analysis]] ## Notes The primary sketch builds every preset from a small, explicit sum of pure-tone components rather than a general real-world waveform, so the Hilbert transform used throughout is the exact per-component −90° phase shift rather than a numerically estimated one; this keeps the envelope and phase readouts exact for the presets shown, an illustrative simplification chosen for clarity rather than a limitation of the analytic signal itself. ## References [^stib032a]: Stiber, M.; Stiber, B.; Larson, E. *Signal Computing: Digital Signals in the Software Domain*. 2020, p. 32 (PDF page). Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain . CC BY-SA. [^stib031]: Stiber, M.; Stiber, B.; Larson, E. *Signal Computing: Digital Signals in the Software Domain*. 2020, p. 31 (PDF page). Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain . CC BY-SA. [^john021]: Johnson, D. *Fundamentals of Electrical Engineering I*. 2014, pp. 19–21 (PDF pages). Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-electrical-engineering-1 . CC BY. [^john030]: Johnson, D. *Fundamentals of Electrical Engineering I*. 2014, pp. 18, 30 (PDF pages). Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-electrical-engineering-1 . CC BY. ## Further reading - Michael Stiber, Bilin Stiber, Eric Larson. *Signal Computing: Digital Signals in the Software Domain*. 2020. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain. CC BY-SA. - Don Johnson. *Fundamentals of Electrical Engineering I*. 2014. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-electrical-engineering-1. CC BY. - Christian Tiberius, Max Mulder. *Engineering Signal Analysis: From Fourier to filtering: Theory*. 2026. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/engineering-signal-analysis-from-fourier-to-filtering-theory. CC BY. ## External links - Analytic signal — live sketch: https://editor.p5js.org/sciencenibber/full/unax-Mpfn - Analytic signal — editor (fork): https://editor.p5js.org/sciencenibber/sketches/unax-Mpfn <!-- Hubs: Signal_processing. Portals: PORTAL_Signal_Processing. Signal Processing portal wave 1 · 2026-09-17 · drafted. -->