Home / Science / Engineering / Signal processing / FFT workbenchTool #628

FFT spectrum analyser online: amplitude and power spectrum, windows, peaks and FFT filter

Paste or open a signal (time and value, or values and a sample rate) and get its amplitude or power spectrum with a Hann, Hamming, Blackman or no window, a list of peaks, and a simple FFT low-, high- or band-pass filter back to time. CSV downloads; nothing is uploaded.

Keep it one tap away for everyday use.

Bookmark FFT workbench?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. Signal
  2. Window
  3. Spectrum
  4. Download
Nothing is uploadedWorks offline once open

Signal

Two columns (time in seconds, value) or one column of values. Samples must be evenly spaced. A first row of names is fine; rows without a number are skipped. The example is made up: 50 Hz and 120 Hz sines plus noise. Up to 200,000 values.

Spectrum

A window tapers the ends of the record so a tone that does not fit a whole number of cycles leaks less into other frequencies. Zero padding draws a smoother curve but does not separate tones that are closer than the resolution. Removing the mean hides the 0 Hz (DC) bar so the rest of the spectrum is easier to read.

Peaks

Peak frequency and amplitude are refined between bins with a parabola through the log amplitude of the highest bin and its two neighbours. Amplitude is the height of a sine (half its peak-to-peak), corrected for the window.

Filter and back to time

The whole signal is transformed (no window), every frequency outside the pass band is set to zero, and the inverse FFT gives the filtered signal. This "brick-wall" filter is exact for the frequencies it keeps but can ring near sudden jumps, and the signal is treated as if it repeats end to end. For a filter you can run on live data, design one with the FIR/IIR filter designer.

Download

What it does

A fast Fourier transform (FFT) splits a signal into the sine waves it is made of. This workbench takes a signal you paste or open (a vibration record, a voltage from a data logger, an audio clip saved as numbers, a sensor reading) and shows its spectrum: how strong each frequency is. It lists the strongest peaks, lets you choose the window that tapers the record, and can filter the signal by keeping only some frequencies and transforming back to time. Everything runs in your browser; the signal never leaves your device.

How to use it

  1. Paste or open your signal. Two columns give the time (in seconds) and the value; the sample rate is worked out from the time step. One column of values works too: then type the sample rate (samples per second, Hz). The samples must be evenly spaced; the tool says so if they are not.
  2. Window. Hann is a good all-round choice. Blackman leaks least, so weak tones next to strong ones show up better, but its peaks are wider. Hamming sits between them. Rectangular (no window) gives the sharpest peaks only when every tone fits a whole number of cycles in the record.
  3. Show. Amplitude reads directly as the height of each sine wave. Amplitude in dB shows weak and strong parts together. Power spectral density (dB per hertz) is what noise is measured in; it does not depend on the record length. Power spectrum gives the power of each tone (a sine of amplitude A has power A²/2).
  4. Zero padding adds zeros to the end so the curve is drawn at more points. It does not improve the true resolution, which is 1 divided by the record length.
  5. Filter. Choose low-pass, high-pass, band-pass or band-stop and the edges in hertz. The chart shows the original and the filtered signal; the CSV gives both.

Worked example

The example is a made-up record: 1,000 samples over 1 second (1,000 Hz), with an offset of 0.2 V, a 50 Hz sine of 1 V, a 120 Hz sine of 0.5 V and random noise. With the Hann window the page finds the strongest peak at 49.99 Hz with an amplitude of 1.01 V, and the second at 120.0 Hz with 0.486 V, close to the true values; the noise moves them slightly. The resolution is 1 Hz and the Nyquist frequency is 500 Hz. The mean, 0.1928 V, is removed first. A low-pass filter at 80 Hz keeps the 50 Hz wave and removes the 120 Hz wave and most of the noise: the standard deviation drops from 0.846 V to 0.719 V.

Tips

  • A tone that falls between two bins looks lower and wider (“scalloping” and leakage). The peak list corrects for this by fitting a parabola through the top three bins.
  • Remove a slow drift before the FFT (for example with a high-pass filter at a very low frequency) or it will hide the low frequencies.
  • Anything above the Nyquist frequency (half the sample rate) folds back and appears at a wrong, lower frequency. Filter it out before sampling, or sample faster.

FAQ

Is it the same as numpy or MATLAB? Yes: the transform follows numpy.fft, and the density and power scalings match scipy.signal.periodogram with the mean removed. The checks compare many values to 9 or more significant figures.

Does the length need to be a power of 2? No. Any length works; other lengths use Bluestein’s method, which is just as exact.

Why does the filtered signal wobble at the ends? The FFT treats the record as if it repeated end to end. If the first and last values differ a lot, that jump spreads into the filtered result. A real-time filter from the FIR/IIR filter designer avoids this.

My times are uneven. Use the light curve period finder (Lomb-Scargle), which is made for uneven sampling.

Where the numbers come from

  • Discrete Fourier transform (radix-2 FFT and Bluestein's chirp-z method for other lengths) and the Hann, Hamming and Blackman windows: standard textbook definitions, for example Oppenheim and Schafer, Discrete-Time Signal Processing; Harris (1978), Proceedings of the IEEE 66, 51 to 83.
  • Checked against numpy.fft (fft, rfft, irfft) and scipy.signal (periodogram, get_window), used only for testing; no code copied.
  • The example signal is made up by fibub.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Last updated 2026-11-09.

Related tools

Light curve period finder #48 Paste times and brightness measurements, even with gaps and uneven spacing, and find the period with a Lomb-Scargle periodogram, false alarm probabilities, alias checks and a folded light curve. Publication plot maker #27 Paste columns or open a CSV or Excel file and get a clean scientific figure with error bars, sized for a journal column. Download vector SVG or PDF, or PNG at 300 or 600 dpi. Your data stays in your browser. FIR/IIR filter designer #629 Design a low-pass, high-pass, band-pass or band-stop digital filter: FIR by the window method (Hamming, Hann, Blackman, Kaiser) or IIR Butterworth and Chebyshev type I by the bilinear transform. See the gain, phase and group delay, the poles and zeros, and copy the coefficients as C arrays, second-order sections or CSV. Sampling and aliasing explorer #630 Type a signal frequency and a sample rate and see what the samples really record: the apparent (alias) frequency, the Nyquist zone, the alias sine drawn through the samples, a folding diagram and the ideal sinc reconstruction. Includes the wagon-wheel effect and audio examples. Wavelet transform viewer #631 Paste or open a signal and see which frequencies are present at each moment with a continuous Morlet wavelet scalogram, and split it into detail and approximation levels with a Haar or Daubechies discrete wavelet transform. Matches PyWavelets; CSV downloads; nothing is uploaded. 1D Schrödinger solver #923 Choose a textbook potential, type a formula or draw your own, and get the lowest energy levels and wavefunctions of the one-dimensional Schrödinger equation by the matrix (finite-difference) method, with the exact levels alongside for the box, harmonic oscillator, finite well, Morse, linear and Pöschl–Teller potentials.