Summary
MUSE_ATHENA_EEG_SCALE_FACTOR appears to be the 12-bit-era Muse LSB applied to 14-bit Muse S Athena samples, making BrainFlow's Athena EEG output ~4.55× too large in µV. Additionally, the Athena path does not subtract the 14-bit midpoint, so the output carries a large DC pedestal.
BrainFlow originally shipped the value that matches Interaxon's published spec, and it was changed later without discussion.
The constant
Current (src/board_controller/muse/inc/muse_athena_constants.h):
#define MUSE_ATHENA_EEG_SCALE_FACTOR 0.40293040293040294
At introduction in #779 (commit 7b2e41d3) it was:
#define MUSE_ANTHENA_EEG_SCALE_FACTOR (1450.0 / 16383.0) // = 0.0885064
It was replaced with the bare literal in commit aa4c3226 ("generic muse improvements", #828). That commit also touched the accelerometer and gyro constants, but those were precision refinements to the same values:
| constant |
before |
after |
ratio |
| accelerometer |
0.0000610352 |
0.00006103515625 |
×0.9999993 |
| gyro |
-0.0074768 |
-0.007476806640625 |
×1.0000009 |
| EEG |
1450.0/16383.0 |
0.40293040293040294 |
×4.5526 |
The EEG change is a different value, not a refinement, and I couldn't find any discussion of it (the PR body is empty and there are no review comments).
Note 0.40293040293040294 == 1650/4095 exactly — a 12-bit denominator. The Athena samples are extracted as 14-bit (extract_lsb_bits(data, bit_start, 14) in muse_athena.cpp), which has been unchanged since #779.
Why 1450/16383 looks correct
Interaxon's published Muse S Athena specification states:
Sample Resolution: 14 bits / sample
Aux Channel Connection: Input range: 725uV AC signal (1.45mVp-p) with 1.45V DC offset; Aux channels are amplified like all other EEG channels
1450 µV p-p ÷ 2^14 = 1450/16383 — i.e. the original constant is exactly the published input range divided by the published bit depth.
For contrast, the Muse 2 spec sheet (v1.0) states "12 bits / sample" with a "1.5mV p-p" input range, giving an LSB of ~0.37–0.41 µV. 0.40293 sits in that Gen-2 range — it looks like a correct previous-generation constant carried onto Athena.
Empirical check against hardware
I recorded 90 s of eyes-closed EEG from a Muse S Athena (fw 3.1.19, Athena_RevE) and used the ADC clipping level as a calibration reference. Channels that rail hit exactly ±8192 counts:
| constant |
implied clipping level |
1450/16383 |
±725 µV = 1.45 mVpp — matches the published input range |
0.40293… |
±3300 µV = 6.60 mVpp — no Interaxon document states this |
Plausibility of the resulting signal (band-limited 1–40 Hz RMS, same recording, verified 10.0 Hz alpha peak at TP9/TP10):
| channel |
counts |
1450/16383 |
0.40293… |
| TP9 |
227 |
20.1 µV |
91.5 µV |
| AF8 |
235 |
20.8 µV |
94.8 µV |
| TP10 |
290 |
25.7 µV |
116.9 µV |
| AF7 (poor contact, 15–38% railed) |
1043 |
92.3 µV |
420.3 µV |
Under 1450/16383 the three well-contacted channels land in the normal range for a referential temporal derivation and the known-bad channel is the outlier. Under 0.40293 every channel — including ones carrying a clean alpha rhythm — reads well above physiological amplitudes.
Second issue: missing midpoint subtraction
muse_athena.cpp (~lines 785, 793) scales the raw unsigned value directly:
package[...] = (double)raw * MUSE_ATHENA_EEG_SCALE_FACTOR;
Since raw is an unsigned 14-bit value, the output sits on a DC pedestal of roughly half full-scale rather than being zero-centred. BrainFlow's own legacy Muse path does subtract its midpoint ((val - 0x800) * 125.0/256.0), and muse-lsl / OpenMuse / BlueMuse all subtract 1 << 13 before scaling for Athena.
Suggested fix
#define MUSE_ATHENA_EEG_SCALE_FACTOR (1450.0 / 16383.0)
#define MUSE_ATHENA_EEG_MIDPOINT 8192.0 // 1 << 13
package[...] = ((double)raw - MUSE_ATHENA_EEG_MIDPOINT) * MUSE_ATHENA_EEG_SCALE_FACTOR;
Caveat / open question
Interaxon's Athena sheet gives 1.45 mVpp, while an older Muse developer doc gives the EEG range as 1682.815 µV — a ~16% spread (LSB 0.0885 vs 0.1027). That ambiguity doesn't affect the 4.55× question but does mean the absolute figure carries ~±16% until someone injects a known-amplitude signal and reads the counts (100 µV p-p should give ~1130 counts p-p under 1450/16383). I don't have a calibration source to do that yet; happy to run it if I get access to one.
Related discussions elsewhere: muse-lsl PR #228 flags the same 4.55× disagreement as unresolved, OpenMuse issue #2 asks for the scalings to be checked, and BlueMuse PR #83 identifies 0.40293040293040294 as 1650/4095, the legacy 12-bit scale.
Environment: BrainFlow 993cb6ca, macOS 26.5 arm64, Muse S Athena fw 3.1.19.
Summary
MUSE_ATHENA_EEG_SCALE_FACTORappears to be the 12-bit-era Muse LSB applied to 14-bit Muse S Athena samples, making BrainFlow's Athena EEG output ~4.55× too large in µV. Additionally, the Athena path does not subtract the 14-bit midpoint, so the output carries a large DC pedestal.BrainFlow originally shipped the value that matches Interaxon's published spec, and it was changed later without discussion.
The constant
Current (
src/board_controller/muse/inc/muse_athena_constants.h):At introduction in #779 (commit
7b2e41d3) it was:It was replaced with the bare literal in commit
aa4c3226("generic muse improvements", #828). That commit also touched the accelerometer and gyro constants, but those were precision refinements to the same values:0.00006103520.00006103515625-0.0074768-0.0074768066406251450.0/16383.00.40293040293040294The EEG change is a different value, not a refinement, and I couldn't find any discussion of it (the PR body is empty and there are no review comments).
Note
0.40293040293040294 == 1650/4095exactly — a 12-bit denominator. The Athena samples are extracted as 14-bit (extract_lsb_bits(data, bit_start, 14)inmuse_athena.cpp), which has been unchanged since #779.Why
1450/16383looks correctInteraxon's published Muse S Athena specification states:
1450 µV p-p ÷ 2^14 =
1450/16383— i.e. the original constant is exactly the published input range divided by the published bit depth.For contrast, the Muse 2 spec sheet (v1.0) states "12 bits / sample" with a "1.5mV p-p" input range, giving an LSB of ~0.37–0.41 µV.
0.40293sits in that Gen-2 range — it looks like a correct previous-generation constant carried onto Athena.Empirical check against hardware
I recorded 90 s of eyes-closed EEG from a Muse S Athena (fw 3.1.19,
Athena_RevE) and used the ADC clipping level as a calibration reference. Channels that rail hit exactly ±8192 counts:1450/163830.40293…Plausibility of the resulting signal (band-limited 1–40 Hz RMS, same recording, verified 10.0 Hz alpha peak at TP9/TP10):
1450/163830.40293…Under
1450/16383the three well-contacted channels land in the normal range for a referential temporal derivation and the known-bad channel is the outlier. Under0.40293every channel — including ones carrying a clean alpha rhythm — reads well above physiological amplitudes.Second issue: missing midpoint subtraction
muse_athena.cpp(~lines 785, 793) scales the raw unsigned value directly:Since
rawis an unsigned 14-bit value, the output sits on a DC pedestal of roughly half full-scale rather than being zero-centred. BrainFlow's own legacy Muse path does subtract its midpoint ((val - 0x800) * 125.0/256.0), and muse-lsl / OpenMuse / BlueMuse all subtract1 << 13before scaling for Athena.Suggested fix
Caveat / open question
Interaxon's Athena sheet gives 1.45 mVpp, while an older Muse developer doc gives the EEG range as 1682.815 µV — a ~16% spread (LSB 0.0885 vs 0.1027). That ambiguity doesn't affect the 4.55× question but does mean the absolute figure carries ~±16% until someone injects a known-amplitude signal and reads the counts (100 µV p-p should give ~1130 counts p-p under
1450/16383). I don't have a calibration source to do that yet; happy to run it if I get access to one.Related discussions elsewhere: muse-lsl PR #228 flags the same 4.55× disagreement as unresolved, OpenMuse issue #2 asks for the scalings to be checked, and BlueMuse PR #83 identifies
0.40293040293040294as1650/4095, the legacy 12-bit scale.Environment: BrainFlow
993cb6ca, macOS 26.5 arm64, Muse S Athena fw 3.1.19.