Example 08 · FC + EMG front end

Prosthetic Hand

Reading what a prosthetic hand’s wearer is trying to do from the muscles left in their forearm, and adapting to each new wearer on the device itself. We tested our 4,423-parameter network on real recordings from 19 people it had never seen, including 11 with below-elbow amputations.

The prosthesis it's designed for. Electrodes in the socket pick up the forearm's muscle signals, and the controller turns them into commands for the wrist and hand.
people it had never seen, all real recordings, 11 of them amputees
19
of calibration to fine-tune it to a new wearer, on the device
Under a minute
of wrong movements removed by confidence-based rejection
Over half
parameters, and as many multiply-adds per decision
4,423

Where it's used

Control that reads the whole forearm

Most powered prosthetic hands still use two electrodes: one muscle opens the hand, another closes it, and switching to the wrist takes a special signal. It’s reliable but slow, and it gets slower with every movement a modern hand adds.

Pattern-recognition control reads a whole ring of electrodes instead. Even with the hand gone, the muscles that used to move it still contract, and every movement the wearer attempts leaves its own pattern around the forearm. The decoder has to work inside the prosthesis, on a battery, within about 100 to 150 ms, and it has to be calibrated to its wearer every time the prosthesis goes on.

  • Powered prosthetic hands and wrist rotators
  • A decision every 50 ms, from 8 electrodes in the socket
  • Built to run inside the prosthesis, on battery, with no network
  • Recalibrated each time it's put on

The data

Real recordings, including 11 amputees

We used Ninapro, a research database of forearm muscle signals recorded while people copied hand and wrist movements from a screen. The network decides between seven intents: rest, open or close the hand, rotate the wrist either way, or flex or extend it. Everything we report comes from people it never saw in training.

Training · 28 people
intact arms, the people the shared model learns from
Validation · 4 people
checked after each round of training, so we keep the best model
Test · 8 people
intact arms, never seen in training
Test · 11 people
below-elbow amputees, moving their phantom hand, never seen in training
Raw muscle signals from the ring of 8 electrodes, for four movements by one person the model never trained on. It's the pattern across the ring, not any one signal, that identifies the movement.

How we built it

A shared start, finished for each wearer

Every 50 ms, the device looks at the last 200 ms on each electrode and computes four classic features: how hard the muscle underneath is contracting, and how quickly the signal is changing. That’s 32 numbers per decision, scaled to the wearer’s own calibration so electrode gain, skin contact and strength drop out.

  1. 01

    Start from a shared model

    Trained on 28 people, so a new wearer starts from the general shape of the problem.

  2. 02

    Calibrate to the wearer

    The wearer holds each movement once, in under a minute, and the device fine-tunes the network to them on the spot.

  3. 03

    Decide carefully

    Anything under 80% confidence counts as rest, and the hand follows the majority of the last five decisions.

Every movement has its own pattern

Flexing and extending the wrist light up opposite sides of the forearm, and a fist lights up the flexor side. An open hand and the two wrist rotations are much fainter, because spreading the fingers takes little force and the muscles that rotate the forearm lie deep. Those are the movements the network has to work hardest to tell apart.

How active each electrode is, on average, for each movement across the 28 training subjects. Red is more active than average, blue less.
The whole decoding pipeline, all of it on the microcontroller. Calibration, in yellow, supplies the scaling and fine-tunes the network.

It learns on the device. Unlike our other examples, this firmware keeps training after it ships. Each fitting fine-tunes the network to its wearer from under a minute of calibration, right there in the prosthesis, with no computer or cloud involved.

Results

Measured against the commercial standard

We compared our fine-tuned network with LDA, the linear classifier commercial pattern-recognition controllers use, on the same calibration data. For people with intact arms it came out 3 to 8 points ahead. For the amputees it matched LDA after one calibration, and pulled about 2 points ahead with more.

More calibration, more accuracy

Calibration time is the biggest lever a wearer has. A second pass through the movements, about 50 seconds more, adds 5 to 7 points, and the curve is still climbing at four. A shared model with no fine-tuning at all does far worse, which is exactly why calibrating on the device matters: no two people’s muscle patterns are alike.

Accuracy against how much calibration each decoder gets, for intact subjects and amputees. The dashed line is the shared model with no fine-tuning.
What confidence rejection trades, over all 19 held-out people, as the threshold rises. Below each threshold, how long the hand takes to respond.

A hand that pauses beats one that guesses

Accuracy on clean windows isn’t what a wearer feels, so we also streamed every held-out session through the firmware decoder, transitions and all. Treating low-confidence decisions as rest cut wrong movements by more than half for intact subjects, from 26.5% to 11.9%, and by almost two-thirds for the amputees.

The trade is a more cautious start, and the threshold is a per-wearer setting a clinician can tune.

On the device

Calibration and control on one microcontroller

The firmware targets an STM32U585 with TI’s ADS1298 8-channel biopotential front end, and cross-compiles for its Cortex-M33. Each decision takes 4,423 multiply-adds every 50 ms, and quantizing the fine-tuned model cost nothing measurable.

Calibration is the heavy part: the device holds under a minute of feature data and fine-tunes the network on it, using about 200 KB of the U585’s 786 KB of RAM. Once that’s done, it settles to about 60 KB.

of flash for the shared model
17.8 KB
of RAM during calibration, out of 786 KB
~200 KB
of RAM once calibration is done
~60 KB
between decisions, each 4,423 multiply-adds
50 ms

Medical devices are what we do. We design IEC 60601-compliant electronics and safety-critical firmware under IEC 62304, inside our clients’ ISO 13485 systems, with ISO 14971 risk work.

See our medical device work

Muscle signal recordings from the Ninapro database: M. Atzori et al., “Electromyography data for non-invasive naturally-controlled robotic hand prostheses”, Scientific Data, 2014.

Want this in your product?

We build embedded AI like this into medical and industrial devices, from the sensors and firmware to the network running on the chip. Tell us what yours needs to recognize.

Founded in 2008 · Hudson, Ohio · info@coledd.com