Route 3 follow-ups · SSVEP frequencies the decoder never trained on

What lets a decoder answer an SSVEP frequency it never trained on?

Six follow-ups on route 3’s BETA cohort each test one idea — how the question is asked, the head, stimulus phase, the matching computation and a learned correction to CCA — and a seventh runs that correction unchanged on Wearable-102.

Measured on: Wearable SSVEP BCI dataset (dry and wet electrodes)

Short answer

On BETA’s held-out frequencies, temporal CCA with a small learned correction reached 86.15% against 80.90% for CCA alone, choosing among 8 frequencies (+5.24 pp, +3.91 to +6.62; 70 people). Run unchanged on Wearable-102, the same models changed CCA’s score by +0.07 pp on dry electrodes (−0.71 to +0.91) and −0.61 pp on wet (−1.48 to +0.23). Learned heads that read reference spectra or stimulus phase stayed far below CCA.

Tasks, cohort and names

How the follow-ups are set up

These follow-ups answer questions from a reader’s comments on Hugging Face.

The tasks the cards report, with the chance level of each.
TaskCandidatesChanceCardsWhat it measures
Held-out frequencies812.50%1 · 2 · 3 · 4 · 5 · 6Accuracy among the frequencies left out of training the decoder in that rotation.
Seen frequencies, balanced323.13%1 · 2 · 3 · 4 · 5 · 6Balanced accuracy among the frequencies the decoder trained on.
Core BETA protocols402.50%BETA, eight channels · BETA, four channelsThe core matrix’s task, reported on its own protocol pages.
Wearable-102128.33%7Accuracy among Wearable-102’s targets; dry and wet headbands are scored separately.
Question number on held-out frequencies—not defined—A question number exists only for a frequency seen in training, so it cannot ask about a held-out one.

Cards 1 to 6: BETA, 70 people, 11,200 two-second windows, 7 participant folds × 5 frequency rotations (32 seen, 8 held out); trained heads use 3 seeds. These follow-ups reuse the cohort route 3 already studied. “Unseen” means unseen by the trained part of the decoder.

The names this page uses, with the codes the data file uses for them.
Name on this pageExport codeCards
question numberID1 · 2 · 4
numeric codeNUM1 · 2 · 4
label templateTPL1 · 2
reference spectrumREF1 · 2 · 3 · 4
reference with stimulus phaseREFc-02 · 3
fixed spectrum match (no training)TEMPLATE1
plain spectrumL01 · 2 · 3 · 4
complex spectrumL0c2 · 3 · 4
frozen CBraMod featuresL11
FiLM headFS1 · 2 · 3 · 4
matching headMATCH2 · 4
CCA (no training)CCA · CCA-RAW1 · 2 · 4 · 5 · 6
Hann-tapered CCACCA-HANN-C · CCA-HANN-U5
cropped-spectrum match (no training)SUBSPACE-CROP · CCA-CROPone set of scores: SUBSPACE-CROP in card 5’s export, CCA-CROP in card 6’s5 · 6
channel-energy averageCHANNEL-JOINT · CHANNEL-HARMONIC5
shared ridge scorerSHARED-RIDGE5
energy headENERGY-FS6
adapted headADAPT-FS6
CCA with learned correctionRAW-RESIDUAL6 · 7
cropped match with learned correctionCROP-RESIDUAL6
cropped-spectrum check (Wearable-102)CCA-CROPthe code in card 7’s Wearable-102 export7

Card 1 · how the question is asked

Asking with the reference spectrum

Question
Asked with the spectrum of CCA’s own reference signals, does the head do better on frequencies it never trained on?
What changed
How each frequency is asked: the reference spectrum in place of the numeric code or the question number, read by the FiLM head on the same features and splits.
Matched control
The same FiLM head asked with the numeric code on held-out frequencies and with the question number on seen ones; CCA and a fixed spectrum match, neither of them trained, score the same windows.

Result

Asked with the spectrum of CCA’s own reference signals (sine and cosine at the frequency and its second and third harmonics), the head reached 39.00% (36.07%–41.78%) on frequencies it never trained on. The numeric code reached 41.46% and CCA 80.90%. Paired with the numeric code, the reference spectrum differed by −2.46 pp (−3.47 to −1.52). On the seen 32-way task it reached 31.48% balanced accuracy, against 32.06% for the question number: the paired difference, −0.57 pp (−1.06 to −0.05), is equivalent within the ±2-point margin and is also a small difference below zero.

On frozen CBraMod features the reference spectrum was again below the numeric code on unseen frequencies (−2.35 pp, −3.16 to −1.57). On seen frequencies it was within the margin, with the direction unresolved (+0.44 pp, −0.01 to +0.92). This question changes the harmonics, the shape and size of the query and the size of the head together, so the result describes the recipe as a whole.

The reference spectrum against each comparator: four planned contrasts on each feature set, in percentage points.
ContrastTaskRoleDifference, 95% intervalReading
Plain spectrum · primary
Reference spectrum − numeric codeHeld-outPrimary−2.46 pp−3.47 to −1.52Below zero; read for a difference only
Reference spectrum − question numberSeen, balancedPrimary−0.57 pp−1.06 to −0.05Below zero; equivalent within ±2 pp
Reference spectrum − CCA (no training)Held-outPrimary−41.90 pp−44.98 to −38.80Below zero; non-inferiority to CCA (−2 pp) not met
Reference spectrum: held-out − m8Held-out against m8Primary−18.18 pp−19.64 to −16.69Below zero; cost not within ±2 pp of zero
Frozen CBraMod features · secondary
Reference spectrum − numeric codeHeld-outSecondary−2.35 pp−3.16 to −1.57Below zero; read for a difference only
Reference spectrum − question numberSeen, balancedSecondary+0.44 pp−0.01 to +0.92Direction unresolved; equivalent within ±2 pp
Reference spectrum − CCA (no training)Held-outSecondary−61.83 pp−65.45 to −58.07Below zero; non-inferiority to CCA (−2 pp) not met
Reference spectrum: held-out − m8Held-out against m8Secondary−27.50 pp−30.08 to −24.93Below zero; cost not within ±2 pp of zero

