specgram bug

If you're using pyplot.specgram (i.e. "from pylab import *;
specgram(...)"), note that the plot is in dB, hence the negative
I'm surprised this fact isn't mentioned in the documentation:

However, when in doubt, look at the code.


On Mon, Nov 12, 2012 at 12:28 PM, Paul Anton Letnes <paul.anton.letnes@...287...> wrote:


that's funny. Now then, why do my plots come out with negative values all over the place? That's why I started digging around. After all, X * conj(X) should be equal to the absolute square of X, right?


On 12. nov. 2012, at 21:00, G Jones wrote:

If you trace back into the code further, you will see that the Pxx is
computed as X = fft(x), Pxx = X * conj(X) which is real, but the data
type will be complex with a ~0 imaginary part (up to floating point
precision). Thus the Pxx.real is just to ensure that the resulting
data type is real instead of complex to save memory.

On Mon, Nov 12, 2012 at 11:42 AM, Paul Anton Letnes >> <paul.anton.letnes@...287...> wrote:


not 100% sure this is a bug, but here goes:

In file matplotlib/lib/matplotlib/mlab.py, the functions psd (power spectral density) and specgram returns the real part of the fourier transform.
% grep -n Pxx.real mlab.py
390: return Pxx.real,freqs
470: Pxx = Pxx.real #Needed since helper implements generically
(git version 4f902fac1c5bf267e3fdeb4c2045926d7498e85a, cloned from github today)

This all means that the specgram plot routine yields the real part of the Fourier transform, rather than its absolute square (forgetting normalization for simplicity of discussion). The definition of the PSD is that it is the absolute square of the Fourier transform:

Hence, I believe this is a bug which should be fixed.

Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
Matplotlib-users mailing list