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 <[email protected]> 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 _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