95% intervals from 2,000 hierarchical paired bootstrap draws over people and fold-shared seed indices (seed 20261007). Four primary contrasts on the plain spectrum and four secondary on frozen CBraMod features, with no multiplicity correction. A fixed spectrum match against the same reference, with no training, reached 28.84% on unseen frequencies. Its scores do not depend on the rotation, so its generalisation cost is zero by construction, as is CCA’s.

Every level behind card 1: held-out, m8, cost, seen, and the two read-offs
Levels with their 95% intervals. Rows marked route 3 are route 3’s own runs, reused unchanged. The question number exists only for seen frequencies, so its held-out cells are not defined. CCA reads the raw multichannel window, which keeps the timing and phase the plain spectrum drops, and is the comparator for both feature sets.
ArmHeld-outm8Cost, held-out − m8Seen, balancednn8u3
Plain spectrum · FiLM head · primary
Reference spectrum39.00%36.07%–41.78%57.18%53.38%–60.95%−18.18 pp−19.64 to −16.6931.48%28.28%–34.62%43.41%40.04%–46.58%19.61%18.53%–20.63%
Numeric codefrom route 341.46%38.15%–44.68%53.76%49.87%–57.49%−12.30 pp−13.42 to −11.1723.67%21.22%–26.09%40.96%37.65%–44.13%20.57%19.33%–21.78%
Question numberfrom route 3not defined58.58%54.75%–62.33%not defined32.06%28.79%–35.19%44.32%40.84%–47.57%not defined
Label templatefrom route 328.69%26.95%–30.55%53.13%49.57%–56.66%−24.44 pp−26.44 to −22.2626.10%23.49%–28.59%39.67%36.78%–42.47%19.33%18.23%–20.47%
Frozen CBraMod features · FiLM head · secondary
Reference spectrum19.07%18.06%–20.22%46.57%43.37%–49.75%−27.50 pp−30.08 to −24.9324.68%22.02%–27.43%19.40%18.35%–20.52%24.49%23.34%–25.69%
Numeric codefrom route 321.42%20.16%–22.62%37.58%35.01%–40.17%−16.16 pp−17.88 to −14.4713.86%12.52%–15.22%21.46%20.20%–22.67%11.42%10.74%–12.12%
Question numberfrom route 3not defined46.08%43.04%–49.16%not defined24.24%21.61%–26.92%18.28%17.30%–19.30%not defined
Label templatefrom route 318.96%18.02%–19.88%43.23%40.20%–46.29%−24.27 pp−26.72 to −21.8520.75%18.49%–23.09%20.12%18.98%–21.33%27.03%25.96%–28.05%
No training
CCA (no training)from route 380.90%76.59%–84.85%80.90%76.59%–84.85%0.00 ppby construction65.46%59.66%–71.08%66.66%61.33%–71.56%81.70%78.49%–84.57%
Fixed spectrum match (no training)28.84%26.46%–31.49%28.84%26.46%–31.49%0.00 ppby construction12.85%11.18%–14.58%27.35%25.09%–29.93%31.99%29.84%–34.08%

Limit. Not run in this round: the matching (bilinear) head and a fundamental-only reference; card 2 runs both.

Card 2 · head, features and question

The head, the spectrum or the question

Question
What holds the head back: the head itself, the spectrum it reads, or the way a frequency is asked? And does a plain softmax do better on seen frequencies?
What changed
One named part per contrast: the head (a matching head in place of the FiLM head), the features (the complex spectrum, which keeps phase, in place of the plain spectrum), the question (the reference with stimulus phase, or the reference without its second and third harmonics) and, in a separate run, the output (a softmax with no question, or route 3’s head trained with a softmax loss).
Matched control
The same arm without that change, paired on the same people, folds, rotations and seeds; card 1’s reference spectrum, numeric code and CCA sit beside them as levels.

Result

A plain 32-way softmax on the same spectrum reached 35.90% seen balanced accuracy (32.30%–39.32%). The head with one output per question, trained with the same softmax loss, reached 31.45%; trained one-vs-rest, as in route 3, it reached 32.16%. The paired difference, −0.71 pp (−1.01 to −0.41), is small, below zero and inside the ±2-point margin.

On the plain spectrum, a matching head in place of the FiLM head changed seen balanced accuracy by −3.60 pp with the reference spectrum (−4.37 to −2.73) and by +2.54 pp with question numbers (+1.74 to +3.37); the protocol counts a head gain as meaningful when its lower bound is above +2 points, and neither lower bound is. With question numbers, the complex spectrum, which also keeps phase, changed seen balanced accuracy by +18.03 pp for the FiLM head (+14.13 to +21.77), to 50.08%, and by +21.53 pp for the matching head (+17.25 to +25.63), to 56.14%. It also changes size, scaling and the head’s size, so these figures describe the feature recipe as a whole.

On held-out frequencies, a question carrying each target’s stimulus phase changed the complex-spectrum FiLM head’s accuracy by +16.30 pp against the magnitude question (+13.36 to +19.32), to 24.97%, and the matching head’s by +15.95 pp (+13.38 to +18.45), to 22.47%. Read side by side, both stay below the reference spectrum on the plain spectrum (39.00%), the numeric code (41.46%) and CCA (80.90%); the matching head’s paired difference from CCA is −58.43 pp (−62.10 to −54.83).

The stimulus phases come from the BETA authors’ corrigendum, converted to the cosine convention with zero latency; equal amplitudes across harmonics, with harmonic h at h times the stimulus phase, are modelling assumptions. They are the phases of the stimulus as displayed, and the question carries no phase measured on the scalp.

