embedded_dsp/lib.rs
1#![no_std]
2#![allow(missing_docs)]
3
4//! # embedded-dsp
5//!
6//! A `#![no_std]` Rust digital signal processing library for microcontrollers, embedded systems, and real-time signal processing applications.
7//!
8//! ## Overview
9//!
10//! `embedded-dsp` provides zero-allocation digital signal processing algorithms:
11//!
12//! - **Basic Math**: Elementwise addition, subtraction, multiplication, dot product, scale, shift, clip, logic ops.
13//! - **Complex Math**: Complex vector addition, multiplication, magnitude, magnitude squared, conjugate, dot product.
14//! - **Fast Math**: Trigonometric (sin, cos, atan2), square root, division, log, exp.
15//! - **Statistics**: Mean, variance, standard deviation, RMS, power, min/max, entropy, Kullback-Leibler, LogSumExp.
16//! - **Support**: Vector copy, fill, type conversions (Q7, Q15, Q31, F32), sort, barycenter, weighted sum.
17//! - **Matrix**: Matrix addition, subtraction, multiplication, scale, transpose, Gauss-Jordan inverse.
18//! - **Filtering**: FIR, Biquad IIR Direct Form I, LMS adaptive filters, Convolution, Correlation, single-pole recursive filters, and O(1) recursive moving average.
19//! - **Filter Design**: Biquad Lowpass, Highpass, Bandpass, Notch, Peaking EQ, Allpass, Butterworth, Chebyshev, and arbitrary-response (frequency-sampling) design.
20//! - **Filter Analysis**: Frequency response (DTFT) evaluation for FIR/biquad filters, FIR group delay, and pole-based IIR stability checks.
21//! - **Resampling & Multi-rate**: CIC Decimator & Interpolator, linear fractional resampler.
22//! - **Kalman Filtering**: 1D/2D helpers, const-generic linear `KalmanFilter<N, M>`, and trait-based `ExtendedKalmanFilter` (EKF).
23//! - **Const Generics**: Compile-time fixed-size `FirFilter<N>`, `BiquadCascade<N>`, and `Matrix<R, C>`.
24//! - **Transform**: In-place Complex FFT (CFFT), Real FFT (RFFT), DCT-IV, Bit reversal, Fixed-point FFT (Q15/Q31), Haar transform, Hartley transform, and a generalized wavelet transform (Daubechies-4).
25//! - **Companding**: ยต-law and A-law audio companding (ITU-T G.711 family).
26//! - **Audio & TinyML**: Goertzel single-frequency detector, peak/RMS envelope followers, Mel filterbank, and MFCC feature extraction.
27//! - **Spectral Analysis & PSD**: Welch's method power spectral density estimation (averaged periodograms), single-segment periodograms in linear and dB scale.
28//! - **Spatial & 2D Signal Processing**: 2D DCT/IDCT, 2D Convolution, 2D Non-linear Filtering (Min/Max/Median), Sobel edge detection, 2D Histogram, MSE, PSNR.
29//! - **Controller**: PID motor controller, Clarke transform, Park transform, Inverse Clarke/Park.
30//! - **Interpolation**: Linear, Bilinear, Cubic spline interpolation.
31//! - **Quaternion**: Norm, normalization, product, conjugate, inverse, rotation matrix conversion.
32//! - **Window**: Hanning, Hamming, Blackman, Blackman-Harris, Bartlett, Welch, Flat-top window generators.
33//! - **Distance**: Euclidean, Cosine, Chebyshev, Manhattan, Minkowski, Jaccard, Hamming, Canberra, Bray-Curtis.
34
35#[cfg(feature = "std")]
36extern crate std;
37
38#[cfg(any(feature = "std", feature = "libm"))]
39pub mod audio;
40pub mod basic_math;
41pub mod companding;
42pub mod complex_math;
43pub mod const_generics;
44pub mod controller;
45pub mod distance;
46pub mod fast_math;
47#[cfg(any(feature = "std", feature = "libm"))]
48pub mod filter_analysis;
49#[cfg(any(feature = "std", feature = "libm"))]
50pub mod filter_design;
51pub mod filtering;
52pub mod interpolation;
53pub mod kalman;
54pub mod math;
55pub mod matrix;
56pub mod psd;
57pub mod quaternion;
58pub mod resampling;
59pub mod spatial;
60pub mod statistics;
61pub mod support;
62pub mod transform;
63pub mod types;
64pub mod window;
65
66#[cfg(any(feature = "std", feature = "libm"))]
67pub use audio::*;
68pub use basic_math::*;
69pub use companding::*;
70pub use complex_math::*;
71pub use const_generics::*;
72pub use controller::*;
73pub use distance::*;
74pub use fast_math::*;
75#[cfg(any(feature = "std", feature = "libm"))]
76pub use filter_analysis::*;
77#[cfg(any(feature = "std", feature = "libm"))]
78pub use filter_design::*;
79pub use filtering::*;
80pub use interpolation::*;
81pub use kalman::*;
82pub use math::*;
83pub use matrix::*;
84pub use psd::*;
85pub use quaternion::*;
86pub use resampling::*;
87pub use spatial::*;
88pub use statistics::*;
89pub use support::*;
90pub use transform::*;
91pub use types::*;
92pub use window::*;