DocsAnalysis Suite
BCILattice Documentation

Analysis Suite

Every step in the BCILattice Analysis workspace: what it does, what it accepts, what it writes, and every method and setting available inside it.

v1.0BCINexus Platform · 2026-08-08[email protected]

About the Analysis Suite

Analysis is the module between Preprocessing and ML Suite. Preprocessing conditions the raw recording; the Analysis Suite turns that conditioned signal into the thing a decoder is actually trained on, one reviewable step at a time. Eleven steps run in it, grouped into two sections in the module sidebar: Prepare, which cleans the recording and cuts it into trials, and Reduce & Extract, which narrows those trials down to a labelled design matrix.

Nothing here is a black box and nothing here is destructive. Each step reads a named stage, writes a named stage, and records the parameters it ran with. Your original recording is never modified, and every intermediate result stays inspectable, exportable, and re-runnable.

#StepSectionWhat it is for
1ICA ReviewPrepareDecompose the recording into independent components, label the artifactual ones, reconstruct without them.
2Channel QualityPrepareScore every channel, flag dead or noisy sensors, drop the ones you confirm.
3EpochingPrepareCut the continuous recording into labelled trials around events, with baseline correction and rejection.
4NormalizationPrepareRescale the signal with a scaler fitted once over the whole recording.
5AugmentationPrepareSynthesise additional trials, with a report on what the synthesis did to the data.
6Activation MapsPrepare2D topographies and a 3D cortical surface rendered from epoched data. View-only.
7Time-FrequencyPrepareERSP / ITC decomposition with seven derived views over one cached computation.
8Channels SelectionReduce & ExtractRank and keep the channels that carry class information, by any of 20 criteria.
9Dimensionality ReducerReduce & ExtractProject the channel space onto fewer components, with variance and separability reporting.
10Feature ExtractionReduce & ExtractTurn trials into a named, ranked design matrix across five feature domains.
11Data ProjectionReduce & ExtractEncode a 1-D time course as a 2-D image for vision models.

View and Apply

Every step opens as two tabs. View is the interactive workspace: pick one file, set the parameters, run it, and read the result. Apply is the batch tab: take exactly the settings currently in View and run them across many files at once. The two produce identical outputs, because Apply calls the same code path with the same payload, not a parallel implementation.

The working habit the suite is built around is preview on one file, then batch the rest. Ten of the eleven steps have a working Apply tab; Activation Maps is view-only because it renders figures rather than writing a stage.

Each View tab has a left sidebar for inputs and settings and a right pane for results. Long results are tabbed rather than stacked, so a table and a figure never compete for the same vertical space.

Step Order & Reordering

The sidebar order shown above is the conventional BCI preparation order, but it is a default, not a constraint. The seven Prepare steps can be dragged into a different order and the app remembers it across restarts, which matters because there is no single correct sequence: some labs screen channels before ICA, others after; some normalise before epoching, others after.

Reordering is presentational only. Nothing about a step's identity, output name, or dependency rules moves with it, so a reordered sidebar cannot cause one step's result to be written under another step's name. Draggable steps show an open-hand cursor on hover; fixed steps do not.

Reduce & Extract does not reorder. Channels Selection feeds Dimensionality Reduction feeds Feature Extraction. That is a data dependency, not a preference, so those four steps hold their position.

Stages & Dependencies

A processed result in BCILattice is a stage, not a loose file. Every stage for one subject and one experiment lives inside that subject's .bltdcontainer, alongside the raw recording and the parameters, timestamp, and input hash of the run that produced it. You will see filename-shaped handles likesub01_filtered_epochs_exp2.csv in pickers and logs. Those are readablekeys, not paths, nothing is written at that location.

An experiment holds exactly one live output per stage. Re-running a step overwrites its stage, which is what branching an experiment is for, so there is no _v2 ladder to keep track of. Stage resolution is experiment-aware: a step loads the active experiment's stage, or the parent it inherits from, never a sibling experiment's.

What Each Step Writes

StepStage writtenHandle suffix
ICA Reviewica_cleaned_ica_cleaned
Channel Qualitychannel_quality_channel_quality
Epochingepochs_filtered_epochs
Normalizationnormalized_normalized
Augmentationaugmented_filtered_augmented
Activation Mapsnone, view-only
Time-Frequencytime_frequency_tf
Channels Selectionchannel_selected_channel_selected
Dimensionality Reducerdim_reduced_dim_reduced
Feature Extractionfeatures_features
Data Projectionprojection_projection