Dropping the second and third harmonics from the reference spectrum changed the plain-spectrum FiLM head’s held-out accuracy by −13.27 pp (−15.04 to −11.45), to 25.73%, and its seen balanced accuracy by −3.12 pp (−3.65 to −2.57).

Each contrast changes one named part; differences in percentage points.
ContrastTaskRoleDifference, 95% intervalReading
The head · plain spectrum
Matching head − FiLM head, asked with the reference spectrumSeen, balancedPrimary−3.60 pp−4.37 to −2.73Below zero; meaningful head gain (lower bound above +2 pp) not met
Matching head − FiLM head, asked with question numbersSeen, balancedPrimary+2.54 pp+1.74 to +3.37Above zero; meaningful head gain (lower bound above +2 pp) not met
The features · complex spectrum − plain spectrum
FiLM head, asked with the reference spectrumSeen, balancedPrimary+15.81 pp+11.91 to +19.51Above zero
FiLM head, asked with question numbersSeen, balancedPrimary+18.03 pp+14.13 to +21.77Above zero
Matching head, asked with the reference spectrumSeen, balancedPrimary+26.19 pp+21.85 to +30.42Above zero
Matching head, asked with question numbersSeen, balancedPrimary+21.53 pp+17.25 to +25.63Above zero
The question · complex spectrum
FiLM head: reference with stimulus phase − reference spectrumHeld-outPrimary+16.30 pp+13.36 to +19.32Above zero
Matching head: reference with stimulus phase − reference spectrumHeld-outPrimary+15.95 pp+13.38 to +18.45Above zero
Matching head: reference with stimulus phase − numeric codeHeld-outPrimary+12.14 pp+9.36 to +14.82Above zero
Matching head asked with the reference with stimulus phase − CCA (no training)Held-outPrimary−58.43 pp−62.10 to −54.83Below zero; non-inferiority to CCA (−2 pp) not met
The question · plain spectrum
FiLM head: fundamental-only reference − reference spectrumHeld-outPrimary−13.27 pp−15.04 to −11.45Below zero
FiLM head: fundamental-only reference − reference spectrumSeen, balancedPrimary−3.12 pp−3.65 to −2.57Below zero
The output · softmax run, plain spectrum
One output per question: softmax training − one-vs-rest trainingSeen, balancedPrimary−0.71 pp−1.01 to −0.41Below zero; equivalent within ±2 pp
One output per question, softmax training − plain 32-way softmaxSeen, balancedSecondary−4.45 pp−5.12 to −3.79Below zero; not equivalent within ±2 pp

95% intervals from 2,000 hierarchical paired bootstrap draws over people and fold-shared seed indices (seed 20261007). Twelve planned contrasts in the main run, all primary, and one primary and one secondary in the softmax run, with no multiplicity correction.

Every level behind card 2: held-out, m8, cost, seen, and the two read-offs
Levels with their 95% intervals. Rows marked card 1 or route 3 are those runs, reused unchanged. A question number or a softmax exists only for seen frequencies, so their held-out cells are not defined. On the complex spectrum u3 also involves stimulus phase, because neighbouring targets differ in phase.
ArmHeld-outm8Cost, held-out − m8Seen, balancednn8u3
Plain spectrum · FiLM head
Reference spectrumfrom card 139.00%36.07%–41.78%57.18%53.38%–60.95%−18.18 pp−19.64 to −16.6931.48%28.28%–34.62%43.41%40.04%–46.58%19.61%18.53%–20.63%
Fundamental-only reference25.73%24.20%–27.24%54.47%50.84%–58.00%−28.74 pp−31.17 to −26.1628.36%25.49%–31.13%41.67%38.48%–44.70%18.37%17.26%–19.47%
Question numberfrom route 3not defined58.58%54.75%–62.33%not defined32.06%28.79%–35.19%44.32%40.84%–47.57%not defined
Numeric codefrom route 341.46%38.15%–44.68%53.76%49.87%–57.49%−12.30 pp−13.42 to −11.1723.67%21.22%–26.09%40.96%37.65%–44.13%20.57%19.33%–21.78%
Label templatefrom route 328.69%26.95%–30.55%53.13%49.57%–56.66%−24.44 pp−26.44 to −22.2626.10%23.49%–28.59%39.67%36.78%–42.47%19.33%18.23%–20.47%
Plain spectrum · matching head
Reference spectrum33.40%31.10%–35.56%51.86%48.52%–55.13%−18.46 pp−20.22 to −16.7127.88%25.04%–30.64%40.36%37.51%–43.27%25.20%24.27%–26.07%
Question numbernot defined58.75%55.03%–62.37%not defined34.60%31.15%–37.91%46.10%42.76%–49.44%not defined
Numeric code41.22%37.84%–44.45%53.98%50.22%–57.55%−12.76 pp−13.81 to −11.7226.08%23.40%–28.82%40.99%37.77%–44.03%27.99%26.30%–29.52%
Complex spectrum · FiLM head
Reference spectrum8.67%7.85%–9.61%65.56%61.57%–69.44%−56.89 pp−61.14 to −52.5647.29%42.73%–51.92%8.56%7.66%–9.53%25.46%24.22%–26.73%
Reference with stimulus phase24.97%22.60%–27.44%66.96%63.01%–70.83%−41.98 pp−45.04 to −38.9349.24%44.54%–53.97%7.44%6.63%–8.26%69.66%65.97%–73.21%
Question numbernot defined67.95%63.95%–71.82%not defined50.08%45.34%–54.78%7.40%6.58%–8.35%not defined
Numeric code13.13%12.14%–14.17%50.71%47.16%–54.37%−37.57 pp−41.13 to −33.9924.52%22.01%–27.12%13.41%12.44%–14.41%7.16%6.63%–7.79%
Complex spectrum · matching head
Reference spectrum6.52%5.76%–7.34%70.16%66.13%–74.16%−63.64 pp−68.11 to −59.0654.07%49.11%–59.13%6.69%5.88%–7.54%23.99%23.12%–24.83%
Reference with stimulus phase22.47%20.46%–24.45%70.00%65.87%–74.03%−47.53 pp−50.87 to −44.2854.16%49.25%–59.24%6.75%5.93%–7.58%60.73%58.00%–63.39%
Question numbernot defined71.50%67.56%–75.33%not defined56.14%51.31%–61.08%6.78%5.90%–7.69%not defined
Numeric code10.33%9.39%–11.36%50.03%46.53%–53.66%−39.70 pp−43.47 to −36.1225.22%22.72%–27.86%10.68%9.68%–11.79%10.76%9.85%–11.71%
Plain spectrum · no question, softmax run
Plain 32-way softmaxnot defined——35.90%32.30%–39.32%——
One output per question, softmax trainingnot defined——31.45%28.28%–34.49%——
One output per question, one-vs-rest trainingfrom route 3not defined——32.16%28.93%–35.29%——
No training
CCA (no training)from route 380.90%76.59%–84.85%80.90%76.59%–84.85%0.00 ppby construction65.46%59.66%–71.08%66.66%61.33%–71.56%81.70%78.49%–84.57%

