congratulation!!
mipac opened this issue · 3 comments
i don't know how to post a message to you to tell you that is exactly the dsp lib i dream for a long time!! (ok except boost dependensy :)
i'd like to have time to help...
stl vector with a good allocator should be a good pattern, even when used with fftw, mkl, ipp, eigen, arm libs, and so on. it seems that some of these lib will be wrapped into switchable impl
but if at first you can get a clean design based on stl type and a clean impl mecanism, i believe that the perfect dsp lib
sorry it's not an issue, so not the good place for this kind of useless message
it's an experimental english too 😉
with my best regards
Hi Michel,
Hope you are well.
So excited you like the library.
Honestly this is still an small baby of what I want to build. I have been using many libraries written in C/C++ that did not fit my needs. Those are some of the problems I found:
No interface based in iterators: forcing you to use std::vector.
Excessive dynamic memory allocation.
No dynamic interface: I need to be able to switch between float, double and fixed point depending on the platform.
Poor design with no integration with the standard library.
Poor design with no optimizations and flexible configuration.
Excessive use of polymorphic structures.
SLOW, holly fuck, most of them are really slow.
So, I did decide to build my own library. The library is a header-only library written purely in modern C++. Let me explain you some points:
The library allow the usage of third-party allocators: this will allow the user to use any external tool or container.
The library support a common interface based in standard iterators or operators.
The library avoid the callback to malloc if needed. In the template parameter the user can set up the maximum allowed size. Example: butterworth filter design.
The library will have a minimum third-party dependency: just to read audio files, perform the fft and maybe algebra and math libraries.
NO BOOST. Boost is there just for experimental and quick development. I will remove any dependency with boost.
C++ 14/17: No support for C++98, for obvious reason I wont write code for an obsolete standard.
FIxed Point Support: when the library is done, I will integrate an small library to operate with fixed point arithmetic or peak an existing one from GitHub.
Multi-platform.
At the end my goal is to build EasyDSP, kind like OpenCV for computer vision.
Your suggestion are really appreciated. Take in consideration that the library is under construction. At the end everything should be documented and should keep the same interface. This is not even a beta /alpha version. There are many things to implement.
I am working in a wrapper for the library to use the Intel IPP library in EasyDSP. This small change boost the performance in more than 3x in most of the cases in Intel CPUs. For ARM, I am building wrappers around the NEON SIMD instructions to clean the final performance.
When the algorithms will be tested and benchmarked, I will write a common interface for all of them, as you suggested. Feel free to suggest or implement any algorithm you wish to be in the library.
Do not worry about the English. I am Spanish, I understand the problems with the language.
Just an small point: for now I will use boost because I am using the statistics and mathematical functions (bessel for example) from boost. When the library is ready, i will start to remove the different dependencies.
It will very nice if I get some help with the documentation and testing. I am planning to use Doxygen to generate the API documentation and added to the WIKI. But It is to soon for that.
it sounds very promising!
thank you for the details