From 70551ecb3f9facae23a847dab302c9fc86f99952 Mon Sep 17 00:00:00 2001 From: Dietrich Brunn Date: Mon, 16 Jan 2017 21:19:53 +0100 Subject: [PATCH 1/3] Fixed bug with default parameters NFFT and noverlap ins specgram() --- lib/matplotlib/axes/_axes.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 056d34572c6e..c4dfa598eee2 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -7234,6 +7234,11 @@ def specgram(self, x, NFFT=None, Fs=None, Fc=None, detrend=None, Z = np.flipud(Z) if xextent is None: + # define default values: + if noverlap is None: + noverlap = 128 # defined in mlab.specgram + if NFFT is None: + NFFT = 256 # defined in mlab._spectral_helper # padding is needed for first and last segment: pad_xextent = (NFFT-noverlap) / Fs / 2 xextent = np.min(t) - pad_xextent, np.max(t) + pad_xextent From 0141f27ce3f2ec24c60205b63aa63fd64bf2608b Mon Sep 17 00:00:00 2001 From: Dietrich Brunn Date: Mon, 16 Jan 2017 22:22:03 +0100 Subject: [PATCH 2/3] Added warning to mlab.specgram() to fix Bug #6064 --- lib/matplotlib/mlab.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/matplotlib/mlab.py b/lib/matplotlib/mlab.py index b44e02dda961..37f606431077 100644 --- a/lib/matplotlib/mlab.py +++ b/lib/matplotlib/mlab.py @@ -1274,6 +1274,9 @@ def specgram(x, NFFT=None, Fs=None, detrend=None, window=None, """ if noverlap is None: noverlap = 128 + if len(x) <= (256 if NFFT is None else NFFT): # see _spectral_helper() + warnings.warn("Only one segment is calculated since parameter NFFT " + + "(=%d) >= signal length (=%d)." % (NFFT, len(x))) spec, freqs, t = _spectral_helper(x=x, y=None, NFFT=NFFT, Fs=Fs, detrend_func=detrend, window=window, From 37481ad842cf46317e18ef0d0deae834fd4af890 Mon Sep 17 00:00:00 2001 From: Dietrich Brunn Date: Mon, 16 Jan 2017 23:52:20 +0100 Subject: [PATCH 3/3] Set defaults for NFFT and noverlap function wide in _axes.specgram() and mlab.specgram(). --- lib/matplotlib/axes/_axes.py | 11 +++++------ lib/matplotlib/mlab.py | 6 ++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index c4dfa598eee2..24ddc3c941f0 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -7200,8 +7200,12 @@ def specgram(self, x, NFFT=None, Fs=None, Fc=None, detrend=None, if not self._hold: self.cla() + if NFFT is None: + NFFT = 256 # same default as in mlab.specgram() if Fc is None: - Fc = 0 + Fc = 0 # same default as in mlab._spectral_helper() + if noverlap is None: + noverlap = 128 # same default as in mlab.specgram() if mode == 'complex': raise ValueError('Cannot plot a complex specgram') @@ -7234,11 +7238,6 @@ def specgram(self, x, NFFT=None, Fs=None, Fc=None, detrend=None, Z = np.flipud(Z) if xextent is None: - # define default values: - if noverlap is None: - noverlap = 128 # defined in mlab.specgram - if NFFT is None: - NFFT = 256 # defined in mlab._spectral_helper # padding is needed for first and last segment: pad_xextent = (NFFT-noverlap) / Fs / 2 xextent = np.min(t) - pad_xextent, np.max(t) + pad_xextent diff --git a/lib/matplotlib/mlab.py b/lib/matplotlib/mlab.py index 37f606431077..69742b2a2aa1 100644 --- a/lib/matplotlib/mlab.py +++ b/lib/matplotlib/mlab.py @@ -1273,8 +1273,10 @@ def specgram(x, NFFT=None, Fs=None, detrend=None, window=None, """ if noverlap is None: - noverlap = 128 - if len(x) <= (256 if NFFT is None else NFFT): # see _spectral_helper() + noverlap = 128 # default in _spectral_helper() is noverlap = 0 + if NFFT is None: + NFFT = 256 # same default as in _spectral_helper() + if len(x) <= NFFT: warnings.warn("Only one segment is calculated since parameter NFFT " + "(=%d) >= signal length (=%d)." % (NFFT, len(x)))