Limit. Each arm is one fixed recipe: the matching head is one bilinear design, and the softmax run changes the whole training objective or several parts of the architecture at once. These contrasts compare the recipes; how much frequency information the plain spectrum holds stays open. Both runs were designed with route 3’s results known.

Card 3 · stimulus phase

A random delay with the phase-carrying query

During training only, each window’s complex spectrum got a random delay common to all channels, drawn either from 0–125 ms or from 0 to one period of the training label’s frequency. The head was the FiLM head on the complex spectrum, asked with the reference with stimulus phase, the phase-carrying query (526,465 parameters, trained from scratch); queries and test windows were unchanged. On held-out frequencies the 0–125 ms arm reached 12.51% (11.93%–13.13%) and the one-period arm 13.13% (12.61%–13.68%). The same head without the delay reached 24.97% (22.60%–27.44%). Primary change, 0–125 ms minus no delay: −12.46 pp (−14.84 to −10.25). Seen balanced accuracy fell from 49.24% to 15.70% and 15.28%.

Card 3’s four arms: accuracy with 95% intervals.
ArmHead · features · queryHeld-out frequenciesSeen frequencies, balanced
0–125 ms delayCOMMON-125MSFiLM head · complex spectrum · reference with stimulus phase12.51%11.93%–13.13%15.70%13.71%–17.88%
one-period delayCOMMON-ONE-PERIODFiLM head · complex spectrum · reference with stimulus phase13.13%12.61%–13.68%15.28%13.83%–16.69%
no delay (matched control)L0c-FS-REFc-0FiLM head · complex spectrum · reference with stimulus phase24.97%22.60%–27.44%49.24%44.54%–53.97%
magnitude-reference head on the plain spectrumL0-FS-REFFiLM head · plain spectrum · reference spectrum39.00%36.07%–41.78%31.48%28.28%–34.62%

Only the 0–125 ms minus no-delay contrast is primary; the others are descriptive. 95% intervals from 2,000 hierarchical paired bootstrap draws over people and training seeds (seed 20261007), conditional on the fixed person folds and three seeds; the five fixed rotations are averaged first. None of the 6 contrasts is adjusted for multiplicity. The delay multiplies already-windowed coefficients by one phase ramp, which approximates an onset shift. The one-period range is drawn from the training label’s frequency; the 0–125 ms range ignores the label and equals one period only at the lowest stimulus frequency, so its phase spread differs by target. BETA assigns each target its own stimulus phase, in equal steps between neighbouring frequencies, so the delay also removes information tied to the label. The magnitude-reference head on the plain spectrum (39.00%) differs in features, query and size. All 4 randomized-label checks passed (40 fits); a training-only shortcut through the label-dependent delay remains possible.

The 6 paired contrasts
Each contrast is a paired difference, left minus right, in percentage points.
ContrastTaskComparisonRoleEstimate95% interval
P1Held-out0–125 ms delay minus no delayprimary−12.46 pp−14.84 to −10.25
S1Held-outone-period delay minus no delaydescriptive−11.85 pp−14.29 to −9.51
S2Held-outone-period delay minus magnitude-reference head on the plain spectrumdescriptive−25.87 pp−28.64 to −22.99
S3Held-outone-period delay minus 0–125 ms delaydescriptive+0.62 pp−0.13 to +1.40
S4Seen, balanced0–125 ms delay minus no delaydescriptive−33.54 pp−37.84 to −29.45
S5Seen, balancedone-period delay minus no delaydescriptive−33.97 pp−38.12 to −29.88

Card 4 · stimulus phase

A random phase ramp with magnitude queries

During training only, each window’s complex spectrum got a random delay of up to one stimulus period, applied as one phase ramp across all channels. Queries and test windows were unchanged. With the magnitude reference as the query, the FiLM head reached 30.56% on held-out frequencies (27.81%–33.22%). Against the same head and query on the plain spectrum the change was −8.45 pp (primary; −10.14 to −6.69); against the same head and query on the complex spectrum without the ramp, which reached 8.67%, it was +21.88 pp (secondary; +18.78 to +25.00). Seen balanced accuracy fell from 47.29% to 15.03%. The matching head ended at chance on both tasks. CCA reached 80.90% on the same held-out task. The bet in the thread was that held-out accuracy would clear 39%; the FiLM head reached 30.56% with the magnitude reference and 28.10% with the numeric code.

