A high-performance, header-only C++ library for realtime IIR digital signal processing with Butterworth, Chebyshev, and RBJ filters.
IIR1 is a C++ library for infinite impulse response (IIR) digital signal processing, providing realtime sample-by-sample filtering. It implements common filter types like Butterworth, Chebyshev, and RBJ filters for lowpass, highpass, bandpass, and bandstop applications. The library is designed for high performance and memory safety, using template-based header-only code to avoid runtime allocations.
Developers and engineers working on realtime DSP applications, such as audio processing, sensor data filtering, embedded systems, and scientific computing where low-latency filtering is required.
IIR1 offers a combination of realtime performance, memory safety, and ease of integration through its header-only design. Unlike many DSP libraries, it avoids dynamic memory allocation entirely, making it suitable for safety-critical and embedded environments while supporting cross-platform development.
DSP IIR realtime filter library written in C++
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
All filter code is in header files, enabling seamless compiler optimization and eliminating linking overhead, as stated in the README.
Uses C++ templates to allocate memory at compile time, preventing runtime allocations and memory leaks, crucial for embedded and realtime systems.
Tested on Linux, Windows, and macOS with GCC, Clang, and Visual Studio, ensuring reliability across different development environments.
Can import filter coefficients generated by SciPy's signal module, facilitating easy design in Python and efficient deployment in C++, as shown in the demo code.
Heavy use of C++ templates can increase compile times and require advanced knowledge, making it less accessible for developers unfamiliar with template metaprogramming.
Lacks built-in support for elliptic filters and other optimized designs; users must rely on Python integration for custom coefficients, as the README admits with the removal of optimization-based methods.
Default error handling via exceptions may introduce overhead in realtime loops, and disabling it requires manual configuration with IIR1_NO_EXCEPTIONS, which isn't always straightforward.