The method you chose is recorded in the stage's parameters, never in its name. One Channel Selection stage exists per experiment whether you ran Fisher Score or CSP, so trying a second method does not litter the container with a file per attempt.

Which Input Each Step Accepts

Each step's Source dropdown lists only the stages that operation is allowed to consume. These rules are enforced centrally rather than being a per-page convention, so the dropdown and the engine can never disagree about what is legal.

StepAccepts as input
ICA ReviewFiltered, Channel Quality
Channel QualityFiltered, ICA Cleaned
EpochingFiltered, ICA Cleaned, Channel Quality, Normalized
NormalizationFiltered, ICA Cleaned, Channel Quality, Epochs, Augmented
AugmentationEpochs, Normalized
Activation MapsEpochs, Normalized, Augmented
Time-FrequencyEpochs, Augmented, Normalized
Channels SelectionFiltered, ICA Cleaned, Channel Quality, Normalized, Epochs, Augmented
Dimensionality Reducerthe above, plus Channel Selected
Feature Extractionthe above, plus Dim Reduced
Data ProjectionFiltered, ICA Cleaned, Channel Quality, Normalized, Augmented, Channel Selected, Dim Reduced

The absences in that table are deliberate, and each has a reason:

  • Augmentation, Time-Frequency and Activation Maps refuse continuous stages. There are no trials in a continuous recording to augment, to average an ERSP over, or to draw a per-condition topography from.
  • Channel Quality refuses normalized input. Bad-channel detection is amplitude and variance based, and normalisation removes exactly the scale those metrics read. Offering it would produce a confident, meaningless verdict.
  • Data Projection refuses a feature table. GAF, MTF and recurrence plots all assume temporal ordering; a feature table's columns are unordered summary statistics.
Strict versus cascading resolution. Epoching, ICA Review and Channel Quality cascade: if you pick a source that has not been run yet, they fall back to the nearest available upstream stage so the run never hard-fails. Normalization is strict, because Epochs (3-D) and the continuous stages (2-D) are not interchangeable, picking a stage that does not exist is reported rather than silently substituted.

Controls Every Step Shares

ControlWhat it does
Modality / Session / FilePicks the recording, from the same records Data Manager holds. Analysis never reads raw, unprocessed data.
SourceWhich upstream stage to consume, limited to the legal inputs listed above.
ChromophorefNIRS only: All, HbO, or HbR. An fNIRS file holds two channels per source-detector pair, and they are different physiological signals. Hidden for EEG, EMG and EOG.
Run buttonLoads the selected file and runs the step. There is no separate load step, the file selected when you press Run is the file that gets analysed.
MethodsDrafts a publication Methods paragraph from what this recording has actually had done to it. See Provenance.
Last run cardStates the parameters of the run that produced the stage currently on disk, read from the container rather than from the controls on screen.
ExportEvery figure exports as an image; result tables export as CSV.

The distinction between the last-run card and the on-screen controls matters. A control can be nudged after a run without re-running, at which point it no longer describes the output in the container. The card always describes what actually executed.


Part 1, Prepare

Seven steps that take a filtered recording and produce clean, labelled trials. This section is user-reorderable; the order below is the default.

1. ICA Review

Independent Component Analysis separates the recording into statistically independent sources. Blinks, muscle tension, and heartbeat tend to concentrate into their own components, so zeroing those and reconstructing gives you the neural signal without them. The point of this page is that the decision stays yours: nothing is rejected until you label it and apply.

SettingOptions
SourceClean Data (filtered), or Channel Quality Checked
MethodFastICA (scikit-learn), or Picard (MNE)
Components2 to 64, default 20 (capped at the channel count)
Sample rate1 to 20000 Hz, read from the file where recorded

Results arrive as a card per component, showing a waveform snippet, its power spectrum, and its spatial weights. Each card carries a label dropdown: Keep,Eye, Muscle, Cardiac, orOther. Running counts per category sit above the grid.

Suggest Labels

A heuristic classifier proposes a label for every component from its spectral shape, beat regularity, kurtosis and topographic focality. It is a proposal you review, not an action, and each suggestion carries the reason it was made. Applying rejection is always a separate, explicit click.

Diagnostics tab

The numbers behind the cards, one row per component:

