7

I am looking to transition some of my MATLAB algorithms to C/C++ for deployment on target (PowerPC and/or ARM). Mostly 1D FIR/IIR filter in this instance.

In other domains, there are well-regarded general libraries (both speed and quality) with liberal licencing. For example, Linear Algebra has LAPACK and Eigen (amongst others), and computer vision has OpenCV.

There are well-regarded libraries for specific algorithms, such as FFTW, but what about a collection of general algorithms for 1D signals?

I'm not after DSP-specific libraries, such as for PIC32, CMSIS (ARM Cortex M4), DSPLIB (C64x) or Renesas, but nonetheless has similar functionality.

Royi
  • 19,608
  • 4
  • 197
  • 238
Damien
  • 606
  • 2
  • 8
  • 13
  • 3
    I've heard very good things about liquid DSP, but I haven't used it myself. – MBaz Nov 27 '14 at 01:11
  • 3
    I'll be frank and say that my library is not "well regarded" in the sense that hardly anyone knows about (i.e. it is not "regarded" at all :-) ), but it has lots of 1D DSP functionality. If you do find bugs in it, please let me know and I will be happy to fix them. https://github.com/JimClay/NimbleDSP – Jim Clay Nov 28 '14 at 13:50

5 Answers5

7

Maybe a bit late, but since others might land here like me.

The following are good signal processing libraries/frameworks: * https://www.gnuradio.org/ - lots of classic signal processing + cascading options * https://root.cern.ch/ - advanced statistical signal processing Both provide generic facade, fall-back implementations as well as performance optimised sub-libraries (ie. fftw, atlas, LAPACK, gsl, VOLK, ...).

Together with OpenCV, these probably cover 90++% of use-cases.

Angrond
  • 86
  • 1
  • 2
2

I have used Matlab Coder/Embedded Coder/Simulink Coder toolboxes from Mathworks to convert Matlab/Simulink to C/C++. They work well. The code is easy to read and you can navigate from C/C++ to Matlab easily in the code generation report.

Pros :

  • The code is easy to read.
  • Integrates almost seamlessly with your code base.
  • Portable.

Cons :

  • Slightly slower than hand-written code
  • Expensive
m-sh-shokouhi
  • 350
  • 2
  • 9
Ben
  • 3,765
  • 1
  • 10
  • 17
2

I was looking for a way of converting MATLAB code to C/C++ that I found Armadillo: http://arma.sourceforge.net/license.html. It's a C++ library covering various categories such as signal and image processing, statistics, matrix and vector, etc. For implementing a FIR filter for example, one can use the convolution (conv(A,B)) function.

lennon310
  • 3,590
  • 19
  • 24
  • 27
Alireza
  • 21
  • 1
1

I have heard good things about eigen: http://eigen.tuxfamily.org/index.php?title=Main_Page

If you are on iOS I would look at: https://developer.apple.com/documentation/accelerate/vdsp

It is possible to call Matlab from C. But hardly portable or something you do for a product.

I have reimplemented parts of Matlab several times («a good Matlab programmer can write Matlab in any language»). It would have been nice to have a open source/debugged C library mirroring the core Matlab function signatures. Then we could focus on getting 0-based and 1-based counting, column-major vs row-major, Visual Studio not supporting C99/ complex float, and all of the other pifalls :-)

Knut Inge
  • 3,384
  • 1
  • 8
  • 13
0

Why not CMSIS DSP on github Other that nimbledsp and liquid dsp mentioned in comments.

mohammadsdtmnd
  • 363
  • 3
  • 14