Because used fft accepts only power of 2 sizes.
Well, this is clear to me - but what size do you use? My use of the term 'window' may be unclear in this context: I meant the window size for the fft, i.e. how many samples are used in one fft run? I take from your code that the window size is two times the output windows width (? ... rounded to ...?). ... I already tried scaling the frequency axis with 2^n, i.e. 4096 Hz or 8192 Hz, by that did not help. I think there is something basically wrong with the scaling of the frequency axis if you use log. Furthermore, the value that you supply for parameter 'stop' seems to be divided by roughly 2 (?).
There is code already for more advanced fft but it is not optimized, and thus not yet used.
To my knowledge, all such calculations use fft, i.e. 2^n window sizes, mostly with about 50% overlap (as you also do for most windows in your code). Wolfgang Hugemann