Awesome
KFR - Fast, modern C++ DSP framework
<p align="center"> <img width="300" height="auto" src="img/KFR1.png"> </p>
KFR is an open source C++ DSP framework that contains high performance building blocks for DSP, audio, scientific and other applications. It is distributed under dual GPLv2/v3 and commercial license.
KFR6
New features, performance improvements, easier setup.
:arrow_right: What's new in KFR6
:arrow_right: Upgrade from a previous version
Our other projects
<div align="center">🟣 Brisk is a cross-platform C++20 GUI framework featuring MVVM architecture, reactive capabilities, and scalable, accelerated GPU rendering. (GPL/Commercial)
🟢 CxxDox — C++ documentation generator. (MIT)
</div>KFR Installation
Compiler support:
KFR has no external dependencies except for a C++17-compatible standard C++ library. CMake is used as the build system.
Clang is highly recommended and proven to provide the best performance for KFR. You can use Clang as a drop-in replacement for both GCC on Linux and MSVC on Windows. On macOS, Clang is the default compiler and included in the official Xcode toolchain.
Note: Building the DFT module currently requires Clang due to internal compiler errors and a lack of optimization in GCC and MSVC.
:arrow_right: See Installation docs for more details
Features
:star2: — new in KFR6
FFT/DFT
- Optimized DFT implementation for any size (non-power of two sizes are supported)
- DFT performance is on par with the most performant implementation currently available See Benchmarks
- Real forward and inverse DFT
- :star2: Multidimensional complex and real DFT
- Discrete Cosine Transform type II (and its inverse, also called DCT type III)
- Convolution using FFT
- Convolution filter
:arrow_right: See also How to apply FFT with KFR
DSP
- IIR filter design
- Butterworth
- Chebyshev type I and II
- Bessel
- Lowpass, highpass, bandpass and bandstop filters
- Conversion of arbitrary filter from {Z, P, K} to SOS format (suitable for biquad function and filter)
- Biquad filter See Benchmarks
- Simple biquad filter design
- FIR filter design using window method
- Loudness measurement according to EBU R128
- Window functions: Triangular, Bartlett, Cosine, Hann, Bartlett-Hann, Hamming, Bohman, Blackman, Blackman-Harris, Kaiser, Flattop, Gaussian, Lanczos, Rectangular
- Sample rate conversion with configurable quality and linear phase
- Oscillators, fast incremental sine/cosine generation, Goertzel algorithm, fractional delay
Base
- Tensors (multidimensional arrays)
- :star2: .npy support (reading/writing)
- :star2: Matrix transpose
- Statistical functions
- Random number generation
- Template expressions (See examples)
- Ring (Circular) buffer
- :star2: Windows arm64 support
- :star2: Emscripten (wasm/wasm64) support
Math
- Mathematical functions such as
sin
,log
andcosh
built on top of SIMD primitives - Most of the standard library functions are re-implemented to support vector of any length and data type
SIMD
vec<T, N>
class and related functions that abstracts cpu-specific intrinsics- All code in the library is optimized for Intel, AMD (SSE2, SSE3, SSE4.x, AVX and AVX2 and AVX512) and ARM, AArch64 (NEON) processors
- All data types are supported including complex numbers
- All vector lengths are also supported.
vec<float,1>
,vec<unsigned,3>
,vec<complex<float>, 11>
all are valid vector types in KFR - Sorting
IO
- Audio file reading/writing
- WAV
- FLAC
- MP3
Multiarchitecture
The multiarchitecture mode enables building algorithms for multiple architectures with runtime dispatch to detect the CPU of the target machine and select the best code path
- :star2: Multiarchitecture for DFT, resampling, FIR and IIR filters.
C API
C API is available and includes a subset of KFR features including FFT and filter processing.
- :star2: Support for non x86 systems.
Benchmark results
DFT
Powers of 2, from 16 to 16777216 (Higher is better)
Prime numbers from 17 to 127 (Higher is better)
Small numbers from 18 to 119 (Higher is better)
Random sizes from 120 to 30720000 (Higher is better)
See fft benchmark for details about benchmarking process.
Biquad
(Higher is better)
Documentation
KFR 6 (latest) https://www.kfrlib.com/docs/latest/
KFR 5 https://www.kfrlib.com/docs/v5/
Built with
- cxxdox - generates markdown docs from C++
- mkdocs - static documentation generator
- mkdocs-material - material theme for mkdocs
Branches
dev
- current development version. Pull requests should go to dev
.
main
- current stable version passing all compiler/architecture tests.
v5
- previous version of KFR (no new features, fixes only)
License
KFR is dual-licensed, available under both commercial and open-source GPL 2+ license.
If you want to use KFR in a commercial product or a closed-source project, you need to purchase a Commercial License.