Skip to main content

CLUTGen, a flexible ADC LUT generator for embedded systems.

Project description

CLUTGen

CLUTGen automates the creation of Look-Up Tables for embedded systems, converting raw ADC readings into calibrated physical units such as temperature, pressure, or distance.

Given a set of calibration samples, CLUTGen fits an interpolation curve and generates a production-ready .c/.h pair with the full LUT precomputed for every possible ADC reading.

For Zephyr west module usage, see the zephyr branch.


Requirements

  • Python 3.10+
  • numpy, plotly

Installation

From PyPI:

pip install clutgen

From source:

pip install .

Usage

clutgen [OPTIONS] input_files...
Argument Description
input_files One or more .toml configuration files
-o, --output-dir Output directory for generated files (default: ./clutgenerated)
-n, --name Base name for the generated .c/.h files (default: lookup_tables)
--preview Open an interactive view comparing all interpolation methods before generation

Interpolation method (mutually exclusive, default: --linear):

Flag Method
-l, --linear Linear interpolation
-s, --splines Cubic spline interpolation
-p, --polynomial Best-fit polynomial up to degree 7
-w, --piecewise Zero-order hold (step-like)
-d, --idw Inverse Distance Weighting

Examples:

# Explore interpolation methods interactively before choosing
clutgen --preview ./calibration/temperature.toml ./calibration/pressure.toml

# Generate with splines after exploring
clutgen --splines ./calibration/temperature.toml ./calibration/pressure.toml

# Custom output directory and file name
clutgen -o ./src/generated -n sensor_luts ./calibration/temperature.toml

TOML Configuration

Each sensor requires a TOML configuration file and a CSV with its calibration samples.

CSV schema:

raw,calibration

Where raw is the ADC reading and calibration is the expected output value at that reading.

TOML schema:

name = "temp_sensor"                # C identifier — used as <n>_lut in generated code
description = "ambient temperature" # Used in Doxygen comments and plot titles
table_resolution_bits = 12          # ADC resolution in bits (e.g., 12 → 4096 entries)
lut_type = "int16_t"                # C type for the generated array

samples_csv = "./data/temperature_samples.csv"  # Relative to this file, or absolute

# Optional
interpolation = "polynomial"        # Overrides the CLI interpolation method for this LUT

Interpolation Methods

Value Description
linear Linear interpolation between calibration points. Default.
splines Cubic spline interpolation; smooth transitions between points.
polynomial Best-fit polynomial up to degree 7; prone to oscillation with sparse data.
piecewise Zero-order hold; constant value between points, step-like output.
idw Inverse Distance Weighting; weighted average of all known points.

Output

For each run, CLUTGen produces two files:

  • <name>.h — extern declarations with Doxygen comments, safe to include anywhere in the project
  • <name>.c — full LUT definitions, compiled once and linked

Each configured sensor produces an array named <n>_lut, where n is the name field from the TOML:

#include "lookup_tables.h"

int val = temp_sensor_lut[adc_reading];

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clutgen-0.2.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clutgen-0.2.0-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file clutgen-0.2.0.tar.gz.

File metadata

  • Download URL: clutgen-0.2.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for clutgen-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4d44595413fee21ec80ef2cd0e2b37c719ccc9c36e5a5ba88ce4fe28f1cd34f1
MD5 4820f106ce372268452911ce3c614232
BLAKE2b-256 8ed9ba36f4bf8550ade2b6abccbd985b31540de6741f4b93c7b9d76b79f114d9

See more details on using hashes here.

File details

Details for the file clutgen-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: clutgen-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for clutgen-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cf8baed332ef4e802adb0bc831e0c4055775fb66829804d6d523d9a55c6218f8
MD5 ef4dfa70b9e9f5bafb3edaf1bca7eedb
BLAKE2b-256 998a4926b0ded8d56611370f0acc2697e94775808497d028e9e0ee73da3bf3f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page