Skip to content

Signal

What each stream is, and which to use for what. uMyo is optimised for control, not clinical physiology — for physiology you’d want a 3-electrode setup with heavy analog 50/60 Hz filtering; uMyo trades that for a compact, wireless, control-grade signal.

  • 1 channel, sampled at ~1150 Hz (actually ~1148; the ADC pauses every few seconds to check the battery, leaving one 8-sample gap — irrelevant for control, a minor artefact for raw analysis).
  • Raw samples are int16, 8 per frame → ~144 frames/s. The AD8293 (gain 160, ~500 Hz bandwidth) sets the frequency ceiling.
  • Which to use: for control, the device-side processed data (FFT bins / muscle activity) is more robust than the raw stream — raw over the radio can carry gaps whose artefacts show up in downstream processing. Raw is there when you want it (research, your own filtering); processed is the reliable default.
  • An 8-point FFT over the 8 samples per packet → 4 bins, ~143 Hz each: bin0 ~0–143 Hz (DC/low), bin3 ~430–575 Hz (highest).
  • Magnitude = √(re² + im²), unsigned, no averaging (raw per frame). Resting noise floor ≈ 20.
  • Effort / muscle-activity ≈ bins 2 + 3 (the higher bands), exponentially smoothed. Over BLE the device sends a pre-computed avg_muscle_level; over the base it sends raw bins, so you derive it yourself: avg = 0.9·prev + 0.1·(bin2 + bin3).
  • Colour-scale reference (calibrated to the raw magnitudes): blue ≈ 10, green ≈ 100, red ≈ 1000.
  • Accelerometer: ±2 g, 16384 LSB/gg = raw / 16384. Fields ax, ay, az. (Good for tap/motion detection.)
  • Gyroscope: ±500 dps. Computed on-device but not sent on shipped base firmware (that slot carries legacy euler); available over BLE S2-aux and on the drop-euler-add-gyro firmware.
  • Quaternion: firmware-fused orientation, w, x, y, z, scaled ±32000 = ±1.0 (normalise by /32000). Use the quaternion for orientation — euler is deliberately dropped (gimbal lock, never-negative-pitch pathologies).
  • Magnetometer: QMC5883P, mx, my, mz — for absolute heading, needs a calibration pass.
  • Battery (base path): raw ADC → mV = 2000 + raw × 10 (~3000–4200 mV charged); pct ≈ (mV − 3100) / 10.
  • RSSI (base path): the raw nRF52 RSSISAMPLE register — not dBm, range ~0–127, lower = stronger; a display quality ≈ (90 − rssi) × 1.6.
  • Sample counter: adc_data_id, an 8-bit per-packet counter that wraps at 256 (~144/s). Loss detection: delta = (new − prev) & 0xFF; delta > 1 means dropped packets (8 EMG samples each).