{ "nbformat_minor": 0, "nbformat": 4, "cells": [ { "execution_count": null, "cell_type": "code", "source": [ "%matplotlib inline" ], "outputs": [], "metadata": { "collapsed": false } }, { "source": [ "\n# Compute real-time power spectrum density with FieldTrip client\n\n\nPlease refer to `ftclient_rt_average.py` for instructions on\nhow to get the FieldTrip connector working in MNE-Python.\n\nThis example demonstrates how to use it for continuous\ncomputation of power spectra in real-time using the\nget_data_as_epoch function.\n\n\n" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "# Author: Mainak Jas \n#\n# License: BSD (3-clause)\n\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nimport mne\nfrom mne.realtime import FieldTripClient\nfrom mne.time_frequency import psd_welch\n\nprint(__doc__)\n\n# user must provide list of bad channels because\n# FieldTrip header object does not provide that\nbads = ['MEG 2443', 'EEG 053']\n\nfig, ax = plt.subplots(1)\nwith FieldTripClient(host='localhost', port=1972,\n tmax=150, wait_max=10) as rt_client:\n\n # get measurement info guessed by MNE-Python\n raw_info = rt_client.get_measurement_info()\n\n # select gradiometers\n picks = mne.pick_types(raw_info, meg='grad', eeg=False, eog=True,\n stim=False, include=[], exclude=bads)\n\n n_fft = 256 # the FFT size. Ideally a power of 2\n n_samples = 2048 # time window on which to compute FFT\n for ii in range(20):\n epoch = rt_client.get_data_as_epoch(n_samples=n_samples, picks=picks)\n psd, freqs = psd_welch(epoch, fmin=2, fmax=200, n_fft=n_fft)\n\n cmap = 'RdBu_r'\n freq_mask = freqs < 150\n freqs = freqs[freq_mask]\n log_psd = 10 * np.log10(psd[0])\n\n tmin = epoch.events[0][0] / raw_info['sfreq']\n tmax = (epoch.events[0][0] + n_samples) / raw_info['sfreq']\n\n if ii == 0:\n im = ax.imshow(log_psd[:, freq_mask].T, aspect='auto',\n origin='lower', cmap=cmap)\n\n ax.set_yticks(np.arange(0, len(freqs), 10))\n ax.set_yticklabels(freqs[::10].round(1))\n ax.set_xlabel('Frequency (Hz)')\n ax.set_xticks(np.arange(0, len(picks), 30))\n ax.set_xticklabels(picks[::30])\n ax.set_xlabel('MEG channel index')\n im.set_clim()\n else:\n im.set_data(log_psd[:, freq_mask].T)\n\n plt.title('continuous power spectrum (t = %0.2f sec to %0.2f sec)'\n % (tmin, tmax), fontsize=10)\n\n plt.pause(0.5)\nplt.close()" ], "outputs": [], "metadata": { "collapsed": false } } ], "metadata": { "kernelspec": { "display_name": "Python 2", "name": "python2", "language": "python" }, "language_info": { "mimetype": "text/x-python", "nbconvert_exporter": "python", "name": "python", "file_extension": ".py", "version": "2.7.13", "pygments_lexer": "ipython2", "codemirror_mode": { "version": 2, "name": "ipython" } } } }