FFT Data Normalization (FFTW)

Using FFTW, I calculated the FFT of the normalized data of the .wav file. However, I am a bit confused as to how I should normalize the output of the FFT. I used a method that seemed obvious to me, which simply divides the highest FFT value. However, I saw the division by 1 / N and N / 2 (where I assume N = FFT size). How do they work as normalization factors? It seems to me that there is no intuitive relationship between these factors and actual data - so what am I missing?

Thank you so much for any help with this.

+4
source share
2 answers

Unexpectedly, there is no single consistent definition for FFT and IFFT, at least with respect to scaling, but for most implementations (including FFTW) you need to scale 1 / N in the forward direction, and there is no scaling in the opposite direction.

Usually (for performance reasons) you will want to combine this scaling factor with any other corrections, such as A / D gain, window coefficient correction factor, etc., so that you only have one combined scaling factor to apply to your FFT outputs . Alternatively, if you simply generate, say, a power spectrum in dB, you can make a correction of one dB, which you subtract from your power spectrum blocks.

+5
source

It is often useful for FFTs to refer to the Paraseval theorem and other comparisons that require significant magnitude. In addition, the height of any single peak is not very useful and depends, for example, on the window used in calculating the FFT, since this can shorten and expand the peak. For this reason, I would recommend not normalizing the largest peak, since you lose any convenient connection with significant values ​​and easily compare between data sets, etc.

+3
source

Source: https://habr.com/ru/post/1337851/


All Articles