FFT Frequency Analysis in SciDAVis: A Practical Guide
When a measurement looks like noise but you suspect hidden periodic behavior — mains hum on a sensor, a vibration mode in a mechanical part, a seasonal cycle in a climate series — the Fast Fourier Transform (FFT) turns the time trace into a spectrum where each repeating component shows up as a peak at its own frequency. SciDAVis ships a dedicated FFT dialog that computes direct and inverse transforms from a table or a plot, no scripting required.
Step 1 — Prepare evenly sampled data
The FFT assumes samples taken at perfectly regular intervals. Before you start:
- Even spacing: the X column (usually time) must advance by a constant step. SciDAVis reads the Sampling Interval from the X-values by default. Uneven data must be resampled or interpolated first — otherwise the frequency axis is meaningless.
- No gaps: fill missing rows or the transform will treat the gap as a zero, injecting false frequency content.
- Know your sampling rate: if samples are Δt apart, the highest frequency you can resolve is the Nyquist frequency fN = 1 / (2Δt). A 1 kHz sampling rate resolves up to 500 Hz — nothing above that can appear correctly.
- Remove big DC offsets first: a large constant offset puts a giant peak at 0 Hz that can drown out small nearby components. Subtract the column mean (a one-line operation in the table) before transforming.
Step 2 — Open the FFT dialog
With your table active (or a plot of the curve selected), go to Analysis → FFT. The dialog looks different depending on where you start:
| Dialog field | What it does |
|---|---|
| Forward / Inverse | Choose a direct FFT (time → frequency) or an inverse FFT (frequency → time). The inverse is how you reconstruct a filtered signal, see Step 5. |
| Sampling Interval | Defaults to the actual spacing of your X-values. Setting a smaller value makes no sense; you can set a larger value to deliberately use fewer samples. |
| Normalize Amplitude | When checked, the amplitude curve is normalized so the largest value is 1 — handy when comparing spectra from different runs. |
| Shift Results | When checked, frequencies are shifted to give a centered x-scale (negative to positive frequencies) instead of starting at zero. |
| Column selection (table) | Pick the sampling column (X) and two columns for the Y-values. For complex data the first column is the real part and the second the imaginary part; for plain real data, select the same column for both. |
Clicking OK creates two new objects: a plot window showing the FFT amplitude curve, and a table holding the real part, imaginary part, amplitude, and angle (phase) of every frequency bin. That table is the raw material for everything that follows.
Step 3 — Forward vs. inverse: when to use each
Forward FFT is the analysis move: time-domain signal in, frequency spectrum out. Use it to identify periodic components, measure their frequencies and relative strengths, or decide where noise lives.
Inverse FFT is the synthesis move: frequency-domain data in, time-domain signal out. Its main practical use is reconstruction after you have edited the spectrum — for example after zeroing noise bins in the result table. Select the sampling column plus the (possibly edited) real and imaginary columns, choose Inverse, and SciDAVis rebuilds the time trace.
Step 4 — Windowing: what SciDAVis can and cannot do
Textbooks recommend multiplying the signal by a window function (Hann, Hamming, Blackman) before the FFT to reduce spectral leakage — the smearing of energy into neighboring bins when the signal does not contain a whole number of cycles. Here is the honest status: the SciDAVis FFT dialog has no windowing options at all. It always applies an implicit rectangular window (i.e., your data as-is).
Practical ways to live with that:
- Record a whole number of cycles when you control the experiment — leakage is minimal when the signal starts and ends at matching phases.
- Use longer records. Frequency resolution is Δf = 1 / (N·Δt); more samples narrow each bin, so leakage contaminates less of the spectrum.
- Detach the mean (Step 1) so the 0 Hz bin does not dominate.
- Need a real window function? Use the SciDAVis scripting window (Python) to multiply your column by a window before running the FFT dialog, or do the transform in an external tool and import the spectrum back. The dialog is a solid workhorse, not a signal-processing lab — and knowing the boundary keeps your results honest.
Step 5 — Reading the power spectrum
The output plot shows amplitude against frequency. To read it like a pro:
- Peak position = frequency. A spike at 50 Hz means a 50 Hz component is present. With Shift Results on, the same peak appears mirrored around zero — that is the two-sided spectrum, not a second component.
- Peak height = relative strength. With Normalize Amplitude on, heights are relative (max = 1); with it off, heights scale with the number of samples, so compare like with like.
- Width = resolution. A single pure tone occupies one bin (plus leakage). Broad humps mean broadband content or a tone that drifts during the record.
- Check the Nyquist edge. Content piling up near fN often signals aliasing — frequencies above Nyquist folding back into your band. If you see it, you need a faster sampling rate, not a bigger FFT.
Step 6 — A denoising workflow with the inverse FFT
SciDAVis has no one-click “remove noise” filter, but the forward/inverse pair plus the result table gives you a manual spectral filter:
- Run the forward FFT on the noisy signal (Step 2). Identify the bins that are noise — e.g., a 50 Hz mains spike on a sensor trace.
- Open the FFT result table. In the real and imaginary columns, set the values of the unwanted frequency bins to zero (leave amplitude/angle — they are derived).
- With that table active, open
Analysis → FFTagain, select the same sampling column and the edited real/imaginary columns, and choose Inverse. - SciDAVis reconstructs the time-domain signal with those components removed. Plot it against the original to verify: the interference should be gone while the rest of the waveform is preserved.
Worked example — 50 Hz hum on a sensor
Suppose a table holds 1,000 samples of a sensor signal, column 1 = time in seconds (0.000, 0.001, 0.002, …), column 2 = the measured value, and you suspect 50 Hz mains interference:
- Subtract the mean of column 2 (removes the 0 Hz spike).
Analysis → FFT: Forward, Sampling Interval = 0.001 s, Normalize Amplitude checked, Shift Results unchecked.- The amplitude plot shows a dominant spike at 50 Hz — confirmation of the hum — plus your real signal content elsewhere.
- In the result table, zero the real and imaginary values of the bin(s) around 50 Hz.
- Run
Analysis → FFT→ Inverse on the edited columns: the reconstructed trace is your hum-free signal.
FAQ
Do I need a whole number of samples, like a power of two?
No — SciDAVis handles arbitrary record lengths. More samples simply give finer frequency resolution (Δf = 1/(N·Δt)), at the cost of a longer transform.
Why is there a huge peak at 0 Hz?
That is the DC component — the mean of your signal. Subtract the column mean before transforming, and the interesting part of the spectrum becomes visible.
Can I apply a Hann or Hamming window in the dialog?
Not in SciDAVis 2.9.x — the dialog has no windowing options. Use the workarounds in Step 4 (whole-cycle records, longer data, scripting) instead of looking for a button that isn’t there.
The inverse FFT output looks wrong — what happened?
The most common cause is editing the amplitude column instead of the real/imaginary columns, or selecting the wrong columns for the inverse run. The inverse needs the sampling column plus the real and imaginary parts, in that order.
Next steps
- Curve Fitting in SciDAVis — model your data with functions instead of transforming it
- Multi-Peak Curve Fitting for Spectroscopy Data — fit overlapping peaks in spectra
- Importing Data into SciDAVis — get your time series into a table cleanly
- Python Scripting in SciDAVis — automate FFT runs and apply window functions
- All SciDAVis Tutorials — back to the tutorial hub