Card 4’s arms: accuracy with 95% intervals. A dash marks a score that is not defined: a question number cannot ask about a held-out frequency.
Head · queryHeld-out frequenciesm8, the matched comparisonSeen frequencies, balanced
Complex spectrum, trained with the ramp
FiLM head · reference spectrumFS-REF30.56%27.81%–33.22%42.86%39.29%–46.25%15.03%13.50%–16.51%
FiLM head · numeric codeFS-NUM28.10%25.48%–30.58%35.35%32.14%–38.39%10.92%9.72%–12.11%
FiLM head · question numberFS-ID—14.03%13.62%–14.47%3.70%3.49%–3.90%
matching head · reference spectrumMATCH-REF12.93%12.31%–13.51%12.33%11.98%–12.65%3.13%2.95%–3.30%
matching head · numeric codeMATCH-NUM12.42%11.87%–12.99%12.37%11.92%–12.83%3.03%2.81%–3.22%
matching head · question numberMATCH-ID—12.01%11.38%–12.65%3.15%2.89%–3.42%
Complex spectrum, no ramp (matched controls)
FiLM head · reference spectrumL0c-FS-REF8.67%7.85%–9.61%65.56%61.57%–69.44%47.29%42.73%–51.92%
FiLM head · numeric codeL0c-FS-NUM13.13%12.14%–14.17%50.71%47.16%–54.37%24.52%22.01%–27.12%
FiLM head · question numberL0c-FS-ID—67.95%63.95%–71.82%50.08%45.34%–54.78%
matching head · reference spectrumL0c-MATCH-REF6.52%5.76%–7.34%70.16%66.13%–74.16%54.07%49.11%–59.13%
matching head · numeric codeL0c-MATCH-NUM10.33%9.39%–11.36%50.03%46.53%–53.66%25.22%22.72%–27.86%
matching head · question numberL0c-MATCH-ID—71.50%67.56%–75.33%56.14%51.31%–61.08%
Plain spectrum, no ramp
FiLM head · reference spectrumL0-FS-REF39.00%36.07%–41.78%57.18%53.38%–60.95%31.48%28.28%–34.62%
FiLM head · numeric codeL0-FS-NUM41.46%38.15%–44.68%53.76%49.87%–57.49%23.67%21.22%–26.09%
No training
CCA (no training)CCA80.90%76.59%–84.85%80.90%76.59%–84.85%65.46%59.66%–71.08%

Of the 13 contrasts, six are primary (P1–P6) and seven secondary (S1–S7); none is adjusted for multiplicity. 95% intervals from 2,000 hierarchical paired bootstrap draws over people and training seeds (seed 20261007), conditional on the fixed person folds and three seeds; the five fixed rotations are averaged first. CCA has no training and a single seed axis; its only contrast is S7 (−67.97 pp). Held-out scores choose among 8 candidates and seen scores among 32, so the two are different tasks; m8 is the matched comparison for a held-out score, and there the FiLM head with the magnitude reference reached 42.86%. The contrasts against the plain spectrum (P1, P2, S3, S4) compare two feature recipes as well as the ramp: the complex and plain spectra differ in normalisation, size and capacity. The delay range is drawn from each window’s training label. The FiLM and matching heads start from different initial scores, so head comparisons are not initialisation-matched. BETA assigns each target its own stimulus phase, so phase carries real label information. The ramp acts on already-windowed coefficients, keeps magnitudes and the phase between channels, rotates the phases of the harmonics together, and approximates a time shift. All 10 randomized-label checks passed (120 fits); a training-only shortcut through the label-dependent delay remains possible.

The 13 paired contrasts
Each contrast is a paired difference in percentage points: the cell under its code, trained with the ramp, minus the arm in the comparison, which has the same head and query unless they are named. No ramp is the complex spectrum trained without the ramp; the plain spectrum has no ramp.
ContrastTaskComparisonRoleEstimate95% interval
P1FiLM head · reference spectrumHeld-outramp minus plain spectrumprimary−8.45 pp−10.14 to −6.69
P2matching head · reference spectrumHeld-outramp minus plain spectrum (FiLM head · reference spectrum)primary−26.07 pp−28.84 to −23.19
P3FiLM head · question numberSeen, balancedramp minus no rampprimary−46.38 pp−51.06 to −41.71
P4matching head · question numberSeen, balancedramp minus no rampprimary−52.98 pp−57.96 to −48.11
P5FiLM head · numeric codeHeld-outramp minus no rampprimary+14.96 pp+12.10 to +17.63
P6matching head · numeric codeHeld-outramp minus no rampprimary+2.09 pp+0.88 to +3.29
S1FiLM head · reference spectrumSeen, balancedramp minus no rampsecondary−32.26 pp−36.12 to −28.45
S2matching head · reference spectrumSeen, balancedramp minus no rampsecondary−50.94 pp−56.07 to −45.96
S3FiLM head · numeric codeHeld-outramp minus plain spectrumsecondary−13.37 pp−15.60 to −11.30
S4matching head · numeric codeHeld-outramp minus plain spectrum (FiLM head · numeric code)secondary−29.04 pp−32.22 to −25.73
S5FiLM head · reference spectrumHeld-outramp minus no rampsecondary+21.88 pp+18.78 to +25.00
S6matching head · reference spectrumHeld-outramp minus no rampsecondary+6.41 pp+5.40 to +7.34
S7matching head · reference spectrumHeld-outramp minus CCA (no training)secondary−67.97 pp−72.07 to −63.76
Descriptive read-offs: generalisation cost, nn8 and u3
Descriptive read-offs with 95% intervals, defined under methods and limits. A dash marks a score that is not defined.
Head · queryGeneralisation costnn8u3
Complex spectrum, trained with the ramp
FiLM head · reference spectrumFS-REF−12.30 pp−13.71 to −10.9531.62%28.79%–34.41%25.09%24.07%–26.22%
FiLM head · numeric codeFS-NUM−7.25 pp−8.62 to −5.9728.42%25.75%–30.96%14.37%13.62%–15.17%
FiLM head · question numberFS-ID—13.74%13.13%–14.36%—
matching head · reference spectrumMATCH-REF+0.61 pp−0.11 to +1.3213.05%12.49%–13.59%24.20%23.51%–24.92%
matching head · numeric codeMATCH-NUM+0.05 pp−0.64 to +0.7312.50%11.93%–13.10%12.79%12.28%–13.29%
matching head · question numberMATCH-ID—13.46%12.76%–14.17%—
Complex spectrum, no ramp (matched controls)
FiLM head · reference spectrumL0c-FS-REF−56.89 pp−61.14 to −52.568.56%7.66%–9.53%25.46%24.22%–26.73%
FiLM head · numeric codeL0c-FS-NUM−37.57 pp−41.13 to −33.9913.41%12.44%–14.41%7.16%6.63%–7.79%
FiLM head · question numberL0c-FS-ID—7.40%6.58%–8.35%—
matching head · reference spectrumL0c-MATCH-REF−63.64 pp−68.11 to −59.066.69%5.88%–7.54%23.99%23.12%–24.83%
matching head · numeric codeL0c-MATCH-NUM−39.70 pp−43.47 to −36.1210.68%9.68%–11.79%10.76%9.85%–11.71%
matching head · question numberL0c-MATCH-ID—6.78%5.90%–7.69%—
Plain spectrum, no ramp
FiLM head · reference spectrumL0-FS-REF−18.18 pp−19.64 to −16.6943.41%40.04%–46.58%19.61%18.53%–20.63%
FiLM head · numeric codeL0-FS-NUM−12.30 pp−13.42 to −11.1740.96%37.65%–44.13%20.57%19.33%–21.78%
No training
CCA (no training)CCA0.00 pp66.66%61.33%–71.56%81.70%78.49%–84.57%

