---
title: "An FFT Feature Value Needs Its Scaling and Frequency Basis"
description: "Leviathan Systems — Technical content Published 2026-10-21; updated 2026-10-21."
canonical: "https://www.leviathansystems.co/articles/ai-spectral-features-fft-normalization-bin-meaning"
last-updated: "2026-10-21"
---

# An FFT Feature Value Needs Its Scaling and Frequency Basis

Leviathan Systems — Technical content
Published 2026-10-21; updated 2026-10-21.

Compare the spectral representation and its consumer together. In FFT4, the default one-sided coefficients [0, 2, 0] and forward-normalized [0, 0.5, 0] preserve the same four samples [1, 0, -1, 0] at 0.25-second spacing. The coefficient 2 supports unit peak amplitude for this exact sampled cosine once its conjugate partner and inverse scaling are included. Equal magnitudes alone cannot establish equal samples.

## Identify what the delivered feature value represents

A spectral feature labeled 2 could be a complex Fourier coefficient, its magnitude, its squared magnitude or a separately scaled feature. Those quantities have different meanings. Establish which representation the supplier delivers and which quantity the receiving calculation or model expects before comparing values.

For an input-preservation claim, retain the identity and order of the samples, their amplitude meaning and time origin, the transform length, sample spacing, frequency ordering, sidedness and normalization. Also identify any processing before the transform or after its coefficients. A magnitude-only export has already discarded phase; a complete complex spectrum has not.

The related PCM guide explains the storage representation of waveform values. The speech-feature guide follows waveform samples into mel-feature arrays. This article fixes the supplied samples and asks whether different Fourier representations preserve them.

