The Nyquist always exists, but with normal complex FFT, it's the last bin -- in its proper place. The "Nyquist" frequency is simply the highest possible frequency for your sample rate -- i.e half your sample rate. Such a waveform is constructed by alternating two sample points in oscillation; you can't go "faster" than this (because of your sampling rate). But, with normal complex FFT, it does have imaginary component, because the input is complex too. Even the DC has an imaginary component (which corresponds to the DC of the imaginary input). The reason it's stored weirdly with the real fft is again, because there's "no space" in the buffer otherwise. If the input is real, then both the DC and Nyquist have imaginary component set to 0, so it's not stored, so Nyquist's real value (only value that is stored) was placed where the DC had its imaginary component. As for your question about setting the DC to zero, yes I agree. I don't understand that code either. If you want to get rid of DC just set it to zero, but IMHO if you do "spectral processing" (on arbitrary input), you should treat DC properly for its magnitude (no phase though), with low overlap it may make a difference. You can set Nyquist to 0 if you don't want to bother processing it, it's probably inaudible, but I'm doing it "properly" because I'm a perfectionist. Anyway the Nyquist (last bin, highest frequency) being put in the first frequency's imaginary part is a "trick" used by real fft, it doesn't actually make any mathematical sense. So don't think too hard about it. :D (because mathematically, FFT is a complex-input, complex-output process, so real FFT itself is a 'trick')