BiomedBench enables a systematic HW evaluation and comparison of the state-of-the-art platforms in the wearable domain.
To achieve a fair comparison, it is necessary to define the experimental setup and measurement process.
Experimental Setup
Signal acquisition - Sensor emulation
We assume an external ADC with a 768-byte RAM buffer (i.e., AD4130-8). We perform per-batch acquisition by transferring data to the MCU when the buffer is full. We employ an SPI acquisition scheme using the DMA while the core is in sleep mode. Moreover, we assume that the sensors have no processing ability and that all the computations take place in the MCU.
Future platform evaluation must comply with these assumptions for the results to be considered valid.
Energy measurements
We do not consider the energy of the sensor and ADC in our experiments, as it is common for all platforms. We have measured the energy consumption of all boards at the power supply entry point of the integrated circuit as we target a fair comparison across all platforms. However, we highlight that the reported energy numbers include the energy drawn by the input-to-core step-down voltage converter embodied in the integrated circuit.
Future platform energy measurements must comply with this procedure for the results to be considered valid*.
*Else, thoroughly explain your energy measurement process
We have selected the Otii Arc Pro provided by Qoitech, which samples at 4 kHz, to obtain an energy profile over time and extract the energy and execution time per phase. However, due to the limited ±10 µA precision of the Otii device, we used the Fluke 8846A multimeter to measure the average current of the Nucleo and Apollo boards in deep-sleep mode. This device can achieve a precision of 0.03 µA.
Please ensure your measuring equipment features a sampling rate in the range of kHz and adequate precision.
Processing Cycles
We measured the processing cycles per application using one of two methods. For the first method, we utilized the built-in HW performance counters when provided by the processor. The alternative, in the absence of HW counters, was to multiply the processing execution time by the processor frequency. This method is accurate, provided that one can measure the execution time with adequate precision.
Considered Platforms
Below, we summarize the evaluated platforms and the key experimental specifications for each of them.
Board | MCU | Measuring Point |
Voltage (V) |
FPU | DMA used |
Sleep Mode used |
---|---|---|---|---|---|---|
Raspberry Pi Pico | RP2040 | Board | 2.75 | No | No | Yes |
Nucleo L4R5 | STML4R5ZI | MCU | 3.30 | Yes | Yes | Yes |
Ambiq Apollo 3 | Apollo 3 Blue | MCU | 1.80 | Yes | No | Yes |
Gapuino | GAP8 | MCU | 2.80 | No | Yes | No |
GAP9EVK | GAP9 | MCU | 2.80 | Yes | Yes | Yes |
Results
Processing cycles (in millions)
Processor | HeartBeatClass | SeizureDetSVM | SeizureDetCNN | CognWorkMon | GestureClass | CoughDet | EmotionClass | Bio-BPfree (reduced) |
---|---|---|---|---|---|---|---|---|
Arm Cortex-M0+ | 11.6 | 4.3 | 283.0 | 346.0 | 571.6 | 149.7 | 15.3 | 16758.0 |
Arm Cortex-M4 | 7.4 | 2.3 | 240.0 | 138.0 | 23.0 | 9.9 | 2.5 | 662.0 |
CV32E40P GAP8 | 5.1 | 3.2 | 160.0 | 165.0 | 635.8 | - | 14.3 | 18450.0 |
CV32E40P GAP9 | 5.1 | 2.5 | 160.0 | 92.0 | 20.2 | 9.1 | 1.6 | 633.0 |
Energy
Below, we report the energy numbers per phase and board (1 table per application).
HeartBeatClass | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 29.647 | 3.519 | 6.532 | 39.698 |
STM32L4R5ZI | 0.118 | 0.002 | 2.604 | 2.724 |
Apollo 3 Blue | 0.073 | 0.061 | 0.226 | 0.360 |
GAP8 | 9.386 | 0.042 | 0.416 | 9.844 |
GAP9 | 9.837 | 0.054 | 0.189 | 10.081 |
SeizureDetSVM | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 118.805 | 2.402 | 2.42 | 123.627 |
STM32L4R5ZI | 0.476 | 0.001 | 1.313 | 1.790 |
Apollo 3 Blue | 0.294 | 0.042 | 0.137 | 0.473 |
GAP8 | 37.724 | 0.029 | 0.376 | 38.127 |
GAP9 | 39.5 | 0.037 | 0.09 | 39.628 |
SeizureDetCNN | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 3.514 | 7.528 | 167.87 | 178.912 |
STM32L4R5ZI | 0.015 | 0.004 | 112.049 | 112.068 |
Apollo 3 Blue | 0.010 | 0.494 | 18.262 | 18.766 |
GAP8 | 0.464 | 0.090 | 31.987 | 32.542 |
GAP9 | 2.234 | 0.117 | 5.101 | 7.452 |
CognWorkMon | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 104.902 | 35.876 | 195.910 | 336.688 |
STM32L4R5ZI | 0.432 | 0.017 | 70.629 | 71.078 |
Apollo 3 Blue | 0.325 | 0.620 | 3.887 | 4.832 |
GAP8 | 33.930 | 0.431 | 16.008 | 50.369 |
GAP9 | 36.303 | 0.557 | 3.409 | 40.291 |
GestureClass | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 0 | 8.008 | 347.104 | 355.112 |
STM32L4R5ZI | 0 | 0.004 | 13.425 | 13.429 |
Apollo 3 Blue | 0 | 0.525 | 2.500 | 3.025 |
GAP8 | 0 | 0.096 | 220.933 | 221.029 |
GAP9 | 0.027 | 0.124 | 0.604 | 0.755 |
CoughDet | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 0 | 2.972 | 87.543 | 90.515 |
STM32L4R5ZI | 0 | 0.001 | 6.649 | 6.652 |
Apollo 3 Blue | 0 | 0.198 | 0.444 | 0.642 |
GAP8 | - | - | - | - |
GAP9 | 0.081 | 0.046 | 0.352 | 0.479 |
EmotionClass | ||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | 19.651 | 1.259 | 8.760 | 29.670 |
STM32L4R5ZI | 0.002 | 0.001 | 1.462 | 1.465 |
Apollo 3 Blue | 0.061 | 0.083 | 0.110 | 0.254 |
GAP8 | 6.224 | 0.015 | 1.052 | 7.291 |
GAP9 | 6.572 | 0.019 | 0.061 | 6.652 |
Bio-BPfree (reduced) |
||||
---|---|---|---|---|
Board/MCU | Idle (mJ) | Acquisition (mJ) | Processing (mJ) | Total (mJ) |
Raspberry Pi Pico | - | - | 9374.500 | 9374.500 |
STM32L4R5ZI | - | - | 432.227 | 432.227 |
Apollo 3 Blue | - | - | 32.222 | 32.222 |
GAP8 | - | - | 1453.368 | 1453.368 |
GAP9 | - | - | 24.970 | 24.970 |