Can anyone explain the rationale behind the FFT normalization done in DSP.jl, for instance in the `periodogram`

function ?

Here below is the concerned code of the `fft2pow!`

function, which computes the power spectra.

I am concerned on the one-sided spectrum. In the code, the power spectrum is normalized by `m1`

for the first frequency bin, by `m2`

for bins `2:n-1`

and by `m1`

or `m2`

for the last bin depending on whether the size of the window is even or odd:

function fft2pow!(out::Array{T}, s_fft::Vector{Complex{T}}, nfft::Int, r::Real, onesided::Bool, offset::Int=0) where T

m1 = convert(T, 1/r)

n = length(s_fft)

if onesided

m2 = convert(T, 2/r)

out[offset+1] += abs2(s_fft[1])*m1

for i = 2:n-1

@inbounds out[offset+i] += abs2(s_fft[i])*m2

end

out[offset+n] += abs2(s_fft[end])*ifelse(iseven(nfft), m1, m2)

else

…

Looking at the call of `fft2pow!`

in the `periodogram`

function at line 275 of unit `periodograms.jl`

it seems to me that `r`

here above is passed as `fs*norm2`

, where `fs`

is the sampling rate and `norm2`

is `sum(abs2, window)`

, where `window`

is the taper.

I don’t see the interest in taking into account the sampling rate in the normalization of the power spectra. This leads to undesirable behavior. For example, I computed the power spectra for a pure sine wave at an exact discrete Fourier frequency (using a rectangular window) two times, changing only the sampling rate and i obtained different powers at the only non-zero frequency bin.