= Noise covariance between windowed Fourier bins
{title2=$C_{kl}=\sigma^2(\sum_nw_n)^{-2}\sum_nw_n^2e^{-2\pi i(k-l)n/N}$}
<Noise covariance between windowed Fourier bins> describes the statistical dependence created when several spectral estimates use the same noisy record. A window changes not only each estimate’s <equivalent noise bandwidth>, but also the overlap of their <frequency> responses. Uncorrelated time samples therefore need not produce uncorrelated spectral bins after tapering.
Let independent zero-mean sample errors $\epsilon_n$ satisfy $\mathbb E[\epsilon_n\overline{\epsilon_m}]=\sigma^2\delta_{nm}$. Use real coefficients $w_n$, nonzero sum $S=\sum_nw_n$, and coherent-amplitude-normalized estimates on the original $N$-point grid,
$$
Z_k=\frac1S\sum_{n=0}^{N-1}w_n\epsilon_ne^{-2\pi ikn/N}.
$$
Expanding their <complex covariance> and removing the vanishing cross terms gives
$$
\boxed{C_{kl}=\mathbb E[Z_k\overline{Z_l}]
=\frac{\sigma^2}{S^2}\sum_{n=0}^{N-1}w_n^2e^{-2\pi i(k-l)n/N}.}
$$
Thus the covariance is the Fourier transform of the \b[squared] window, evaluated at the bin difference. Its diagonal agrees with the <equivalent noise bandwidth> <variance> formula. SciPy’s spectrum/density scaling likewise uses the coefficient-square sum separately from the squared coherent sum.<SciPy 1.16.2 documentation>[scipy.signal.periodogram, Notes, spectrum/density ratio]{ref}
For a <rectangular window>, the exponential orthogonality sum gives $C_{kl}=(\sigma^2/N)\delta_{kl}$ on this unpadded grid. This is a statement about covariance; independence additionally follows for an appropriate Gaussian noise model, not for every possible input distribution.
For the periodic <Hann window>, with $N\ge5$,
$$
w_n^2=\frac38-\frac12\cos(2\pi n/N)+\frac18\cos(4\pi n/N),\qquad S=N/2.
$$
Its original-grid covariance has only five nonzero cyclic diagonals:
$$
C_{k,k}=\frac{3\sigma^2}{2N},\qquad
C_{k,k\pm1}=-\frac{\sigma^2}{N},\qquad
C_{k,k\pm2}=\frac{\sigma^2}{4N},
$$
with bin indices modulo $N$. Normalizing by the common diagonal gives adjacent-bin covariance ratio $-2/3$ and second-neighbor ratio $1/6$. The negative sign follows from this window’s placement in the record; changing the time placement can change covariance phases without changing their magnitudes. The periodic and symmetric coefficient conventions must not be interchanged in this finite calculation.<SciPy 1.16.2 documentation>[scipy.signal.windows.hann, sym parameter and defining raised-cosine coefficients]{ref}
\Image[/windowed-fourier-bin-noise-covariance.png]
{title=<Noise covariance between windowed Fourier bins> for rectangular and periodic <Hann windows>}
{description=Exact original N=16 grid covariance matrices for independent equal-<variance> sample errors. Each matrix is divided by its own diagonal <variance>, so the plot compares correlation structure rather than absolute noise level. The corner bands arise from cyclic bin indexing. No sampled experimental data or random simulation is used.}
<Correlation of neighboring periodogram powers> is different from the sign of this complex covariance. Suppose each input sample has independent Gaussian real and imaginary parts, each of <variance> $\sigma^2/2$, with all components independent across time. The nonconjugated second moments vanish. Gaussian fourth-moment pairing, as in <Isserlis's theorem>, then gives
$$
\operatorname{Cov}(|Z_k|^2,|Z_l|^2)=|C_{kl}|^2.
$$
Consequently neighboring Hann-bin powers are positively correlated despite the negative covariance of their complex amplitudes. If $V=C_{kk}$, their individual power variances are $V^2$, and the <variance> of their arithmetic mean is
$$
\frac14\left(2V^2+2\frac49V^2\right)=\frac{13}{18}V^2.
$$
Treating them as independent would incorrectly give $V^2/2$. For real Gaussian input, a further term $|\mathbb E[Z_kZ_l]|^2$ enters the power covariance; the <pseudo-covariance of a complex random variable> and conjugate-<frequency> symmetry therefore need attention near paired bins and the real-valued endpoint bins.
<Zero padding> creates more closely spaced evaluations of the same record, not more independent noise realizations. Even a rectangular record generally has correlated estimates on that denser grid. Detrending, colored input noise and overlapping records change the covariance calculation too. SciPy exposes detrending and FFT-length choices explicitly; its default constant detrending must be disabled when testing the unmodified independent-sample model above.<SciPy 1.16.2 documentation>[scipy.signal.periodogram, Parameters: nfft and detrend]{ref}
A proposed numerical check generates many independent records with the stated noise distribution, computes the estimates with fixed coefficients, and compares empirical complex covariance and power covariance separately with the formulas. A physical noise test additionally needs a characterized acquisition bandwidth and an assessment of time-sample correlation. Averaging several correlated spectral values does not supply the same precision gain as averaging independent records.
Back to article page