{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n\n# Temporal whitening with AR model\n\nHere we fit an AR model to the data and use it\nto temporally whiten the signals.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Authors: Alexandre Gramfort \n#\n# License: BSD-3-Clause\n# Copyright the MNE-Python contributors." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\nimport numpy as np\nfrom scipy import signal\n\nimport mne\nfrom mne.datasets import sample\nfrom mne.time_frequency import fit_iir_model_raw\n\nprint(__doc__)\n\ndata_path = sample.data_path()\nmeg_path = data_path / \"MEG\" / \"sample\"\nraw_fname = meg_path / \"sample_audvis_raw.fif\"\nproj_fname = meg_path / \"sample_audvis_ecg-proj.fif\"\n\nraw = mne.io.read_raw_fif(raw_fname)\nproj = mne.read_proj(proj_fname)\nraw.add_proj(proj)\nraw.info[\"bads\"] = [\"MEG 2443\", \"EEG 053\"] # mark bad channels\n\n# Set up pick list: Gradiometers - bad channels\npicks = mne.pick_types(raw.info, meg=\"grad\", exclude=\"bads\")\n\norder = 5 # define model order\npicks = picks[:1]\n\n# Estimate AR models on raw data\nb, a = fit_iir_model_raw(raw, order=order, picks=picks, tmin=60, tmax=180)\nd, times = raw[0, 10000:20000] # look at one channel from now on\nd = d.ravel() # make flat vector\ninnovation = signal.convolve(d, a, \"valid\")\nd_ = signal.lfilter(b, a, innovation) # regenerate the signal\nd_ = np.r_[d_[0] * np.ones(order), d_] # dummy samples to keep signal length" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the different time series and PSDs\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.close(\"all\")\nplt.figure()\nplt.plot(d[:100], label=\"signal\")\nplt.plot(d_[:100], label=\"regenerated signal\")\nplt.legend()\n\nplt.figure()\nplt.psd(d, Fs=raw.info[\"sfreq\"], NFFT=2048)\nplt.psd(innovation, Fs=raw.info[\"sfreq\"], NFFT=2048)\nplt.psd(d_, Fs=raw.info[\"sfreq\"], NFFT=2048, linestyle=\"--\")\nplt.legend((\"Signal\", \"Innovation\", \"Regenerated signal\"))\nplt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 0 }