NeuroAnalyzer tutorials: ERPs

ERP is created from epoched NeuroAnalyzer.NEURO object via erp() command. ERP object has OBJ.header.recording[:data_type] set to “erp”. First epoch of the OBJ is ERP, other epochs are the original data.

eeg = import_recording("NEURO-testing-data/Brainvision/s1_faces.vhdr")

Output:

[ Info: Imported: < EEG, 34 × 424488 × 1 (829.078125 s) > 

Pre-process:

load_locs!(eeg, file_name="locs/standard-10-20-cap81.locs")
NeuroAnalyzer.filter!(eeg, fprototype=:butterworth, ftype=:hp, cutoff=1, order=8)
NeuroAnalyzer.filter!(eeg, fprototype=:iirnotch, cutoff=50, bw=2)
reference_car!(eeg)
view_marker(eeg)

Output:

n    ID                      start [s]   length [s]  description             channel
1    'New Segment'           0.0         0.0         'marker'                0
2    'Marker'                0.0         0.0         'Impedance'             0
3    'Stimulus'              20.562      0.0         's111'                  0
4    'Stimulus'              20.98       0.0         's130'                  0
5    'Stimulus'              21.826      0.0         's71'                   0
    ...
400  'Stimulus'              799.207     0.0         's130'                  0
401  'Stimulus'              799.986     0.0         's71'                   0
402  'Stimulus'              803.119     0.0         's130'                  0
403  'Stimulus'              803.65      0.0         's71'                   0
404  'Stimulus'              806.529     0.0         's121'                  0
405  'Stimulus'              806.574     0.0         's122'                  0
406  'Stimulus'              806.619     0.0         's102'                  0

Epoch by marker “s71”:

eeg_epoched = epoch(eeg, marker="s71", offset=0.5, ep_len=2.5)
p = plot(eeg_epoched)

Create ERP, set baseline:

erp_s71 = erp(eeg_epoched, bl=0.5)
p = plot_erp(erp_s71, ch=10)
plot_save(p, file_name="images/erp1.png")

Output:

[ Info: Positive peak time: 143.0 ms
[ Info: Positive peak amplitude: 5.15 μV
[ Info: Negative peak time: 234.0 ms
[ Info: Negative peak amplitude: -8.82 μV

Butterfly plot over channels:

p = plot_erp(erp_s71, ch=1:4, type=:butterfly, avg=true)
plot_save(p, file_name="images/erp2.png")

Butterfly plot over epochs:

p = plot_erp(erp_s71, ch=1, type=:butterfly, avg=true)
plot_save(p, file_name="images/erp3.png")

Mean plot over channels:

p = plot_erp(erp_s71, ch=1:30, type=:mean, peaks=false)
plot_save(p, file_name="images/erp4.png")

Mean plot over epochs:

p = plot_erp(erp_s71, ch=1, type=:mean, peaks=false)
plot_save(p, file_name="images/erp5.png")

Topographical plot of ERPs:

p = plot_erp(erp_s71, ch=1:30, type=:topo)
plot_save(p, file_name="images/erp6.png")

Positive peak is at 143 ms, negative peak at 234 ms (see plot_erp() output). Draw markers and topoplots at these time points:

load_locs!(erp_s71, file_name="locs/standard-10-20-cap81.locs")
p1 = plot_erp(erp_s71, ch=signal_channels(erp_s71), type=:butterfly, labels=false, tm=[143, 234], title="", top_margin=-20Plots.px, channel_labels=false)
p2 = plot_topo(erp_s71, ch=signal_channels(erp_s71), seg=(0.143, 0.144), cb=false, title="143 ms", plot_size=600)
p3 = plot_topo(erp_s71, ch=signal_channels(erp_s71), seg=(0.234, 0.235), cb=false, title="234 ms", plot_size=600)
p = plot_compose([p2, p3, p1], layout=@layout [_ a b _ _ _; c])
plot_save(p, file_name=file_name="images/erp7.png")

Plot stacked channels:

p = plot_erp(erp_s71, ch=signal_channels(erp_s71), type=:stack)
plot_save(p, file_name=file_name="images/erp8.png")

Plot stacked epochs:

p = plot_erp(erp_s71, ch=10, type=:stack, tm=[143, 234])
plot_save(p, file_name=file_name="images/erp9.png")

Calculate amplitude at given time point:

amp_at(erp_s71, t=0.250)

Calculate average, minimum and maximum amplitude over a time segment:

avgamp_at(erp_s71, t=(0.150, 0.250))
minamp_at(erp_s71, t=(0.150, 0.250))
maxamp_at(erp_s71, t=(0.150, 0.250))

Calculate non-phase-locked signal (signal - ERP):

erp_s71_npl = npl(erp_s71)

Calculate EROs (Event-Related Oscillations) spectrogram:

s, f, t = eros(erp_s71, ch=10, frq_lim=(0, 40))
p = plot_eros(s, f, t, tm=[143, 234])
plot_save(p, file_name=file_name="images/eros.png")

Calculate EROp (Event-Related Oscillations) power-spectrum:

p, f = erop(erp_s71, ch=10, frq_lim=(0, 40))
p = plot_erop(p, f)
plot_save(p, file_name=file_name="images/erop.png")