The matching head’s cost is near zero because its held-out and m8 scores both sit at chance.

Card 5 · the matching computation

Where CCA’s lead comes from

CCA reads the raw window with no training. Which parts of that computation carry its lead over the learned heads?

On the same splits, CCA on the raw two-second window reached 80.90% on held-out frequencies (76.80%–85.13%, person bootstrap). Tapering the window with a Hann function changed it by −7.95 pp (−9.07 to −6.78), to 72.96%. A cropped-spectrum match with no training reached 73.20% on held-out frequencies (68.62%–78.13%), +0.24 pp from Hann-tapered CCA (−0.12 to +0.64). It works on the complex spectral coordinates that the earlier complex-spectrum heads read before their fitted scaling; asked with the reference with stimulus phase, those heads reached 24.97% (FiLM head) and 22.47% (matching head) on card 2, quoted here with no paired contrast. The match fits channel and reference weights for each window without labels.

Averaging each channel’s energy in the reference span reached 55.21% (49.99%–60.90%). One ridge scorer trained on the source people over each channel’s energy fraction at each of the 3 harmonics reached 57.45% (53.20%–62.14%): +2.23 pp over that average (+0.13 to +4.37) and −23.46 pp from CCA (−26.64 to −20.45). On the seen 32-way task it was −0.82 pp from the same average (−2.86 to +1.18).

Card 5 on BETA: the seven prespecified contrasts, in percentage points, each with its 95% interval.
ContrastHeld-out 8-waySeen 32-way balancedNote
Hann-tapered CCA (centred) − CCA (no training)−7.95 pp95% interval −9.07 to −6.78−9.98 pp95% interval −11.10 to −8.84—
Hann-tapered CCA: uncentred − centred0.00 pp95% interval 0.00 to 0.000.00 pp95% interval 0.00 to 0.00Identical results from different definitions.
Cropped-spectrum match (no training) − Hann-tapered CCA (uncentred)+0.24 pp95% interval −0.12 to +0.64+0.19 pp95% interval −0.22 to +0.64Unresolved: the interval spans zero on both tasks.
Cropped-spectrum match (no training) − channel-energy average (joint reference span)+17.98 pp95% interval +14.94 to +21.28+19.94 pp95% interval +17.06 to +23.18This lead bundles three changes: cross-channel mixing, fitting the reference coefficients, and aggregation.
Channel-energy average: per-harmonic spans − joint reference span0.00 pp95% interval 0.00 to 0.000.00 pp95% interval 0.00 to 0.00Identical results from different definitions.
Shared ridge scorer − channel-energy average (per-harmonic spans)+2.23 pp95% interval +0.13 to +4.37−0.82 pp95% interval −2.86 to +1.18Above the average on held-out frequencies; on seen frequencies the interval spans zero.
Shared ridge scorer − CCA (no training)−23.46 pp95% interval −26.64 to −20.45−30.54 pp95% interval −34.76 to −26.67—
Every scorer on both tasks
Card 5 on BETA: accuracy of the seven scorers on held-out and seen frequencies, with 95% intervals.
Name on this pageExport codeHeld-out 8-waySeen 32-way balanced
CCA (no training)CCA-RAW80.90%95% interval 76.80%–85.13%65.46%95% interval 59.94%–71.40%
Hann-tapered CCA (centred)no trainingCCA-HANN-C72.96%95% interval 68.36%–77.86%55.48%95% interval 50.01%–61.63%
Hann-tapered CCA (uncentred)no trainingCCA-HANN-U72.96%95% interval 68.36%–77.86%55.48%95% interval 50.01%–61.63%
Cropped-spectrum match (no training)SUBSPACE-CROP73.20%95% interval 68.62%–78.13%55.67%95% interval 50.20%–61.78%
Channel-energy average (joint reference span)no trainingCHANNEL-JOINT55.21%95% interval 49.99%–60.90%35.74%95% interval 30.77%–41.13%
Channel-energy average (per-harmonic spans)no trainingCHANNEL-HARMONIC55.21%95% interval 49.99%–60.90%35.74%95% interval 30.77%–41.13%
Shared ridge scorerridge fitted on the source peopleSHARED-RIDGE57.45%95% interval 53.20%–62.14%34.92%95% interval 30.83%–39.20%

