|
From: <ry...@us...> - 2010-11-17 04:13:37
|
Revision: 8803
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8803&view=rev
Author: ryanmay
Date: 2010-11-17 04:13:31 +0000 (Wed, 17 Nov 2010)
Log Message:
-----------
Some cosmetic changes to _spectral_helper(). Biggest change is to update the documentation to indicate that NFFT should *not* be used for zero padding, otherwise scaling will be incorrect.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/mlab.py
Modified: trunk/matplotlib/lib/matplotlib/mlab.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/mlab.py 2010-11-15 10:40:58 UTC (rev 8802)
+++ trunk/matplotlib/lib/matplotlib/mlab.py 2010-11-17 04:13:31 UTC (rev 8803)
@@ -245,12 +245,6 @@
raise ValueError("sides must be one of: 'default', 'onesided', or "
"'twosided'")
- # MATLAB divides by the sampling frequency so that density function
- # has units of dB/Hz and can be integrated by the plotted frequency
- # values. Perform the same scaling here.
- if scale_by_freq:
- scaling_factor /= Fs
-
if cbook.iterable(window):
assert(len(window) == NFFT)
windowVals = window
@@ -260,7 +254,7 @@
step = NFFT - noverlap
ind = np.arange(0, len(x) - NFFT + 1, step)
n = len(ind)
- Pxy = np.zeros((numFreqs,n), np.complex_)
+ Pxy = np.zeros((numFreqs, n), np.complex_)
# do the ffts of the slices
for i in range(n):
@@ -278,16 +272,18 @@
# Scale the spectrum by the norm of the window to compensate for
# windowing loss; see Bendat & Piersol Sec 11.5.2.
- Pxy *= 1 / (np.abs(windowVals)**2).sum()
+ Pxy /= (np.abs(windowVals)**2).sum()
# Also include scaling factors for one-sided densities and dividing by the
# sampling frequency, if desired. Scale everything, except the DC component
# and the NFFT/2 component:
Pxy[1:-1] *= scaling_factor
- #But do scale those components by Fs, if required
+ # MATLAB divides by the sampling frequency so that density function
+ # has units of dB/Hz and can be integrated by the plotted frequency
+ # values. Perform the same scaling here.
if scale_by_freq:
- Pxy[[0,-1]] /= Fs
+ Pxy /= Fs
t = 1./Fs * (ind + NFFT / 2.)
freqs = float(Fs) / pad_to * np.arange(numFreqs)
@@ -306,6 +302,8 @@
*NFFT*: integer
The number of data points used in each block for the FFT.
Must be even; a power 2 is most efficient. The default value is 256.
+ This should *NOT* be used to get zero padding, or the scaling of the
+ result will be incorrect. Use *pad_to* for this instead.
*Fs*: scalar
The sampling frequency (samples per time unit). It is used
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|