ColumnMeaning
Var %Share of total sensor-space variance the component carries.
KurtosisExcess kurtosis of the activation. Large positive values mean sharp transients, blinks, pops, QRS complexes.
SkewAsymmetry of the activation. Blink components deflect one way.
Peak HzFrequency of maximum power spectral density, DC excluded.
1/f slopeLog-log PSD slope over 2–45 Hz. Cortical background is around −1; flat or positive indicates broadband muscle.
Delta % / Alpha %Share of 0.5–65 Hz power below 4 Hz, and in 8–13 Hz.
EMG %Share of power in 20–45 Hz, where surface EMG dominates.
Mains %Share of power in 45–65 Hz, line-noise pickup.
Beat reg. / BPMLargest normalised autocorrelation peak at a 40–150 bpm lag, and the implied rate. Near 1 is the cardiac signature.
FocalityPeak topography weight divided by its RMS. 1 is diffuse across all sensors; large values mean the component loads on a few.
Peak ch.Sensor carrying the largest absolute topography weight.

Apply Rejection zeroes the labelled components, reconstructs the signal, and writes the ica_cleaned stage. The rejected component indices are recorded with it.

2. Channel Quality

Scores every channel against the rest of the montage and flags the ones that look dead, railing, or noise-dominated. Screening channels before ICA is standard practice, a dead or railing channel otherwise consumes a whole component on its own.

