This is an automated email from the git hooks/post-receive script. yoh pushed a commit to tag 0.4 in repository python-mne.
commit 37256a2800fe6fe5d4ea9937476da9da0421b7cf Author: Alexandre Gramfort <[email protected]> Date: Thu Jul 12 20:13:24 2012 +0200 ENH : pass sfreq to stftfreq --- mne/time_frequency/stft.py | 11 +++++++++-- mne/time_frequency/tests/test_stft.py | 11 ++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/mne/time_frequency/stft.py b/mne/time_frequency/stft.py index 15b72cf..65ad646 100644 --- a/mne/time_frequency/stft.py +++ b/mne/time_frequency/stft.py @@ -37,6 +37,9 @@ def stft(x, wsize, tstep=None, verbose=True): istft stftfreq """ + if not np.isrealobj(x): + raise ValueError("x is not a real valued array") + if x.ndim == 1: x = x[None, :] @@ -86,7 +89,7 @@ def stft(x, wsize, tstep=None, verbose=True): for t in range(n_step): # Framing wwin = win / swin[t * tstep: t * tstep + wsize] - frame = np.conj(x[:, t * tstep: t * tstep + wsize]) * wwin[None, :] + frame = x[:, t * tstep: t * tstep + wsize] * wwin[None, :] # FFT fframe = fft(frame) X[:, :, t] = fframe[:, :n_freq] @@ -176,13 +179,15 @@ def istft(X, tstep=None, Tx=None): return x -def stftfreq(wsize): +def stftfreq(wsize, sfreq=None): """Frequencies of stft transformation Parameters ---------- wsize : int Size of stft window + sfreq : float + Sampling frequency. If None the frequencies are given in Hz. Returns ------- @@ -192,4 +197,6 @@ def stftfreq(wsize): n_freq = wsize / 2 + 1 freqs = fftfreq(wsize) freqs = np.abs(freqs[:n_freq]) + if sfreq is not None: + freqs *= float(sfreq) return freqs diff --git a/mne/time_frequency/tests/test_stft.py b/mne/time_frequency/tests/test_stft.py index 4f99933..11d08f3 100644 --- a/mne/time_frequency/tests/test_stft.py +++ b/mne/time_frequency/tests/test_stft.py @@ -8,19 +8,24 @@ from ..stft import stft, istft, stftfreq def test_stft(): "Test stft and istft tight frame property" + sfreq = 1000. # Hz + f = 7. # Hz for T in [253, 256]: # try with even and odd numbers - t = np.linspace(0, 20, T) - x = np.sin(30 * t) + t = np.arange(T).astype(np.float) + x = np.sin(2 * np.pi * f * t / sfreq) x = np.array([x, x + 1.]) wsize = 128 tstep = 4 X = stft(x, wsize, tstep) xp = istft(X, tstep, Tx=T) - freqs = stftfreq(wsize) + freqs = stftfreq(wsize, sfreq=1000) + + max_freq = freqs[np.argmax(np.sum(np.abs(X[0]) ** 2, axis=1))] assert_true(X.shape[1] == len(freqs)) assert_true(np.all(freqs >= 0.)) + assert_true(np.abs(max_freq - f) < 1.) assert_array_almost_equal(x, xp, decimal=6) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
