本文整理汇总了Python中wyrm.types.Data.stimulus_code方法的典型用法代码示例。如果您正苦于以下问题:Python Data.stimulus_code方法的具体用法?Python Data.stimulus_code怎么用?Python Data.stimulus_code使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wyrm.types.Data
的用法示例。
在下文中一共展示了Data.stimulus_code方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: load_bcicomp3_ds2
# 需要导入模块: from wyrm.types import Data [as 别名]
# 或者: from wyrm.types.Data import stimulus_code [as 别名]
def load_bcicomp3_ds2(filename):
"""Load the BCI Competition III Data Set 2.
This method loads the data set and converts it into Wyrm's ``Data``
format. Before you use it, you have to download the data set in
Matlab format and unpack it. The directory with the extracted files
must contain the ``Subject_*.mat``- and the ``eloc64.txt`` files.
.. note::
If you need the true labels of the test sets, you'll have to
download them separately from
http://bbci.de/competition/iii/results/index.html#labels
Parameters
----------
filename : str
The path to the matlab file to load
Returns
-------
cnt : continuous `Data` object
Examples
--------
>>> dat = load_bcicomp3_ds2('/home/foo/data/Subject_A_Train.mat')
"""
STIMULUS_CODE = {
# cols from left to right
1 : "agmsy5",
2 : "bhntz6",
3 : "ciou17",
4 : "djpv28",
5 : "ekqw39",
6 : "flrx4_",
# rows from top to bottom
7 : "abcdef",
8 : "ghijkl",
9 : "mnopqr",
10: "stuvwx",
11: "yz1234",
12: "56789_"
}
# load the matlab data
data_mat = loadmat(filename)
# load the channel names (the same for all datasets
eloc_file = path.sep.join([path.dirname(filename), 'eloc64.txt'])
with open(eloc_file) as fh:
data = fh.read()
channels = []
for line in data.splitlines():
if line:
chan = line.split()[-1]
chan = chan.replace('.', '')
channels.append(chan)
# fix the channel names, some letters have the wrong capitalization
for i, s in enumerate(channels):
s2 = s.upper()
s2 = s2.replace('Z', 'z')
s2 = s2.replace('FP', 'Fp')
channels[i] = s2
# The signal is recorded with 64 channels, bandpass filtered
# 0.1-60Hz and digitized at 240Hz. The format is Character Epoch x
# Samples x Channels
data = data_mat['Signal']
data = data.astype('double')
# For each sample: 1 if a row/colum was flashed, 0 otherwise
flashing = data_mat['Flashing'].reshape(-1)
#flashing = np.flatnonzero((np.diff(a) == 1)) + 1
tmp = []
for i, _ in enumerate(flashing):
if i == 0:
tmp.append(flashing[i])
continue
if flashing[i] == flashing[i-1] == 1:
tmp.append(0)
continue
tmp.append(flashing[i])
flashing = np.array(tmp)
# For each sample: 0 when no row/colum was intensified,
# 1..6 for intensified columns, 7..12 for intensified rows
stimulus_code = data_mat['StimulusCode'].reshape(-1)
stimulus_code = stimulus_code[flashing == 1]
# 0 if no row/col was intensified or the intensified did not contain
# the target character, 1 otherwise
stimulus_type = data_mat.get('StimulusType', np.array([])).reshape(-1)
# The target characters
target_chars = data_mat.get('TargetChar', np.array([])).reshape(-1)
fs = 240
data = data.reshape(-1, 64)
timeaxis = np.linspace(0, data.shape[0] / fs * 1000, data.shape[0], endpoint=False)
dat = Data(data=data, axes=[timeaxis, channels], names=['time', 'channel'], units=['ms', '#'])
dat.fs = fs
# preparing the markers
target_mask = np.logical_and((flashing == 1), (stimulus_type == 1)) if len(stimulus_type) > 0 else []
nontarget_mask = np.logical_and((flashing == 1), (stimulus_type == 0)) if len(stimulus_type) > 0 else []
#.........这里部分代码省略.........