MethodWhat it measures
Variance + Noise (default)Variance against the montage median, combined with a high-frequency noise ratio (RMS of the first difference relative to the channel's own RMS). Line noise and electrode pops inflate sample-to-sample jumps disproportionately.
Kurtosis + VariancePeaked, non-Gaussian channels are usually artifact-dominated. Same scoring ICA auto-rejection uses.
Correlation (inter-channel)A channel poorly correlated with every other channel is often noisy or disconnected. Needs at least 2 channels.
Peak-to-Peak AmplitudePeak-to-peak over the whole recording, per channel.

Every method produces one composite robust z-score per channel (median + MAD scoring, so a few extreme channels cannot drag the threshold with them). A channel is flaggedBad when its score reaches the sensitivity threshold k (1.0–10.0, default 3.5), Warn above 60% of k, and Good below that. A flat-line channel is force-flagged Bad under every method regardless of what its chosen metric says.

Three result tabs: Overview (per-channel score bars), Channels(the scored table, with a Keep/Drop checkbox per channel that defaults to the automatic flag and is yours to override), and Waveforms (what the flagged channels actually look like). Apply Channel Drop removes the unchecked channels and writes thechannel_quality stage.

3. Epoching

Turns a continuous recording into a trial tensor: one labelled epoch per event. Everything downstream that talks about trials, ERSP, CSP, per-trial features, depends on this step.

Event detection

Three event sources:

  • Label column, an event/label/class column already in the file.
  • MNE stim channel, a hardware trigger channel.
  • NeuralFlow, the compiled paradigm you designed in the Neural Flow module.

Sync pulls events from the selected source so you can sanity-check the count and onset times before extracting. Extraction runs detection automatically if you skip it.

Window, baseline and rejection

SettingRange / options
Epoch windowtmin −10 to 0 s, tmax 0 to 30 s, relative to the event
Baseline correctionNone, Mean subtraction, Percent change, z-score
Baseline window−10 to 10 s, within the epoch
Rejection modeAutomatic (robust), or Peak-to-peak threshold. Off by default.
Sensitivity k1.0 to 10.0, default 3.5. Rejects epochs whose peak-to-peak exceeds median + k × MAD across trials.
Peak-to-peak thresholdFixed limit in the signal's native units, auto-suggested from your data when a file loads.

Automatic rejection adapts to the recording; the fixed threshold is for when you have a lab convention to hold to. Both drop trials contaminated by motion or artifact so a handful of bad epochs cannot skew the average.

Result tabs

  • Preview, the epoched signal per channel, with export.
  • Rejection, which trials were dropped and why.
  • Statistics, trial counts and per-class balance.
  • Artifacts, what the rejection criterion actually caught.
  • Quality, an overall read on the epoch set.

Compare Runs puts two epoching attempts side by side, which is the fastest way to see what a window or rejection change actually cost you in trials.

4. Normalization

Rescales the signal. Eight scalers, each mirroring its scikit-learn counterpart:

MethodEquivalentNotes
Z-score (Standard)StandardScalerZero mean, unit variance. The default.
Min-Max [0, 1]MinMaxScalerBounded range; sensitive to outliers.
Max-Abs [−1, 1]MaxAbsScalerPreserves sign and sparsity.
Robust (median / IQR)RobustScalerOutlier-resistant.
Power Transform (Yeo-Johnson)PowerTransformerDistributional reshaping toward Gaussian.
Quantile (Uniform)QuantileTransformerRanks mapped to a uniform distribution.
Quantile (Normal)QuantileTransformerRanks mapped to a normal distribution.
Unit Norm (L2, per-sample)NormalizerEach sample scaled to unit length.

Scope is either Per-channel (each channel gets its own statistics) orWhole recording (one set of statistics for everything).

Statistics are fitted once, over the entire loaded signal, and applied uniformly.They are never fitted per-epoch. Fitting per-epoch would normalise away exactly the epoch-to-epoch differences a decoder is supposed to learn.

Three result tabs: Preview (before and after), Scale Factors(the offsets and scales actually applied, per channel), and Distribution (what the transform did to the amplitude distribution). Writes the normalized stage.

Leakage rule. If a normalisation is part of your model's evaluation story, fit it inside the training fold, in the ML Suite pipeline, not once over the whole dataset here. Normalising here is appropriate for putting recordings on a comparable scale and for exploratory work; it is not a substitute for in-fold scaling.

5. Augmentation

Synthesises additional trials from the ones you have. Sources are Epochs orNormalized (normalisation preserves its input's shape, so normalised epochs are still epochs). Nine augmentations, chainable into a pipeline, with a fixed random seed for reproducibility:

AugmentationWhat it doesKey parameters
GaussianNoiseAdds white noise scaled to reach a target SNR.snr_db, −20 to 60 dB
TimeShiftRandom circular shift along the time axis.max_shift_ms, sfreq
FrequencyShiftTranslates the spectrum by a random Hz offset via the analytic signal.max_shift_hz, sfreq
ChannelDropoutZeroes random channels, so a decoder cannot depend on one electrode.p_drop, 0 to 1
TimeReverseFlips the time axis.
AmplitudeScaleRandom per-epoch gain, modelling session-to-session impedance differences.scale_min, scale_max
SlidingWindowProduces overlapping windows from each epoch.window_size, stride
MixUpConvex combination of two epochs of the same class.alpha, n_synthetic per class
SMOTEInterpolates between same-class nearest neighbours to rebalance under-represented classes.k_neighbors, target_ratio

Every parameter carries its real range and unit rather than a generic numeric field, so an SNR cannot be set to a value that means nothing and a probability cannot go negative.

Every run is reported against its input: achieved SNR, amplitude ratio, before/after correlation, spectral divergence, and the change in class balance. A pipeline that grows the epoch count while flattening the spectrum or rescaling the amplitude is the failure mode worth catching, and it is invisible in the trial counts alone.

6. Activation Maps

Where the activity is, drawn from epoched data. This step renders figures and writes no stage, so it has no Apply tab.

Activation Maps tab (2D)

ControlMeaning
Activity FilterAll Activities, or one class.
Data TypeThe modality, or HbO / HbR for fNIRS.
TopomapsHow many topographies to lay out across the window.
Time WindowStart and End in seconds.
OverlayThe time point superimposed on the sensor map.

The sensor map above the generated topographies shows electrode or optode positions with mean activation, so you can confirm the montage is right before reading anything into the maps.

3D Brain tab

Projects the same data onto a cortical surface. Requires the Researcher plan or above.

  • BCI Metric: Mean (abs), Std Dev, RMS, Peak-to-Peak, Max (abs), SNR (dB), or band power for Alpha (8–12 Hz), Beta (13–30 Hz), Theta (4–7 Hz), Delta (0.5–3.5 Hz), Gamma (30–80 Hz).
  • Hemisphere: Left, Right, Both.
  • View: Lateral, Medial, Dorsal, Ventral, Frontal, Posterior.
  • Colormap: plasma, viridis, inferno, magma, RdBu_r, YlOrRd, cool, hot, jet.
  • Show Names toggles channel labels; Screenshot saves the viewport.

The 3D view renders only when you press Apply / Refresh. Every control on the sidebar is read at that moment, so working down the sidebar does not trigger a surface projection per change.

7. Time-Frequency

Event-related spectral perturbation (ERSP) and inter-trial coherence (ITC): how power and phase consistency change over time, per frequency, relative to baseline. This is the step that tells you whether your paradigm produces the effect you designed it to produce.

SettingRange / options
MethodMorlet Wavelet, STFT, Multitaper
Sampling frequency1 to 10000 Hz, default read from the stage
Frequency rangeFreq min 0.5–200 Hz (default 1), Freq max 1–500 Hz (default 40)
Steps5 to 200 frequency bins, default 40
BaselineOn by default

The decomposition is computed once and cached. Channel, class, band preset, response window, and significance masking are view controls: changing them redraws from the cache without recomputing, and only the visible tab draws.

The seven views

TabAnswers
OverviewERSP and ITC for one channel on a shared time axis, with frequency marginals and per-band time courses underneath.
Band DynamicsERD/ERS per band, one line per class. The plot that tells you whether the paradigm works.
SpectraAverage power change across the response window, per class, bands shaded. Where an SSVEP peak or mu suppression shows up.
Class ContrastThe difference map between two classes you choose: the time-frequency regions a decoder can actually separate.
Channel GridEvery channel's ERSP on one shared colour scale, the spatial layout of the effect.
TopographyScalp maps of band-power change across the response window, over a montage you select.
SummaryPeak ERD/ERS (dB), peak time, peak frequency, mean dB, mean and peak ITC, per class and band. The numbers you quote in a paper. Exports as CSV.

Mask non-significant outlines the time-frequency bins belonging to a significant cluster (one-sample cluster-permutation test against 0 dB, p < 0.05), computed on demand on a background thread.

Band presets are shared with Feature Extraction, so "alpha" means the same range on both pages. Available montages for the topography view include standard_1020, standard_1005, biosemi16/32/64, easycap-M1, GSN-HydroCel-32 and -64, mgh60, and the fNIRS artinis-octamon and artinis-brite23 layouts. If your channel names do not match the montage, the map falls back to a labelled ring, which is a signal that the montage is wrong, not a scalp map.

The saved time_frequency stage holds the per-trial ERSP tensor as its primary data, with grand and per-class averages beside it, so the result is trainable rather than being only a picture.


Part 2, Reduce & Extract

Four steps that narrow a clean, trial-structured recording down to something a model can train on. The heavy computation for these runs in the local service on your machine; the pages resolve and read the source file themselves before sending anything, so the step you selected is the step that gets analysed.

8. Channels Selection

Ranks every channel by how much class information it carries and keeps the top fraction. Set the Top Percent (1–100, default 50) and, optionally, classes to ignore (for example rest, entered as 0 or 0,1,2). Twenty criteria are available:

FamilyMethods
Statistical testst-Value Method, z-Score Method, ANOVA F-value, Wilcoxon Signed-Rank Test, Permutation Test-based Selection
Information / correlationMutual Information Feature Selection, Pearson's Correlation Coefficient (PCC), Cross-Correlation Based Discriminant Criterion (XCDC), R_Squared_method
Discriminant scoresFisher Score, Contrast-to-Noise Ratio (CNR), Peak Amplitude Selection, PSD-based Selection
Spatial filtersCommon Spatial Pattern (CSP), Sparse CSP, Regularized CSP
Model-basedStepwise Regression, Stepwise LDA, Sequential Based Algorithm, LASSO

Reading the scores

A raw score is not interpretable on its own, the methods return t-values, mutual information, F-statistics and correlation coefficients, all on different scales. Every score is therefore shown next to scale-free rank statistics:

ColumnMeaning
ScoreThe method's own criterion value. Compare channels by rank, not by absolute value.
RankPosition in the descending score order, 1 = best.
PctilePercentage of channels this one outranks.
zDistance from the montage's mean score, in standard deviations.
MarginDistance to the selection cut point in the score's own units. Positive means selected; a margin near zero flags a channel whose fate would flip under a slightly different Top Percent.
StatusSelected or dropped.

The LASSO and Sparse CSP methods standardise the data and choose their penalty by cross-validation rather than using a fixed default. On signals in physical units, a fixed penalty shrinks every coefficient to zero, which silently presents the first N channels as "the top N" on every dataset.

9. Dimensionality Reducer

Projects the channel space onto fewer components. The method list is the full Dimensionality Reduction category of the ML component catalogue, so anything you can wire into an MLFlow graph is available here as a one-shot fit, PCA, Kernel PCA, TruncatedSVD, FactorAnalysis, FastICA, NMF, t-SNE, UMAP, Isomap, Locally Linear Embedding, MDS, Spectral Embedding, Dictionary Learning, and the rest. Each method exposes its own parameters, built from the catalogue schema rather than hard-coded here.

SettingRange / options
Components1 to 10000, default 2
Channel scopeFull Data, or Selected Channels (the result of step 8)
Method parametersPer-method, generated from the component catalogue

Reading the components

The components table separates variance accounting from class discriminability, because a projection can explain a great deal of variance while separating nothing a decoder cares about:

ColumnMeaning
Variance %Share of variance the component accounts for. Reported by the reducer itself for the linear family (PCA, TruncatedSVD, FactorAnalysis); for manifold methods (t-SNE, UMAP, Isomap) no such decomposition exists, so this is the share of the embedding's own variance and the summary says so.
Cumulative %Running total of the column to its left.
Std Dev / RangeSpread of the samples along this component.
Class F, pOne-way ANOVA across the label classes. High F means this axis separates the conditions.
Eta²Share of the component's variance attributable to class membership (0–1). The practical measure of decoding signal, it does not grow with sample count the way F does.
Two catalogue blocks are filtered out of this picker because they cannot work as a one-shot reducer on a single recording: AlignedUMAP (aligns a sequence of related datasets and needs an explicit relations mapping) and SparseCoder (encodes against a dictionary you already learned rather than learning one). NMF, MiniBatchNMF and LatentDirichletAllocation factorise the data and reject negative values, so they apply to non-negative features such as power or amplitude envelopes, not to signed channel data.

10. Feature Extraction

This is the step that produces the labelled design matrix ML Suite trains on: one row per trial, one named column per feature. It sits after dimensionality reduction on purpose, by the time you reach it the channels are clean, selected and optionally projected, so what is extracted comes from the data you actually intend to decode.

Columns are named {unit}_{band}_{family}_{suffix} and each carries its domain, family, channel, band, unit and slot as metadata, so a ranked feature can always be traced back to a channel and a frequency band.

Feature Catalogue

Seventy-one feature families across five domains.

Time Domain, 27 families

Mean, Variance, Standard Deviation, Skewness, Kurtosis, Minimum, Maximum, Peak-to-Peak, Median, Interquartile Range, Root Mean Square, Signal Energy, Mean Absolute Value, Waveform Length, Zero Crossing Rate, Slope Sign Changes, Willison Amplitude, Nonlinear Energy, Hjorth Parameters (Activity / Mobility / Complexity), Shannon Entropy, Permutation Entropy, Sample Entropy, Approximate Entropy, Higuchi Fractal Dimension, Petrosian Fractal Dimension, Katz Fractal Dimension, Autoregressive Coefficients.

Frequency Domain, 18 families

Absolute Band Power, Relative Band Power, Log Band Power, Band Peak Frequency, Total Power, Peak Frequency, Mean Frequency, Median Frequency, Spectral Edge Frequency, Spectral Entropy, Spectral Centroid, Spectral Bandwidth, Spectral Skewness, Spectral Kurtosis, Spectral Rolloff, Spectral Flatness, Spectral Slope, Band Power Ratios (theta/beta, alpha/beta, engagement index).

Time-Frequency Domain, 9 families

Wavelet Sub-band Energy, Wavelet Sub-band Entropy, Wavelet Coefficient Statistics, Wavelet Band Energy, ERD/ERS, Windowed Band Power, Hilbert Envelope Statistics, Instantaneous Frequency, Time-Frequency Entropy.

Spatial Features, 8 families

Common Spatial Patterns (CSP), Covariance Matrix, Riemannian Tangent Space, Global Field Power, Laplacian Variance, CAR Variance, Channel Power Ratio, Region Band Power (frontal, central, parietal, occipital and temporal ROIs derived from 10-20 electrode names).

Connectivity Features, 9 families

Correlation, Cross-Correlation Lag, Coherence, Imaginary Coherence, Phase Locking Value (PLV), Phase Lag Index (PLI), Weighted Phase Lag Index (wPLI), Mutual Information, Graph Metrics (degree, clustering coefficient, efficiency, density).

A working default is preselected, one strong, cheap, well-understood family per domain: Variance, Root Mean Square, Waveform Length, Hjorth Parameters, Relative Band Power, Log Band Power, Spectral Entropy, ERD/ERS, CSP, and Correlation. Enough to train a real decoder on first run without producing thousands of columns.

Extraction settings

SettingOptionsWhat it changes
Feature axisSpatial (per channel) / Temporal (per time window)A trial is channels × time, and a feature is a reduction. Spatial averages over time, one value per channel, the classical BCI layout (C3 versus C4 mu power). Temporal averages over channels and cuts the trial into windows, one value per window, keeping when the response happened.
OutputAll trials (2-D matrix) / Each trial (3-D tensor)The 2-D matrix is always produced, it is what LDA, SVM, random forests and gradient boosting train on. Asking for 3-D additionally stores a (trials × units × features) tensor for CNN, LSTM and EEGNet-style models, beside the matrix rather than replacing it.
BandsEEG Standard, EEG Extended, fNIRS, EMGFrequency bands every band-dependent family uses.
Sampling rateFrom file, or explicitOnly needed when a stage carries no recorded rate. Getting it wrong shifts every band edge.
ChannelsPer Channel / Channel Average / BothPer Channel keeps the spatial pattern; Channel Average collapses the montage to one column per family, for recordings with few trials.
Time windows2 to 64, default 4The unit count on the temporal axis; also used by Windowed Band Power on the spatial axis.
ERD baseline−60 to 60 s, default −0.2 to 0 sThe pre-stimulus window ERD/ERS is measured against. Defaults to what Epoching recorded.
CSP pairs1 to 32, default 4Filter pairs kept per class contrast.
Connectivity modeNode Strength / All Pairs / Graph SummaryNode Strength gives one column per channel; All Pairs keeps every channel pair and gets wide fast; Graph Summary reduces the network to five descriptors.
Max pairs1 to 5000, default 120Ceiling on pairwise families.
Window / Overlap0.1–60 s, 0–95%Pseudo-trial windowing when the source is continuous rather than epoched.
Priority top1 to 100%, default 40%Top fraction marked Priority in the table. A ranking hint, every extracted column is saved either way.
Column limit50 to 50000, default 4000Hard ceiling on matrix width. Extraction stops here and says so rather than producing an unusable matrix.

Channel-defined families (CSP, connectivity, covariance, ROI, Global Field Power) only exist on the spatial axis, the channels have been averaged away on the temporal axis. They are skipped with a note rather than quietly computed over window indices, because "covariance between time windows" is a different quantity wearing the same name.

Bands above the recording's Nyquist limit are dropped or clamped, and the run reports which. An EEG gamma band on a 10 Hz fNIRS recording is not a small error, it is an empty integration window that would otherwise yield a column of zeros.

Reading the result

The feature picker shows a live estimate of how wide the resulting matrix will be, so a careless selection is priced before it runs rather than after. Extracted features are ranked four ways at once, in one table: Score (the test statistic), p,Effect (effect size), and MI (mutual information), alongside the feature's domain, band, channel, and mean.

Chart tabAnswers
RankingBest-scoring features, coloured by domain.
DomainsHow much each feature domain contributes.
DistributionsPer-class spread of the top features.
SeparabilityClass scatter over the two best features, and an effect-size volcano plot.
RedundancyCorrelation between the top features, near-duplicates carry no extra information.
ChannelsWhich channels the class information sits on.
Feature extraction runs real per-trial DSP, wavelets, CSP, and pairwise connectivity over every channel pair and band. On a full montage that is minutes rather than seconds, and its batch timeout is raised accordingly. All Pairs connectivity at 64 channels explodes, use Node Strength or Graph Summary unless you specifically need every pair.

11. Data Projection

Encodes one channel's 1-D time course as a 2-D image, so computer-vision architectures can be applied to a signal. Three encodings:

MethodWhat it encodes
Gramian Angular Field (GAF)Temporal correlations as angular differences on a polar-encoded series.
Markov Transition Field (MTF)Transition probabilities between quantile bins over time.
Recurrence Plot (RP)When the trajectory revisits a previous state.
SettingRange
Sample windows1 to 12, default 4, how many windows to visualise
Window length16 to 512 samples, default 64, which is also the image resolution
Colormapviridis, plasma, inferno, hot, coolwarm, RdBu_r, magma

Each projected window is described twice: what the source segment was (RMS, peak-to-peak, kurtosis, zero crossings, dominant frequency, spectral entropy, Hjorth mobility and complexity) and what the encoding turned it into (image statistics and recurrence quantification). Both matter, an image looks different either because the encoding highlighted something or simply because that window happened to hold a burst.


Batch Apply

The Apply tab on each step takes the settings currently in View and runs them across a selection of files.

  1. Set up and run the step on one file in View until the result is what you want.
  2. Switch to Apply. Files are listed under modality tabs (fNIRS, EEG, EMG, EOG) with a checkbox each.
  3. Select the files, or use Select All, and press Apply.
  4. Progress reports per file as it goes; Cancel stops cleanly after the current file rather than mid-write.

Batch runs record their own stage artifacts exactly as a View run does, so a batched output is indistinguishable from one you produced interactively, and equally discoverable downstream. Batch runs also carry the same paradigm identity as the View run, so labels resolve against this study's paradigm only.

Files that cannot be processed, for example a subject with no filtered stage yet, are skipped with a logged reason rather than aborting the whole batch.


Provenance & Reproducibility

Analysis is not write-only. Three mechanisms make a study reopenable and a result defensible.

Recorded parameters

Every run writes its real parameters into the stage it produces, with a timestamp, the input hash, and the output handle. The Last run card on each page reads that back and states it plainly, which is a stronger record than the state of the controls: a control can fail to restore, and a control can be changed after a run without re-running.

Methods drafts

The Methods button assembles a publication Methods paragraph from what this recording has actually had done to it, in pipeline order: filtering, ICA, channel screening, epoching, normalisation, augmentation, time-frequency, channel selection, dimensionality reduction, features, projection. It is a first draft built from recorded provenance rather than from memory, and it is yours to edit.

Reopenable pages

Each page captures three layers of state into the study document: the controls you set, the rendered surfaces (tables and summary text), and the run payload itself. When the payload is present, reopening re-renders live plots you can theme, zoom and export, rather than a picture of a plot. Figures are stored as reusable assets inside the subject's container, so an exported study carries publication-ready images without re-rendering them.


Handing Off to ML Suite

Every stage the Analysis Suite writes is selectable as a data source in the Workflow designer, so what you built here binds directly to a training graph. Two handoffs are worth calling out:

  • Feature Extraction → classical models. The 2-D design matrix is one row per trial with named columns, which is what LDA, SVM, random forests and gradient boosting expect.
  • Feature Extraction (3-D tensor) or Time-Frequency → deep models. The tensor keeps the unit axis for CNN, LSTM and EEGNet-style architectures, and the time-frequency stage stores the per-trial ERSP tensor rather than only an average.
Evaluation discipline. Channel selection, dimensionality reduction and scaling are learned transforms. If your headline number is meant to be an unbiased estimate of generalisation, fit them inside the training fold in the ML Suite pipeline. Using the Analysis Suite's stages for exploration, inspection, and building intuition is exactly what they are for; using a whole-dataset selection as the input to a cross-validated accuracy claim is leakage.

fNIRS & EMG Notes

  • Chromophore separation. An fNIRS file holds an HbO and an HbR channel per source-detector pair. Decomposing, ranking, or reducing both together mixes two different physiological signals, so every fNIRS-capable step exposes a Chromophore control (All, HbO, HbR). Activation Maps offers HbO or HbR only, because a topomap draws one value per optode position and both at once would overplot the same sensors.
  • fNIRS bands. The fNIRS band preset covers vlf (0.005–0.02 Hz), hemodynamic (0.01–0.08), mayer (0.08–0.12), respiratory (0.2–0.4), and cardiac (0.8–1.5). The higher bands are the physiological confounds you want to be able to measure rather than assume away.
  • fNIRS time-frequency resolution. The haemodynamic response lives below about 0.1 Hz. At fNIRS sampling rates a wavelet decomposition has limited resolution in that band, so time-frequency peaks read low. That is a resolution limit of the method, not a defect in the recording.
  • EMG bands. The EMG preset covers low (20–50 Hz), mid (50–100), high (100–250) and very_high (250–450). Several time-domain families, RMS, Mean Absolute Value, Waveform Length, Slope Sign Changes, Willison Amplitude, are the standard EMG activation measures.
  • Sampling rate is read from the file. Steps derive it from the loaded recording's own metadata rather than assuming an EEG-style rate, which matters for a roughly 10 Hz fNIRS recording.

Troubleshooting

What you seeWhat it means
"No filtered file for this experiment"The subject has not been through Preprocessing in this experiment, and does not inherit a filtered stage from a parent. Run filtering first.
"Not epoched data. Missing epoch_idx"A trial-level step (Augmentation, Time-Frequency, Activation Maps) was pointed at a continuous stage. Run Epoching first, or pick an epoched source.
"No events detected"Epoching found no usable transitions in the selected event source. Check the label column, the stim channel, or that the NeuralFlow paradigm is compiled.
A band was dropped or clampedThe band sits at or above the recording's Nyquist limit. Expected on fNIRS with EEG band presets, switch the preset.
Topography drew a labelled ring instead of a scalpYour channel names do not match the selected montage. Pick the right montage, or fix the channel names in Data Manager.
A step waits on the local serviceThe Reduce & Extract steps run their computation in the local FastAPI service. If it is still starting, give it a moment; if it does not come up, restart the app and check the logs before changing study data.
A batch timed outMost likely Feature Extraction with a wide selection, All Pairs connectivity on a full montage is the usual cause. Narrow the selection, or switch the connectivity mode.
Related reading: the User Manual for the surrounding workflow, the Components Reference for the blocks these stages feed into, and the Technical Overview for how the local service and data stores fit together.
Analysis Suite v1.0 · BCINexus Platform · 2026-08-08