Skip to content
#software testing Open access

emgteach: an open-source teaching platform for surface electromyography

Sep 2026 · Zenodo (CERN European Organization for Nuclear Research)

Abstract

emgteach is an open-source Python package that provides a unified PySide6 desktop application for real-time acquisition, offline analysis and maximum voluntary contraction (MVC) normalisation of surface electromyography (sEMG) signals. It is designed for hands-on biopotential acquisition in undergraduate physiology teaching laboratories, and is meant to be set up by instructors with different levels of technical background and used directly by students during a practical session. The application is hardware-agnostic through a common AcquisitionDevice interface and ships with two interchangeable low-cost backends: BITalino (revolution) over Bluetooth, and an Arduino RedBoard Plus + MyoWare 2.0 over USB serial (open firmware included). A single setting switches between them. Main features: Three-tab GUI (Acquisition, Analysis, MVC normalisation) wrapping a reusable, Qt-free analytic core. Bilingual interface (English / Spanish) with automatic start-up language detection and an in-app language switch. Two-channel acquisition (e.g. agonist/antagonist) with a stacked two-channel live view. Automatic contraction-onset detection (baseline + k·SD threshold) stored as EDF+ annotations. Muscle-load analysis (Jonsson APDF): static (P10), median (P50) and peak (P90) %MVC levels, both offline and as a live monitor with warning/danger zones. One-click PDF session and MVC/muscle-load reports. Reliable EDF+ output using a buffered-write pattern that avoids a silent file-corruption artefact during continuous streaming. Assisted selection of significant fragments, with an editable fragment editor (detection parameters and envelope-filter cut-offs) applied to the analysis. CSV export of results and a live signal-quality check during recording. Classroom mode: a read-only live dashboard served over the local network so students follow the session on their phone/tablet browser (no install), with a per-session access code so the follower link only works while the broadcast is running. Kinematics via the BITalino accelerometer (v2.0.0): a movement-versus-EMG analysis panel, a guided force-velocity acquisition wizard (an MVC maximum followed by cued quick lifts, each auto-marked with its load), and a force-velocity study that turns one recording into the load-velocity, Hill force-velocity, power and recruitment curves. Since v3.0.0 the accelerometer's input is a stated convention (muscle on A1, accelerometer on A2) rather than a selectable channel. Configuration by practical (v3.0.0): three practicals — one muscle, agonist/antagonist and muscle kinematics — fix the channel count, the accelerometer and what each tab offers, replacing the settings that were previously chosen one at a time. The session as a single file with its phases marked inside it (v3.0.0): warm-up, calibration repetitions, preparation and recording, so the maximum voluntary contraction every percentage is measured against travels with the signal, and a derived (tuned) recording carries the decisions taken on screen. Teaching layer (v3.0.0): a guided tour over the interface, contextual help on every box, one analysis row per contraction with its electromechanical delay, and an agonist/antagonist co-activation index (Falconer-Winter) computed per marked phase in %MVC. Handling at the laboratory bench (v3.1.0): the fragment editor as a three-step procedure that counts the marked contractions against the protocol and lets each be kept, dropped, split or dragged, with the detection sensitivity set per practical and recorded in the report and the CSV; a single running instance with a start-up splash; pictures of the electrode placement and the calibration in the guided tour; and a printable sheet for each station of the agonist/antagonist practical. Patch 3.1.1: the co-activation of a named window is read on the uncut recording, with each muscle's resting level taken from the whole recording phase, so choosing fragments no longer measures the antagonist against a rest taken from a signal with no rest in it. Patch 3.1.2: the calibration asks for a brief, explosive maximal jerk of each muscle's own movement (wrist flexion with the fist clenched for the forearm flexor, wrist extension with the hand open for the extensor) instead of a sustained push against something fixed, and releases carry the source only. Version 3.2.0: the MVC reference is the highest point the envelope reaches across the calibration repetitions kept (it was the highest 0.2 s running mean), and everything judged against it is measured the same way; the co-activation floor is 4.5 % of that reference; each fatigue segment's MDF is computed over the analysis band. A recording reanalysed with 3.2.0 gives % MVC figures different from those of 3.1.2. Version 3.3.0: the task maximum is read on the whole recording phase, from the start of the recording to the end of the file, whatever fragments are chosen (a maximum of the phase, not of the selection); panel 3 draws each spectrum scaled to unit area, with the MDF and the total power in the legend. Version 3.4.0: the Analysis tab's panels are numbered 1 to 12 from one table, the same in every practical, and every title says how to read its panel and names the muscle when it shows one; the two muscles' raw traces share panel 1 with an axis each; panel 8 is a path through time. Nothing computed changes. Version 3.5.0: a BITalino simulated by the application itself (the address «simulada»), which speaks the board's protocol byte for byte, so the acquisition, the calibration, the recording and the classroom broadcast can be prepared and taught where the board is not at hand; a connection diagnostic for the station, built without Qt or scipy; the event log of every recording saved beside it and a recovery for a recording whose process died before it could be closed; and the session report and the CSV export repaired, the report's table of contractions having lost four of its seven columns off the page. Version 3.6.0: the simulated board obeys the calibration — the wizard tells the device when it is asking for a maximal effort and the synthetic subject gives it, so a session rehearsed without hardware reads in % MVC as a real one does (about a half for the alternating gestures, 40 % for the grip, which co-activates) instead of above 100 % of its own maximum. Nothing computed changes. Version 3.7.0, the version the article describes: the guided session goes on into the task — four panels, each with a row of boxes that maps its phase, the free manoeuvres counted as the muscle clears a tenth of its own maximum for 0.30 s, and the grip as one hold of about eight seconds squeezing a ball — and the force-velocity study has the same map; the fragment editor proposes each row from where its contraction leaves rest to where it returns, and in the kinematics practical one row per lift the wizard marked, each load going to the lift its cue announced; the pair practical names its pair; one reference electrode, on the olecranon, and both pairs placed 5 cm from the epicondyle of their own side; the recording says it is connecting until the board answers and gives up with a warning after 20 s without holding the window. emgteach runs on Windows, macOS and Linux with Python 3.10–3.12, is covered by a suite of 1376 automated tests, and is released under the GPL-3.0-or-later license. Source code, documentation and issue tracker: https://github.com/aagisto-maker/emgteach Started in 2025 as the author's own Python programs over open-source libraries and the boards' interfaces; brought together into a single application and developed since with the assistance of an AI coding tool (Claude Code, Anthropic) under the author's specification, review and hardware validation. See the README section "How this software was developed". The anatomical base of the electrode-placement figure and of the guided tour's pictures is an AI-generated image of two forearms, made without text or electrodes; the muscles, electrodes and labels are drawn over it by the figure script.

