[med-svn] [python-mne] 316/353: FIX: fir->iir, time index bug

Yaroslav Halchenko debian at onerussian.com
Fri Nov 27 17:25:23 UTC 2015


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 e420093f825f84e57dbceef263610a8c3c321a0b
Author: Martin Luessi <mluessi at nmr.mgh.harvard.edu>
Date:   Fri Jul 27 15:32:33 2012 -0400

    FIX: fir->iir, time index bug
---
 examples/plot_simulate_evoked_data.py |  6 +++---
 mne/simulation/evoked.py              | 14 +++++++-------
 mne/time_frequency/__init__.py        |  2 +-
 mne/time_frequency/ar.py              | 27 +++++++++++++++++++--------
 4 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/examples/plot_simulate_evoked_data.py b/examples/plot_simulate_evoked_data.py
index e3d2506..4ba2fc4 100644
--- a/examples/plot_simulate_evoked_data.py
+++ b/examples/plot_simulate_evoked_data.py
@@ -15,7 +15,7 @@ import pylab as pl
 import mne
 from mne.fiff.pick import pick_types_evoked, pick_types_forward
 from mne.datasets import sample
-from mne.time_frequency import fir_filter_raw, morlet
+from mne.time_frequency import iir_filter_raw, morlet
 from mne.viz import plot_evoked, plot_sparse_source_estimates
 from mne.simulation import generate_sparse_stc, generate_evoked
 
@@ -69,9 +69,9 @@ stc = generate_sparse_stc(fwd['src'], labels, stc_data, tmin, tstep,
 ###############################################################################
 # Generate noisy evoked data
 picks = mne.fiff.pick_types(raw.info, meg=True)
-fir_filter = fir_filter_raw(raw, order=5, picks=picks, tmin=60, tmax=180)
+iir_filter = iir_filter_raw(raw, order=5, picks=picks, tmin=60, tmax=180)
 evoked = generate_evoked(fwd, stc, evoked_template, cov, snr,
-                         tmin=0.0, tmax=0.2, fir_filter=fir_filter)
+                         tmin=0.0, tmax=0.2, iir_filter=iir_filter)
 
 ###############################################################################
 # Plot
diff --git a/mne/simulation/evoked.py b/mne/simulation/evoked.py
index 348bcfe..db4a15c 100644
--- a/mne/simulation/evoked.py
+++ b/mne/simulation/evoked.py
@@ -14,7 +14,7 @@ from ..forward import apply_forward
 
 
 def generate_evoked(fwd, stc, evoked, cov, snr=3, tmin=None, tmax=None,
-                    fir_filter=None, random_state=None):
+                    iir_filter=None, random_state=None):
     """Generate noisy evoked data
 
     Parameters
@@ -36,8 +36,8 @@ def generate_evoked(fwd, stc, evoked, cov, snr=3, tmin=None, tmax=None,
     tmax : float
         start of time interval to estimate SNR. If None last time point
         is used.
-    fir_filter : None | array
-        FIR filter coefficients e.g. [1, -1, 0.2]
+    iir_filter : None | array
+        IIR filter coefficients (denominator) e.g. [1, -1, 0.2]
     random_state : None | int | np.random.RandomState
         To specify the random generator state.
 
@@ -52,7 +52,7 @@ def generate_evoked(fwd, stc, evoked, cov, snr=3, tmin=None, tmax=None,
     return evoked_noise
 
 
-def generate_noise_evoked(evoked, noise_cov, fir_filter=None,
+def generate_noise_evoked(evoked, noise_cov, iir_filter=None,
                           random_state=None):
     """Creates noise as a multivariate Gaussian
 
@@ -64,8 +64,8 @@ def generate_noise_evoked(evoked, noise_cov, fir_filter=None,
         an instance of evoked used as template
     cov : Covariance object
         The noise covariance
-    fir_filter : None | array
-        FIR filter coefficients
+    iir_filter : None | array
+        IIR filter coefficients (denominator)
     random_state : None | int | np.random.RandomState
         To specify the random generator state.
 
@@ -82,7 +82,7 @@ def generate_noise_evoked(evoked, noise_cov, fir_filter=None,
     noise.data = rng.multivariate_normal(n_channels, noise_cov.data,
                                          n_samples).T
     if fir_filter is not None:
-        noise.data = signal.lfilter([1], fir_filter, noise.data, axis=-1)
+        noise.data = signal.lfilter([1], iir_filter, noise.data, axis=-1)
     return noise
 
 
diff --git a/mne/time_frequency/__init__.py b/mne/time_frequency/__init__.py
index cee6d90..10494a1 100644
--- a/mne/time_frequency/__init__.py
+++ b/mne/time_frequency/__init__.py
@@ -3,4 +3,4 @@
 
 from .tfr import induced_power, single_trial_power, morlet
 from .psd import compute_raw_psd
-from .ar import yule_walker, ar_raw, fir_filter_raw
+from .ar import yule_walker, ar_raw, iir_filter_raw
diff --git a/mne/time_frequency/ar.py b/mne/time_frequency/ar.py
index 17e7a5a..b495959 100644
--- a/mne/time_frequency/ar.py
+++ b/mne/time_frequency/ar.py
@@ -101,8 +101,12 @@ def ar_raw(raw, order, picks, tmin=None, tmax=None):
     coefs : array
         Sets of coefficients for each channel
     """
-    start, stop = raw.time_to_index(tmin, tmax)
-    data, times = raw[picks, start:(stop + 1)]
+    start, stop = None, None
+    if tmin is not None:
+        start = raw.time_to_index(tmin)[0]
+    if tmax is not None:
+        stop = raw.time_to_index(tmax)[0] + 1
+    data, times = raw[picks, start:stop]
 
     coefs = np.empty((len(data), order))
     for k, d in enumerate(data):
@@ -111,10 +115,17 @@ def ar_raw(raw, order, picks, tmin=None, tmax=None):
     return coefs
 
 
-def fir_filter_raw(raw, order, picks, tmin=None, tmax=None):
-    """Fits an AR model to raw data and creates corresponding FIR filter
+def iir_filter_raw(raw, order, picks, tmin=None, tmax=None):
+    """Fits an AR model to raw data and creates the corresponding IIR filter
 
-    The returned filter is the average filter for all the picked channels.
+    The computed filter is the average filter for all the picked channels.
+    The returned filter coefficents are the denominator of the filter
+    (the numerator is 1). The frequency response is given by
+
+        jw   1
+     H(e) = --------------------------------
+                        -jw             -jnw
+            a[0] + a[1]e    + ... + a[n]e
 
     Parameters
     ----------
@@ -131,11 +142,11 @@ def fir_filter_raw(raw, order, picks, tmin=None, tmax=None):
 
     Returns
     -------
-    fir : array
+    a : array
         filter coefficients
     """
     picks = picks[:5]
     coefs = ar_raw(raw, order=order, picks=picks, tmin=tmin, tmax=tmax)
     mean_coefs = np.mean(coefs, axis=0)  # mean model accross channels
-    fir = np.r_[1, -mean_coefs]  # filter coefficient
-    return fir
+    a = np.r_[1, -mean_coefs]  # filter coefficients
+    return a

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git



More information about the debian-med-commit mailing list