- C API now supports Multidimensional DFT
- Documentation update
- Update to latest CxxDox
Dims
template parameter indft_plan_md
anddft_plan_md_real
now defaults todynamic_shape
- Clang 19 compatibility fix
- Added more Doxygen documentation for filter functions (@Jalmenara)
- Examples now include detailed comments
- Fixed stateless parameter
- Fixed build with non-MSVC on Win32 (@jcelerier)
- Resolved Android building issues
- Removed deprecated atomic initialization
- Windows arm64 support
- Emscripten (wasm/wasm64) support
complex_size
now takes dft_pack_format as parameter
- DFT performance has been improved up to 40% (backported to KFR 5.2.0 branch)
- C API for non x86 architectures
- DSP refactoring with easier initialization
- Multiarchitecture for resampling, FIR and IIR filters
matrix_transpose
: optimized matrix transpose (square/non-square, inplace/out-of-place, real/complex, scalar/vectors)- CMake config file generation (
find_package(KFR CONFIG)
support, see installation) .npy
format support (reading/writing, v1/v2, c/fortran order, real/complex, bigendian/littleendian)- Multidimensional DFT: real/complex
inline_vector
- CMake minimum version is 3.12
- Multidimensional reference DFT
- Easier cross compilation to ARM64 on x86_64 macOS
- Automated tests using GitHub Actions (previously Azure Pipelines)
- GCC 7 and 8: emulate missing avx-512 instrinsics
read_group
andwrite_group
- [❗breaking change]
reshape_may_copy
andflatten_may_copy
intensor<>
allows copying by default shape<>::transpose
functiontensor<>::transpose
functionconvert_endianess
- DFT, DSP and IO sources have been moved to
src/
directory - Multiarchitecture is enabled by default
KFR_DFT_NO_NPo2
has been removed (assumed always enabled)- Tests refactoring
- Some tests moved to
tests/internal/
- [❗breaking change] Scalars are now passed by value in expressions (this fixes dangling references in some cases)
- Expression functions should return
expression_make_function
instead ofexpression_function
KFR_WITH_CLANG
KFR_VERSION
CMake variable- Functions to get module versions (
library_version_dft
,library_version_dsp
etc) - Exceptions are no longer enforced in MSVC
kfr::complex
removed (usestd::complex
instead).KFR_STD_COMPLEX
cmake variable removed toostrides_for_shape
for fortran order- AARCH and ARM emulation refactoring (dynamic libraries are now supported)
call_with_temp
maximum_dims
is now 16 (was 8)to_fmt
/from_fmt
supports inplaceshape
refactoring:rotate_left
,rotate_right
,remove_back
,remove_front
- temp argument can be
nullptr
for DFT (temporary buffer will be allocated on stack or heap) dft_plan
and similar classes have now default and move constructors-DCMAKE_POSITION_INDEPENDENT_CODE=ON
is required for building C APIci/run.sh
can now build in a directory outside source tree- [❗breaking change]
graphics/color.hpp
andgraphics/geometry.hpp
have been removed - Simpler
CMT_CVAL
macro /Zc:lambda
is now required for building KFR in MSVCprintln
forstring_view
- MSVC internal compiler error fixed
- Complex vector operators fixed
2023-11-27
- The performance of DFT has been increased up to 40% compared to KFR 5 on x86 and x86_64 in single and double precision, inplace and out of place processing.
KFR_NO_PERF_TESTS
define can now disable performance testsCMT_CVAL
for extracting constexpr-enabled value fromcval_t
fft_algorithm_selection
to select FFT algorithm for given FFT size.
- Warnings in Clang 10 #198
std::is_pov
is peprecated in C++20 #190- DFT sizes 0 and 1 were not processed correctly #195
- Internal compiler error in Visual Studio Compiler 19.37 #194
- Goertzel issue #121
- Bug in
nearest_real_or_complex
#137 - Fixed operators in
KFR_STD_COMPLEX
mode - Testo library: typo in
epsilon_scope
- Fix ambiguities with std::identity (c++20)
- Force linking in correct order for multi-architecture binaries
2023-10-11
- Tukey window function
- Subscript operator for
vec<>
- Unary operators for
vec<>
- Inverse DCT has been fixed
- Allow C API to be built on non-x86 systems
- Tensor iteration range has been fixed
transpose(vec<vec<>>)
has been fixedvec<bit<>>
bug on GCC and MSVC- Internal constant
is_pod
has been removed root
andcbrt
have been fixed for negative values- Fixed numerous warnings in MSVC
2023-06-26
- Planck-taper window function
- Sample rate conversion: automatic zero padding
- DFT: incorrect result of real dft when input size != 4N #141
- Add options for installing libraries and headers #182
2023-01-25
- ARM/ARM64 performance has been improved up to 2 times in various usage scenarios, including DFT.
- Fix sine and other functions not accepting scalar references
- Fix possible name conflict with fmt
2022-12-06
- Documentation updates
- MSVC fixes
- Ambiguous assign operator fixes
2022-11-30
- New
tensor<T, dims>
class for multidimensional data (like numpy's nparray) - Histogram computation
- Normal (gaussian) distribution for random number generator
- All builtin expressions support multiple dimensions
- Exception support (may be configured to call user-supplied function or std::abort)
- [changes required] CMake variables now have
KFR_
prefix - Template parameter deduction for
vec
, sovec{1, 2}
is the same asvec<int, 2>{1, 2}
- [changes required]
random_state
is now architecture-agnostic and defined inkfr
namespace - All expression classes have been moved from
kfr::CMT_ARCH_NAME::internal
tokfr::CMT_ARCH_NAME
namespace expression_traits<T>
introduced to support interpreting any object as kfr expression- [changes required] User-defined expressions should be rewritten to be used in KFR5
- Out-of-class assign operators for all input & output expressions
round.hpp
,clamp.hpp
,select.hpp
,sort.hpp
,saturation.hpp
,min_max.hpp
,logical.hpp
,abs.hpp
headers have been moved tosimd
modulestate_holder.hpp
has been moved tobase
module- All code related to expressions have been moved to
base
module vec<T, N>::front()
andvec<T, N>::front()
are now writableset_elements
functions for output expressions likeget_elements
for input expressions
- Documentation updates
2022-11-23
- C++20 compatibility fixes
2022-10-14
- Compile times improved and memory usage reduced for MSVC and GCC
cxxdox
version updated- Tests for latest Clang, Azure Pipelines images are updated
- .editorconfig file
- Fixed incompatibility with latest GCC
- Fixed various Internal Compiler Error in latest MSVC2019
- Fixed tests for Clang 14
- Fixed bugs in gather/scatter and read/write functions
2021-04-29
- AVX512 intrinsics in MSVC and GCC
carg
- Python 3.7 compatibility
- Global constants are now inline
2020-02-17
ENABLE_DFT_MULTIARCH
cmake option can be used to buildkfr_dft
with multiple architectures support (x86/x86_64 only)config.h
is generated during install step with all#define
s needed for correct usage of installed libraries
CMAKE_INSTALL_PREFIX
is reset to empty on Win32 (can be overriden in cmake command line)- C API binary is now installed using install command (
make install
,ninja install
orcmake --build . --target install
)
2020-03-04
- MSVC2019 support (16.4.4 is required)
- Stateless short_fir expression (thanks to https://github.com/slarew)
biquad_filter
constructor takingstd::vector<biquad_params<T>>
(thanks to https://github.com/BenjaminNavarro)cabssqr
function (thanks to https://github.com/slarew)moving_sum
expression (thanks to https://github.com/slarew)gen_expj
generator (thanks to https://github.com/slarew)
cdirect_t{}
is now allowed in real dft plan methods for compatibility- complex support for
convolve_filter
(thanks to https://github.com/slarew)
- GCC debug build (thanks to https://github.com/BenjaminNavarro)
is_invocable_r_impl
fallback for missing C++17 featurestd::complex
compatibility (thanks to https://github.com/slarew)- Various CI fixes
2019-12-05
- 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)
- Discrete Cosine Transform type II and III
- cmake uninstall target
- C API:
- DFT
- real DFT
- DCT
- FIR
- IIR
- Convolution
- Aligned memory allocation
- Built for SSE2, SSE4.1, AVX, AVX2, AVX512, x86 and x86_64, architecture is selected at runtime
- New vector based types:
- color
- rectangle
- point
- size
- border
- geometric vector
- 2D matrix
- Color space conversion:
- sRGB
- linear RGB
- XYZ
- Lab
- LCH
- HSV
- MP3 audio reading
aligned_reallocate
functionzip
andcolumn
functionsvec<vec<vec<T>>>
support- New example:
iir.cpp
biquad
that getsstd::vector
ofbiquad_param
scsqr
functionfactorial
functionisreal
functionmake_complex
function for expressions- New optimization technique for vector element shuffle
std::get<>
support forvec<>
- C++17 structured bindings support for
vec<>
- comparison operators for
cvals_t
- compile time
cminof
,cmaxof
functions vector_width_for
constant to get vector width for specific architecture- make_univector for containers and arrays
- univector: copy constructor optimization
- Custom
assertion_failed
- C++17 compiler is required. Some of C++17 library features may be missing, in this case KFR uses custom implementation
cast
function now works with both vectors and expressions (expression versions was previously calledconvert
)- Memory alignment can be up to 32768
- New implementation for
cometa::function
using shared pointer memory.hpp
allocation functions has been moved to cometacconj
has been moved to simd module (instead ofmath
)- dr_libs version updated
- All global constants are now
inline constexpr
- enums moved out of architecture namespace
special_constant::undefined
removed
- Fixed real DFT with raw poitners
- Bug with generators
- Fixed grid issues in dspplot
- Wrong index in
concatenate
csqrt
function- Fixed NaNs in
amp_to_dB
- GCC 9 support
- Workaround for Clang 8.0 FMA code generator bug
- Flat top window
- SSE4.2 detection (previously detected as SSE4.1)
- MSVC support is limited to MSVC2017 due to ICE in MSVC2019. Once fixed, support will be added
- DFT is limited to Clang due to ICE in MSVC and broken AVX optimization in GCC 8 and 9. Once fixed, support will be added
2019-04-02
reduce
supports different types and containers other thanunivector
- Assignment operators for
univector
:+=
,*=
etc concatenate
function to concatenate two expressions sequentially- Audio file IO:
read_channels
/write_channels
to read channels data directly without interleaving/deinterleaving as_string
: support forstd::vector
expression_scalar
: support forvec<T>
- CPU detection in cmake subdirectory
- MSVC 2017 32-bit intrinsics
2019-03-15
- Ability to pass
random_bit_generator
by reference - Tests for iOS ARM and ARM64
kfr::complex
is placed inkfr
namespace
2019-03-13
- Detected CPU is now saved to CMake cache
- Linux/AArch64 tests have been added to CI
mask<>
is now a specialization ofvec<>
. This allows using manyvec
functions for masksshort_fir
performance has been increased by around 50%-60%
- Fixed the bug with infinitely loading in Intellisense
2019-03-07
- Android arm & arm64 tests have been added to CI
- Fixed Android support (thanks to https://github.com/Jman420)
- Fixed building cpu detection tool in CMake subdirectory (thanks to https://github.com/Jman420)
2019-02-21
- DFT speeds have been improved by up to 15% on most modern cpus
- Support for MSVC 2017
- Support for GCC 7.3
- Support for GCC 8.2
- Support for resampling complex vectors (Thanks to https://github.com/ermito)
- Tests for various math functions no longer depend on MPFR
- Testo now allocates much less memory during long tests (x3 less than previously)
- Building generators (Thanks to https://github.com/ermito)
2019-01-08
KFR_READCYCLECOUNTER
may be redefined to point to any function returning (pseudo-)random value- Ability to disable random number initialization functions
2018-12-27
- Partial compatibility for Visual Studio 2017
- Support for
KFR_USE_STD_ALLOCATION
univector
support forabstract_reader
/abstract_writer
- Paths in
CMakeLists.txt
2018-12-19
- More documentation
- dspplot:
freqticks
parameter - dspplot:
freq_lim
parameter - dspplot:
freq_dB_lim
parameter - dspplot:
phasearg
parameter - More tests for Sample Rate Converter
- Sample Rate Converter: now computes the transition width of the filter. This makes cutoff frequency more precise
- Sample Rate Converter: now uses Kaiser window with different β parameter for different quality. This leads to a better balance between transition width and sidelobes attenuation.
- Sample Rate Converter:
quality
parameter is now passed as runtime parameter rather than compile time parameter fir.cpp
example has been extended to include examples of applying FIR filters
amp_to_dB
function- 24-bit audio reading
2018-11-28
- WAV file reading/writing
- FLAC file reading
- Audio sample conversion
- Interleaving/deinterleaving
- sample_rate_converter example
- Sample Rate Converter:
process
() function
- Assignment to an empty vector resizes it
- New documentation
- KFR IO is now built separately (only needed for audio file support)
- Resampler bug: sequential calls to
resampler::operator()
may fail
- Optimized non-power of two DFT implementation
- Full AVX-512 support
- EBU R128
- Ability to include KFR as a subdirectory in cmake project
- Number of automatic tests has been increased
- C API for DFT
- Partial GCC 8.x support
- Ability to make sized linspace
fraction
type
- GPL version changed from 3 to 2+
- Refactoring of DFT code
- KFR DFT is now built separately
- FIR filter now supports different tap and sample types (thanks to @fbbdev)
- Various fixes for KFR functions
- FFT with size=128 on architectures with SSE only
- Small kfr::complex type fixes