# STFT Window Size is 2048, Why is the output 1025?

I feel like I am having a brainfart over here and can't seem to remember what's going on with STFT outputs.

Consider these two lines of code from the Python library Librosa:

# Window the time series.
y_frames = util.frame(y, frame_length=n_fft, hop_length=hop_length)

# Pre-allocate the STFT matrix
stft_matrix = np.empty((int(1 + n_fft // 2), y_frames.shape),
dtype=dtype,
order='F')


In the first line, we have a function that creates a matrix with a window length of n_fft (2048).

Then in the next line, we pre-allocate our STFT, but our window length is now 1025 instead of 1024 as dictated by the 1+n_fft // 2? Where does this extra frequency bin come from? Why is not just 1024?

The DC coefficient ($$F(0)$$) is real, as well as the Nyquist one ($$F(N/2)$$). In between, you get $$\frac{2048-2}{2}=1023$$ "complex" coefficients, "duplicated" in positive and negative frequencies.
So for real signal, each STFT frame can be represented by $$1023+2$$ frequency bins, the remaining 1023 being recovered by Hermitian symmetry.
As a result, we can see that if N is even, both $$F(0)$$ and $$F(N/2)$$ must be real. Given these two values and the complex values $$F(1)...F(N/2-1)$$, (I.E. N numbers in total) the sequence is completely characterised.