Lower frequencies stronger in FFT? I'm calculating FFT from microphone input. I notice that lower frequencies always seems to have more power (higher dB) than higher frequencies. 


I cut the data into frames of 24576 bytes (4096*6).
Apply Hamming window: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs));
Run it through FFTW Process1D().
Convert from complex numbers: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]));
Average out 6 values to get a complete FFT of 4096 bytes.
Paint pretty picture (colors mapped to a palette).


The averaging (pt. 5) is done to lower FFT noise.

As the image shows both with sound and with mic off there is more energy (and more noise) in the lower frequencies. This indicates its more than just a mic/sub problem.

My questions:
 1. Is this expected? Why?
 2. Any standard way of fixing this? Almost looks like some Math.Tan() magic could lift it up where it belongs.

My goal is to be able to identify the top 5 frequencies without lower frequencies winning by default.
Yes, this is very much expected. What you see is a "pink" spectrum, i.e. constant energy per relative bandwidth, as compared to "white" which is constant energy per absolute bandwidth. For pink signals the energy between 1-2kHz is the same as from 2-4kHz (each represents a doubling of bandwidth or an "octave". 

Most natural audio signals (Speech, music, movies, etc.) have a pink-like spectrum. Also most acoustic background noises (microphone noise, HVAC noise, air pressure fluctuations, generic background) tend to be pink or even more skewed towards lower frequencies.

The human auditory systems works that way, too. In the inner ear the audio signals are broken down into bands of constant relative bandwidth (called "Critical Bands") which are roughly the same as a third octave spectrum.

The best way to look at audio spectrum data is to plot it on a logarithmic frequency scale.