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 0d0bf8cc34372872497a65cbee20fea3c89132cd Author: Alexandre Gramfort <[email protected]> Date: Wed Aug 1 18:15:16 2012 +0200 ENH : new stft_norm2 to compute stft norm taking into account negative freqs --- mne/time_frequency/stft.py | 22 ++++++++++++++++++++++ mne/time_frequency/tests/test_stft.py | 9 +++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/mne/time_frequency/stft.py b/mne/time_frequency/stft.py index 4b9c949..917a0d2 100644 --- a/mne/time_frequency/stft.py +++ b/mne/time_frequency/stft.py @@ -201,3 +201,25 @@ def stftfreq(wsize, sfreq=None): if sfreq is not None: freqs *= float(sfreq) return freqs + + +def stft_norm2(X): + """Compute L2 norm of STFT transform + + It takes into account that stft only return positive frequencies. + As we use tight frame this quantity is conserved by the stft. + + Parameters + ---------- + X : 3D complex array + The STFT transforms + + Returns + ------- + norms2 : array + The squared L2 norm of every raw of X. + """ + X2 = np.abs(X) ** 2 + # compute all L2 coefs and remove freq zero once. + norms2 = (2. * X2.sum(axis=2).sum(axis=1) - np.sum(X2[:, 0, :], axis=1)) + return norms2 diff --git a/mne/time_frequency/tests/test_stft.py b/mne/time_frequency/tests/test_stft.py index 11d08f3..42b3c08 100644 --- a/mne/time_frequency/tests/test_stft.py +++ b/mne/time_frequency/tests/test_stft.py @@ -3,7 +3,7 @@ from scipy import linalg from numpy.testing import assert_almost_equal, assert_array_almost_equal from nose.tools import assert_true -from ..stft import stft, istft, stftfreq +from ..stft import stft, istft, stftfreq, stft_norm2 def test_stft(): @@ -29,12 +29,9 @@ def test_stft(): assert_array_almost_equal(x, xp, decimal=6) - # Symmetrize X to get also negative frequencies to guarantee # norm conservation thanks to tight frame property - X = np.concatenate([X[:, 1:, :][:, ::-1, :], X], axis=1) - - assert_almost_equal(linalg.norm(X.ravel()), linalg.norm(x.ravel()), - decimal=2) + assert_almost_equal(np.sqrt(stft_norm2(X)), + map(linalg.norm, x), decimal=2) # Try with empty array x = np.zeros((0, T)) -- 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