Every method is given all 40 candidate frequencies; held-out means left out of supervised fitting. The study has 6 training-free scorers and 35 ridge fits, and seven prespecified contrasts on each task. 95% percentile intervals from 2,000 paired person bootstrap draws (seed 20261015); no multiplicity correction.

The cropped coordinates match the inputs the earlier heads read on the 6 rows checked; the heads’ fitted scaling is invertible but changes the distances the match uses. Checked: CCA reconstructed on all 11,200 windows, the training-free scorers spot-checked on 6 rows, all 35 ridge fits refitted independently.

Card 6 · a learned correction to CCA

Learning on top of CCA

If CCA is kept and a learned part only corrects its score, does accuracy on held-out frequencies rise?

Keeping temporal CCA and adding a bounded learned correction to its score reached 86.15% on held-out frequencies (82.84%–89.35%), against 80.90% for CCA alone: +5.24 pp (+3.91 to +6.62). On the seen 32-way task it reached 73.19% against 65.46% (+7.73 pp, +6.10 to +9.46). The correction can reorder only candidates whose CCA correlations lie within 0.2 of each other. Of all held-out decisions, it turned 7.39% from wrong to right and 2.14% from right to wrong. Giving the energy head six canonical correlations from the cropped-spectrum match, which makes it the adapted head, added +17.51 pp on held-out frequencies (+15.46 to +19.70); that gain bundles several matching operations.

The candidate frequencies still supply CCA’s sine and cosine references and the numeric code of each frequency. Filter-bank CCA and supervised spatial templates were not compared. The adapted head against CCA alone was not a planned contrast and has no interval. Each trained arm is the mean of three fixed training seeds. Six prespecified contrasts on each task; 95% percentile intervals from 2,000 paired person bootstrap draws (seed 20261015), conditional on the fitted models and the three fixed training seeds; no multiplicity correction.

All six arms, the six contrasts and the decision changes
Card 6 on BETA: accuracy of the six arms on held-out and seen frequencies, with 95% intervals.
Name on this pageExport codeHeld-out 8-waySeen 32-way balanced
Energy headtrained on the source people and seen frequenciesENERGY-FS63.05%95% interval 58.97%–67.50%43.34%95% interval 39.09%–47.83%
Adapted headtrained on the source people and seen frequenciesADAPT-FS80.56%95% interval 76.98%–84.13%64.06%95% interval 59.56%–68.85%
Cropped match with learned correctiontrained on the source people and seen frequenciesCROP-RESIDUAL79.24%95% interval 75.24%–83.37%63.35%95% interval 58.39%–68.72%
CCA with learned correctiontrained on the source people and seen frequenciesRAW-RESIDUAL86.15%95% interval 82.84%–89.35%73.19%95% interval 68.48%–77.99%
Cropped-spectrum match (no training)CCA-CROP73.20%95% interval 68.62%–78.13%55.67%95% interval 50.20%–61.78%
CCA (no training)CCA-RAW80.90%95% interval 76.80%–85.13%65.46%95% interval 59.94%–71.40%
Card 6 on BETA: the six prespecified contrasts, in percentage points, each with its 95% interval.
ContrastHeld-out 8-waySeen 32-way balancedNote
Adapted head − energy head+17.51 pp95% interval +15.46 to +19.70+20.72 pp95% interval +18.54 to +23.01—
Adapted head − cropped-spectrum match (no training)+7.36 pp95% interval +5.33 to +9.32+8.38 pp95% interval +5.91 to +10.82—
Cropped match with learned correction − adapted head−1.32 pp95% interval −2.46 to −0.23−0.71 pp95% interval −1.95 to +0.54On held-out frequencies the correction on the cropped match is below the adapted head.
Cropped match with learned correction − cropped-spectrum match (no training)+6.04 pp95% interval +4.90 to +7.17+7.67 pp95% interval +6.26 to +9.13—
CCA with learned correction − CCA (no training)+5.24 pp95% interval +3.91 to +6.62+7.73 pp95% interval +6.10 to +9.46—
CCA with learned correction − cropped match with learned correction+6.91 pp95% interval +5.60 to +8.16+9.84 pp95% interval +8.60 to +11.04The two corrections start from different baselines: CCA on the raw window, and the cropped match.
Card 6 on BETA: how the correction changed CCA’s decisions, as shares of all decisions on each task, averaged over three seeds, then five rotations, then 70 people.
Decision changeHeld-out 8-waySeen 32-way balancedWhat it counts
Wrong to right7.39%10.66%CCA alone chose a wrong frequency; with the correction the decision was right.
Right to wrong2.14%2.93%CCA alone chose the right frequency; with the correction the decision was wrong.
Wrong to a different wrong2.59%7.63%Both decisions wrong, on different frequencies.
Unchanged, right78.76%62.53%Both chose the right frequency.
Unchanged, wrong9.12%16.25%Both chose the same wrong frequency.
Changed in total12.12%21.22%The first three rows together.

Decisions whose two largest CCA correlations differed by more than 0.2 changed 0 times, out of 11,403 held-out and 6,012 seen prediction instances (counted over the 3 seeds and 5 rotations).

Card 7 · a second dataset

The same correction on Wearable-102

Run unchanged on a second dataset, does the learned correction still change CCA’s score?

Wearable-102: 102 people, 12 targets from 9.25 to 14.75 Hz, 12,240 two-second windows per sensor, dry and wet headbands, recordings as stored; 105 unchanged BETA models. The documentation cannot rule out that some people also appear in BETA.

