Channel Summary
This demo demonstrates how to generate summary statistics across all channels for data quality assessment.
What is Channel Summary?
Channel summary provides aggregate statistics across all EEG channels, offering a quick overview of data characteristics. This complements channel-specific metrics by revealing patterns across the entire montage.
Statistical measures:
Mean amplitude per channel
Variance/standard deviation
Minimum and maximum values
Sample counts
Use Cases
Data quality overview:
Quick assessment of recording quality across all channels
Identify systematic patterns or issues across the montage
Compare data quality before and after preprocessing
Channel comparison:
Identify channels with systematically different properties
Detect asymmetries or systematic biases in the recording
Verify that preprocessing affected channels as expected
Workflow Summary
This demo shows channel summary analysis:
Generate Initial Summary
Load and preprocess data (average reference, high-pass filter)
Calculate summary statistics across all channels
Display results using formatted table
Summary with Sample Selection
Mark extreme values for exclusion
Recalculate summary excluding artifacts
Compare clean vs. raw summary statistics
Code Examples
Show Code
# Demo: Channel Summary
# Shows how to create summary statistics for channels across epochs.
using EegFun
# Note: EegFun.example_path() resolves bundled example data paths.
# When using your own data, simply pass the file path directly, e.g.:
# dat = EegFun.read_raw_data("/path/to/your/data.bdf")
# read raw data
dat = EegFun.read_raw_data(EegFun.example_path("data/bdf/example1.bdf"));
# read and prepare layout file
layout = EegFun.read_layout(EegFun.example_path("layouts/biosemi/biosemi72.csv"));
EegFun.polar_to_cartesian_xy!(layout)
dat = EegFun.create_eegfun_data(dat, layout)
# minimal preprocessing
EegFun.rereference!(dat, :avg)
EegFun.highpass_filter!(dat, 0.1)
# summary statistics across all channels
summary = EegFun.channel_summary(dat)
EegFun.log_pretty_table(summary; title = "Initial Channel Summary")
# summary statistics across all channels excluding v. extreme values
EegFun.is_extreme_value!(dat, 200);
summary = EegFun.channel_summary(dat, sample_selection = EegFun.samples_not(:is_extreme_value_200))
EegFun.log_pretty_table(summary; title = "Channel Summary (excluding extreme values)")
# summary statistics across all Midline channels via predicate selection
summary = EegFun.channel_summary(dat, channel_selection = EegFun.channels(x -> endswith.(string.(x), "z")))
EegFun.log_pretty_table(summary; title = "Channel Summary (Midline)")