References: [N1](https://numpy.org/doc/2.3/reference/routines.fft.html), [N2](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfft.html)

## FFT4 fixes four values and their frequency basis

FFT4 is an original exact mathematical example: x[j] = [1, 0, -1, 0] for sample indices j = 0, 1, 2, 3. The values are real and dimensionless. Their stipulated equal spacing is d = 0.25 seconds, with the first sample at time zero. The transform uses all four values, so n = 4, with no cropping, added zeros, mean removal or taper. These premises describe no recorded signal or equipment test.

The sampling rate is 1/d = 4 samples/s. NumPy 2.3 defines the one-sided bin centers as k/(n*d), in cycles per unit of sample spacing. Here n*d = 1 second, so k = 0, 1, 2 labels 0, 1 and 2 Hz. This grid uses n*d, rather than the 0.75-second distance between the first and last timestamps.

Index 1 therefore denotes 1 Hz only with that frequency basis attached. The coefficient calculation itself does not supply the spacing in seconds. A bin label describes the sampled representation; the acquisition evidence needed to interpret possible physical input frequencies belongs to the related ADC sampling guide.

References: [N3](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfftfreq.html)

## Derive the full spectrum before removing its redundant half

Use NumPy 2.3's default DFT convention: X[k] is the sum of x[j] times exp(-2πi*j*k/n), where i is the imaginary unit. Only FFT4's first and third samples are nonzero. For n = 4, this reduces to X[k] = 1 - exp(-iπk) = 1 - (-1)^k. At k = 0, 1, 2, 3, the result is [0, 2, 0, 2].

The terms have distinct roles: index 0 is DC, index 1 is the positive 1 Hz term, index 2 is the Nyquist endpoint and index 3 is the negative 1 Hz term. For real input, the negative-frequency coefficient is the complex conjugate of its positive-frequency partner. FFT4's pair happens to be real, so both coefficients equal 2.

The real-input rfft representation retains [0, 2, 0]. It keeps DC, the positive interior term and the even-length Nyquist term, whose one-sided frequency label is positive 2 Hz. Omitting the conjugate-redundant negative term preserves the four original sample values when the complete retained coefficients and their interpretation accompany it.

Carry n explicitly. Three one-sided coefficients could come from either four or five real input points. With odd n there is no coefficient exactly at half the sampling rate, and the final retained term can be complex. Array length alone cannot establish the endpoint interpretation or the original sample count.

References: [N1](https://numpy.org/doc/2.3/reference/routines.fft.html), [N2](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfft.html), [N3](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfftfreq.html), [N4](https://numpy.org/doc/2.3/reference/generated/numpy.fft.irfft.html)

## Different scaling can reconstruct the same four samples

NumPy 2.3 calls its default normalization backward: the forward transform is unscaled and the inverse divides by n. For FFT4, the two nonzero terms contribute (2*exp(iπj/2) + 2*exp(-iπj/2))/4 = cos(πj/2). Evaluating j = 0, 1, 2, 3 returns [1, 0, -1, 0]. The inverse of the one-sided form supplies the same conjugate partner implicitly.

Forward normalization instead divides the forward coefficients by n and leaves the inverse unscaled. FFT4's full spectrum becomes [0, 0.5, 0, 0.5], and its one-sided spectrum becomes [0, 0.5, 0]. Reconstruction now sums 0.5*exp(iπj/2) + 0.5*exp(-iπj/2), again giving the original samples.

Ortho normalization scales each direction by 1/sqrt(n). Here that factor is 1/2: the one-sided coefficients are [0, 1, 0], and the inverse's additional factor of 1/2 again leaves each conjugate contribution at 0.5.

These are three compatible transform pairs. Mixing their conventions changes the result. For example, applying the default inverse scaling to the forward-normalized spectrum yields [0.25, 0, -0.25, 0]. The factor-of-four discrepancy comes from the pairing, even though the spectrum was correctly calculated under its declared normalization.

References: [N1](https://numpy.org/doc/2.3/reference/routines.fft.html), [N4](https://numpy.org/doc/2.3/reference/generated/numpy.fft.irfft.html)

## Interpret amplitude without losing phase or changing the quantity

For FFT4's exact interior-bin cosine, the default conjugate pair reconstructs unit peak amplitude: 2*abs(X[1])/n = 2*2/4 = 1. Under forward normalization, the corresponding calculation is 2*0.5 = 1. The quoted coefficient 2 is therefore consistent with unit amplitude; treating that coefficient directly as peak amplitude would give the wrong answer.

The factor of two accounts for two distinct conjugate terms. DC has no separate partner: under default normalization its contribution is X[0]/n. For even n, the Nyquist endpoint also occurs once and contributes X[n/2]*(-1)^j/n. Neither should be blindly doubled. Both are zero in FFT4. The interior-cosine calculation here is not an amplitude-estimation rule for arbitrary processed records.

Phase is essential to the stronger claim of preserving the samples. A quarter-cycle shift of FFT4 would produce [0, 1, 0, -1], with default one-sided coefficients [0, -2i, 0]. Its magnitudes are still [0, 2, 0]. The magnitude arrays agree while the ordered samples differ. A downstream feature intentionally using magnitudes may accept that loss, but magnitude equality cannot prove waveform equality.

Keep squared magnitude and power spectral density separate too. FFT4's default interior magnitude is 2 and its squared magnitude is 4; forward normalization gives 0.5 and 0.25. Squaring changes the scaling relationship. A density also needs a declared frequency-normalized basis. SciPy 1.16.2's periodogram reference distinguishes squared-spectrum units from units per Hz and documents their dependence on sampling rate and window normalization. These dimensionless FFT4 coefficients establish no calibrated physical PSD.

References: [N1](https://numpy.org/doc/2.3/reference/routines.fft.html), [N2](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfft.html), [S1](https://docs.scipy.org/doc/scipy-1.16.2/reference/generated/scipy.signal.periodogram.html)

## Resolve two apparently conflicting feature deliveries

Consider two fictional deliveries explicitly derived from the same ordered FFT4 samples and time origin. A supplies the full complex default spectrum [0, 2, 0, 2]. B supplies the complex one-sided forward-normalized spectrum [0, 0.5, 0]. Both declare n = 4, d = 0.25 seconds, the frequency ordering above and no other processing.

B's retained coefficients multiplied by four give [0, 2, 0]. Restoring the negative 1 Hz term by conjugate symmetry then gives A's complete spectrum. Equivalently, each delivery's matching inverse returns [1, 0, -1, 0]. Their frequency labels agree, and both support the same unit-amplitude sampled cosine. B's smaller number and shorter array are fully explained by normalization and real-input symmetry.

The receiving feature definition decides whether that equivalence is sufficient. If it expects A's default one-sided coefficient, B's 0.5 needs the declared factor-of-four conversion before being read as that quantity. If it expects forward-normalized magnitudes, A's retained coefficients need division by four before taking magnitudes. Mathematical equivalence does not make the raw numbers interchangeable at an unchanged consumer.

The comparison can therefore reach a positive conclusion: these complete representations preserve the same sampled input and support the same amplitude interpretation under the stated consumer mapping. For an actual delivery, obtain its representation and processing description and resolve that mapping with the appointed software owner. A feature headline without those declarations leaves the preservation and amplitude claims unanswered.

References: [N1](https://numpy.org/doc/2.3/reference/routines.fft.html), [N2](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfft.html), [N4](https://numpy.org/doc/2.3/reference/generated/numpy.fft.irfft.html)

## Scope a separate equipment installation requirement

If the selected compute equipment also needs receiving, rack integration, onsite installation or IT cabling, use Leviathan's Complete Physical Deployment service and the project inquiry below to discuss those physical stages. Bring a nonconfidential equipment list, site and rack arrangement, required connections and intended handoff so scope and availability can be confirmed.

Signal processing, model integration and software acceptance remain with the appointed software team. The numerical explanation supports the feature comparison; the separate inquiry concerns agreed physical installation work.

References: [L1](https://www.leviathansystems.co/services/turnkey-gpu-deployment)

## Primary sources

- [N1 — NumPy 2.3: Discrete Fourier Transform conventions](https://numpy.org/doc/2.3/reference/routines.fft.html). Checked 2026-10-21. Implementation details, Normalization and Real and Hermitian transforms define the sign, inverse scaling and conjugate symmetry used in the exact mathematical example.
- [N2 — NumPy 2.3: numpy.fft.rfft](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfft.html). Checked 2026-10-21. Documents real-input coefficient counts, length handling and the different even- and odd-length endpoint meanings. A retained complex coefficient is distinct from its magnitude.
- [N3 — NumPy 2.3: numpy.fft.rfftfreq](https://numpy.org/doc/2.3/reference/generated/numpy.fft.rfftfreq.html). Checked 2026-10-21. Defines bin centers from transform length and sample spacing. Spacing in seconds gives Hz, with a positive one-sided Nyquist label.
- [N4 — NumPy 2.3: numpy.fft.irfft](https://numpy.org/doc/2.3/reference/generated/numpy.fft.irfft.html). Checked 2026-10-21. Explains reconstruction using implicit conjugate terms and why the original real-input length must accompany the reduced spectrum.
- [S1 — SciPy 1.16.2: scipy.signal.periodogram](https://docs.scipy.org/doc/scipy-1.16.2/reference/generated/scipy.signal.periodogram.html). Checked 2026-10-21. Scaling and Notes distinguish a squared spectrum from power spectral density and identify sampling-rate and window normalization. No periodogram or physical calibration is asserted for FFT4.
- [L1 — Leviathan Systems: Complete Physical Deployment](https://www.leviathansystems.co/services/turnkey-gpu-deployment). Checked 2026-10-21. Describes agreed physical equipment receiving, rack integration, onsite deployment, IT cabling and handoff for a separately scoped project.

## Related Leviathan resources

- [ADC sampling and ambiguity in physical input frequency](/articles/industrial-ai-adc-sampling-alias-frequency)
- [PCM storage: sample frames, channels and container bytes](/articles/audio-ai-pcm-sample-frames-container-width-bytes)
- [Speech inference: waveform samples and mel-feature shapes](/articles/speech-audio-samples-padded-mel-feature-workload)
- [Complete Physical Deployment for selected equipment](/services/turnkey-gpu-deployment)
- [Discuss a separate equipment installation and IT cabling project](/contact?service=turnkey-gpu-deployment&from=%2Farticles%2Fai-spectral-features-fft-normalization-bin-meaning)

## Does the selected equipment need physical installation?

Share a nonconfidential equipment, site, rack and IT connection outline to discuss separately agreed physical deployment scope, requirements and availability.

[Discuss the scope](/contact?service=turnkey-gpu-deployment&from=/articles/ai-spectral-features-fft-normalization-bin-meaning)