The 105 models of card 6 (7 participant folds × 5 frequency rotations × 3 seeds), trained on BETA, were run unchanged on Wearable-102. On the same windows the models averaged 65.45% on dry electrodes and 81.04% on wet, and matched CCA 65.38% and 81.65%. Paired with matched CCA, the models changed the score by +0.07 pp dry (−0.71 to +0.91) and −0.61 pp wet (−1.48 to +0.23); both intervals include zero, and no equivalence margin was set. The models’ score is CCA plus a bounded learned term, so the change from matched CCA is what the learned term adds.

Card 7: accuracy among the 12 Wearable-102 targets, by sensor, with 95% intervals.
Wearable-102 sensorCCA with learned correctionMatched CCAChange from matched CCACropped-spectrum check (Wearable-102), diagnostic
Wearable-102, dryprimary · 12,240 windows65.45%95% interval 60.82%–70.08%65.38%95% interval 60.73%–70.06%+0.07 pp95% interval −0.71 to +0.9157.78%95% interval 52.79%–62.89%
Wearable-102, wetprimary · 12,240 windows81.04%95% interval 77.14%–84.49%81.65%95% interval 77.60%–85.14%−0.61 pp95% interval −1.48 to +0.2373.01%95% interval 68.46%–77.18%
Wearable-102, both sensorssecondary · 24,480 windows73.24%95% interval 69.40%–76.88%73.51%95% interval 69.71%–77.22%−0.27 pp95% interval −0.95 to +0.4065.40%95% interval 60.94%–69.69%

Matched CCA here uses sine and cosine references up to the third harmonic, as the models’ own CCA term does, and reached 65.38% dry and 81.65% wet; the dry-versus-wet page’s CCA uses references up to the fourth harmonic on the same windows and reached 65.47% and 81.56%.

A cropped-spectrum check (Wearable-102) reached 57.78% dry and 73.01% wet; it is shown as a diagnostic only.

Limits. Wearable-102’s stored amplitude unit is undocumented and the correction reads amplitude spectra, so these are as-stored figures. Its windows start 0.14 s after stimulus onset and BETA’s at onset, and hardware, reference, people and frequency grid change at the same time, so no single factor is isolated. Both methods receive the 12 candidate frequencies. Each person’s accuracy is computed for each of the 105 models and averaged over models, then over people, with no ensemble, refit or model choice. This task on other recordings stands apart from the BETA results of cards 1 to 6.

Dry and wet are the two primary contrasts and both sensors the secondary one. 95% percentile intervals from 2,000 paired person bootstrap draws (seed 20261015), conditional on the fixed 105 source models; no multiplicity correction.

Card 8 · in progress

A shared scorer on the cross-spectral matrix

Next in the thread: one set of learned weights scores each candidate’s channel-by-channel matrices at the fundamental and two harmonics, with no per-frequency parameters: fixed learned linear readouts of cross-spectral features, with prescribed trial-dependent normalization or whitening. The design is frozen and the run is in progress; its results join this page after review.

Methods & limits

Methods and limits

Definitions

Intervals, card by card

No interval is adjusted for multiple comparisons. Differences are paired and computed before rounding, so a printed difference can differ in its last digit from the difference of the printed levels.

Two engineering disclosures

Card 2 scored the earlier question-number and numeric-code runs through a reviewed compatibility reader, because those files lacked a field listing their questions. The softmax run’s pre-freeze guard was changed to hash file contents. Neither change touched training, predictions or results.

Not run

Not published here

Credits, licences and consent

BETA

Bingchuan Liu et al. · BETA: A Large Benchmark Database Toward SSVEP-BCI Application (2020), doi:10.3389/fnins.2020.00627.

Cards 1 to 6, and the source of the models card 7 runs on Wearable-102.

Attribution required. Participant consent described use for non-commercial scientific research, a narrower operational boundary than the copyright license; minors required parental consent.

Cohort aggregates only; no participant records, EEG signals, or individual predictions.

Source ↗ · CC BY 4.0

BETA authors’ corrigendum (Description.pdf)

The stimulus phases of the reference with stimulus phase (cards 2 and 3), converted to the cosine convention with zero latency. Read from the Hugging Face mirror Bingchuan/BETA (revision d4290c02…).

Description.pdf ↗

CBraMod

The frozen CBraMod features of card 1 (L1), the ones route 3 used. No weights are distributed.

Code: MIT · Weights: Apache-2.0 (official model card)

CBraMod’s page · Code ↗

Wearable-102 · An Open Dataset for Wearable SSVEP-Based Brain-Computer Interfaces

Zhu, F., Jiang, L., Dong, G., Gao, X., & Wang, Y. (2021). An Open Dataset for Wearable SSVEP-Based Brain-Computer Interfaces. Sensors, 21(4), 1256. https://doi.org/10.3390/s21041256

Zhu, F., Jiang, L., Dong, G., Gao, X., & Wang, Y. (2021). An Open Dataset for Wearable SSVEP-Based Brain-Computer Interfaces (Version 4) [Data set]. Figshare. https://doi.org/10.6084/m9.figshare.13560281.v4

The paper describes consent for noncommercial scientific research.

Computed from the official Tsinghua BCI Lab author mirror snapshot acquired 2026-09-20; the mirror itself has no separate DOI or version number.

Dataset record ↗ · Readme ↗ · CC BY 4.0

Derived analyses by BCI Report, aggregates only; no raw data are redistributed.

Data source: new-ssvep-frequencies-update.json · schema bci-report-new-ssvep-frequencies-update-v1.

Cite this page

BCI Report (2026). What lets a decoder answer an SSVEP frequency it never trained on? https://bci.report/topics/new-ssvep-frequencies/

Figures from release new-ssvep-frequencies-update-20261020 (2026-10-20). Cite the upstream datasets as well: their credits are on this page.

Every release is archived on Zenodo: doi:10.5281/zenodo.23123296. BibTeX for the site and its releases → · CITATION.cff ↗