Programación DSP en C / C ++

8

Tengo exposición a MATLAB y tengo una exposición básica al procesamiento y trazado de señales en MATLAB ... pero me siento más cómodo con C / C ++ que MATLAB porque he estado trabajando en procesamiento de imágenes con OpenCV ... Tenía curiosidad: es ¿Hay alguna biblioteca o plataforma DSP (como OpenCV es para el procesamiento de imágenes) para hacer el procesamiento de señales en C / C ++?

rotación_imagen
fuente
1
Un ejemplo que está sesgado hacia las aplicaciones de comunicaciones inalámbricas es GNU Radio .
Jason R
1
Hay muchas bibliotecas FFT en C / C ++. FFTW es particularmente rápido.
Jim Clay
3
Un problema para obtener buenas respuestas a esta pregunta es que "procesamiento de señal" es un término extremadamente amplio que abarca muchos subcampos específicos de dominio. Llamaría a OpenCV una biblioteca de procesamiento de señales, pero eso no lo hace útil para alguien que usa DSP para las comunicaciones, por ejemplo. Quizás podría limitar su consulta.
Jason R
1
Re: Comentario de @JimClay: FFTW es una gran biblioteca. Si necesita utilizar el código fuente C en un proyecto, puede consultar KissFFT. No está tan bien optimizado, pero es bastante bueno, y como su nombre podría sugerir, es bastante simple leer el código fuente. sourceforge.net/projects/kissfft
Dave C

Respuestas:

7

Octave es un kit de herramientas de matriz y matemáticas de código abierto multiplataforma. Tiene un intérprete de línea de comandos destinado a ser muy similar a MATLAB, pero también hay una API de C ++ disponible para su uso. Dado que se refiere al procesamiento de la señal en contraste con el procesamiento de la imagen, supongo que se refiere al procesamiento de audio, por lo que es posible que deba examinar los paquetes de "señal" y "audio" en octava (que proporcionan, por ejemplo, wavread). Sin embargo, tenga en cuenta que la API está diseñada principalmente para uso interno en la CLI de octava y que se considera no estable (es decir, los enlaces pueden cambiar). Además, dado que la biblioteca no está destinada principalmente a vincularse, la documentación es pobre, por decir lo menos.

Alternativamente, también existe la Biblioteca Científica GNU , que no está dirigida principalmente al procesamiento de señales, pero proporciona números complejos, matrices, fft, etc. En Windows, tendría que compilarlo usted mismo usando Cygwin.

Carlo Beltrame
fuente
4

¿Has echado un vistazo a gnuradio ? Tienen bloques similares a los que se usan en el procesamiento de señales. Cuando solía hacerlo hace unos años, había una gran cantidad de bloques que ya estaban disponibles y más en proceso, todos escritos en C ++. Los bloques se pegaron usando Python, pero una implementación completa de C ++ estaba en proceso.

Karthik V
fuente
2

No lo he usado, pero he escuchado cosas buenas sobre armadillo ( http://arma.sourceforge.net/ ) para una funcionalidad similar a matlab. Hay algunos otros como este, pero parece que el armadillo está optimizado y desarrollado activamente.

Parte del atractivo de octava, matlab o python / numpy / scipy (a veces llamado "pylab") es la sintaxis simple junto con un intérprete interactivo con compleciones de tabulación. Esto puede acelerar el desarrollo bastante.

Con python / numpy, es posible ajustar un dll con un contenedor de python y usarlo desde el intérprete interactivo. Creo que esto también se puede hacer con matlab, pero no estoy seguro de si esto se puede hacer en octava. Sin embargo, tenga en cuenta que esto puede ser un poco complicado en python / numpy, aunque he encontrado que los beneficios valen la pena en el pasado cuando el rendimiento es crítico.

Dave C
fuente
2

Armadillo hace un gran trabajo para el álgebra lineal en C ++ (bastante rápido a través de plantillas de expresión), y ciertamente también se puede usar para el procesamiento de señales. Además de admitir matrices con varios tipos de elementos, tiene soporte para tensores (cubos) de tercer orden, que son útiles en el procesamiento de imágenes.

También hay una biblioteca de C ++ relacionada conocida como IT ++ , que no es tan rápida como Armadillo, pero tiene más clases preconstruidas orientadas al procesamiento de señales y la comunicación.

mtall
fuente
Actualización: a partir de la versión 4.0+, Armadillo ahora tiene funciones para 1D FFT , 2D FFT y convolución
mtall
0

JUCE es una buena biblioteca de plataforma de audio C ++. Puede hacer VST con bastante facilidad si desea tener rápidamente un búfer de E / S reproduciéndose en su tarjeta de sonido en el que pueda trabajar. Además, puede usarlo como VST multiplataforma si lo desea.

oMittens
fuente