Skip to content

Repository files navigation

CMSIS-Stream Nodes

Build AI and multimedia processing graphs once and run them across embedded targets and desktop operating systems. This project is based on CMSIS-Stream, which describes and generates the scheduled dataflow graph.

The project adds:

  • Reusable CMSIS-Stream nodes for audio, AI, and multimedia processing
  • A Python-based way to configure the parameters of every node in an application
  • Target-specific implementations and hardware initialization for multiple runners and boards
  • Runner projects for CMSIS-RTOS, Zephyr, Linux, macOS, and Windows

Read How the project works for the complete graph-description, code-generation, parameter, hardware, runtime-thread, event, and application-integration model.

Examples

  • Recorder — Captures microphone audio and sends each block to a null sink to demonstrate a minimal streaming application.
  • Spectrogram — Captures microphone audio, computes a spectrogram, and displays it from a serial or POSIX stream.
  • Keyword spotting — Runs an MFCC and neural-network pipeline that recognizes keywords from audio.
  • Debug — Uses a known audio test pattern to compare keyword-spotting computations across POSIX and CMSIS/Ethos targets.

Runners

Use the runner documentation to configure and build the generated application for a target environment:

Configuration

When you generate code for a graph, you need to select the runner and the board.

uv run examples/recorder/create.py --runner zephyr --board fvp_cs300

The CMSIS-Stream scheduler will be generated in runner_common/app_graph. You'll then have to build the right runner. Even if the scheduler is generated in common, it cannot be built for all runners if it uses nodes that are runner- or board-specific.

This script is available in each example folder. For instance: examples/recorder/create.py.

See Configuring and generating an application for a recorder-based walkthrough. The project principles explain how generation selects node implementations and board support.

Network

The demo using a TFLite network currently uses only one network. The format of this network depends on the target: POSIX or Ethos-U. The network is selected in app.py when running the Python script create.py for a given application.

The demos differ because:

  • Computations use different kernel implementations in TFLite
  • Real-time constraints may not always be met, so the network may receive different audio segments on different platforms

For those reasons, the recognized keywords may be a bit different according to the platform.

Releases

Contributors

Languages