View source

Similar papers

#computer vision Review Sep 2017

Agile Software Development Methods: Review and Analysis

This publication proposes a definition and a classification of agile software development approaches and analyses ten software development methods that can be characterized as being "agile" against the defined criterion.

P. Abrahamsson, O. Salo, Jussi Ronkainen et al. · 727 citations · ⚡54
#computer vision Jun 2008

The impact of agile practices on communication in software development

The study shows that agile practices improve both informal and formal communication, but indicates that, in larger development situations involving multiple external stakeholders, a mismatch of adequate communication mechanisms can sometimes even hinder the communication.

M. Pikkarainen, Jukka Haikara, O. Salo et al. · 401 citations · ⚡48
#machine learning Review Open access Oct 2014

Software development in startup companies: A systematic mapping study

The results indicate that software engineering work practices are chosen opportunistically, adapted and configured to provide value under the constrains imposed by the startup context.

Nicolò Paternoster, Carmine Giardino, M. Unterkalmsteiner et al. · 394 citations · ⚡54
#computer vision Review Mar 2008

Agile methods in European embedded software development organisations: a survey on the actual use and usefulness of Extreme Programming and Scrum

The results show that the embedded industry has been able to apply agile methods in its development processes and that the appreciation of the agile methods and their individual practices appears to increase once adopted and applied in practice.

O. Salo, P. Abrahamsson · 238 citations · ⚡9
#computer vision Open access Jul 2017

What happens when software developers are (un)happy

Consequences of happiness and unhappiness that are beneficial and detrimental for developers' mental well-being, the software development process, and the produced artifacts are found.

D. Graziotin, Fabian Fagerholm, Xiaofeng Wang et al. · 236 citations · ⚡13
#computer vision Open access Oct 2004

Mobile-D: an agile approach for mobile application development

The Mobile-D approach is briefly outlined here and the experiences gained from four case studies are discussed, which helped develop an agile development approach for mobile application development.

P. Abrahamsson, Antti Hanhineva, H. Hulkko et al. · 225 citations · ⚡18

Related blog posts

MIT News · Artificial Intelligence Oct 2, 2026

Documenting the tech worker movement

Writing as a participant and researcher, PhD student JS Tan SM ’22 has co-authored a new book about the rise of tech worker protests and the employer backlash that followed.

GPT-Lab Sep 23, 2026

Requirements Don’t Live in Isolation: What We’re Exploring with Req-Space

Requirements in large systems rarely exist in isolation. Their meaning depends on the wider project context - other requirements, policies, decisions, tests, and implementation details. That becomes especially important when AI is used for review, because spotting a possible conflict or gap is only the beginning. ReqSpace explores how AI, visualisation, and connected project context can help reviewers understand those findings, trace the relationships behind them, and focus on the questions that…

GPT-Lab Sep 17, 2026

Beyond Prompt Engineering: The Role of Tacit Knowledge in Software Engineering

AI is making software generation faster, but speed does not remove the need for expertise. As more work is delegated to AI, tacit knowledge may become one of the most important human advantages in software engineering. The post Beyond Prompt Engineering: The Role of Tacit Knowledge in Software Engineering appeared first on GPT-Lab.

We use cookies to run the site and, with your consent, for analytics and to show ads. See our Cookie Policy.