Bibliotecas Ansi C optimizadas para DSP


8

Soy nuevo en DSP? ¿Dónde está un buen recurso para los algoritmos DSP de código abierto?

MATLAB es excelente para hacer protos, pero una vez que pasamos a la codificación C, lleva tiempo y terminamos cometiendo demasiados errores. Supongo que debe haber buenos repositorios de códigos C para diversas implementaciones de filtros, etc. Cualquier puntero sería bueno.


1
Definitivamente debe centrarse un poco, así como la elaboración de su pregunta. ¿Está realmente preocupado por la velocidad de ejecución o la creación de software independiente? ¿Cuál es el alcance (aplicación) y el objetivo? ¿Estás tratando de comparar Matlab vs. C vs. xyz? o realmente te has decidido en C y necesitas recursos allí? Any pointers are good- generalmente es un signo de falta de investigación previa de su parte.
Dipan Mehta

Respuestas:


4

Parte # 1: Con respecto a la comparación:

No hay una gran respuesta general a lo que es una alternativa más rápida a Matlab. Todo depende de la plataforma que uses.

@Hilmar asnwer que indica características como SIMD, que SON posibles en C. Pero requeriría soporte de lenguaje ensamblado junto con C.

Aquí hay una comparación más amplia:

  1. Si está trabajando en una informática de propósito general (como x86 o PPC), supongo que no hay nada mejor (y más rápido) que C.

  2. Si está trabajando en un hardware DSP especializado (o una plataforma integrada como ARM), el ensamblaje nativo estará muy por delante y C podría no ser rival. (Aunque C podría ser un equilibrio adecuado entre la creación de software flexible y la velocidad de ejecución.

  3. Si está comparando C con C ++, a diferencia de la percepción general, C ++ puede hacerse tan óptimo en la mayoría de los contextos con algunas de las mejores características de programación.

  4. Para otras herramientas útiles, puede consultar otras herramientas de secuencias de comandos como TCL o Lua. Estos son definitivamente mejores que el nivel inferior, pero pueden comprometer la velocidad.

Parte # 2: Las referencias

Supongo que debe haber buenos repositorios de códigos C para diversas implementaciones de filtros, etc.

  1. OpenCV : probablemente el mejor para aplicaciones de visión por computadora.

  2. ImLab 2.3 es una aplicación gráfica gratuita de código abierto para el procesamiento de imágenes científicas que se ejecuta en Windows, Linux y muchos otros sistemas UNIX. Admite múltiples ventanas, tipos de datos que incluyen números enteros de 32 bits, números reales de 32 bits y números complejos. Se implementa en C ++ y también en C para proporcionar una forma muy sencilla de agregar nuevas funciones. Tiene muchas operaciones de imagen y admite varios formatos de archivo.

  3. ImageLib : es una biblioteca de clase C ++ que proporciona procesamiento de imágenes e instalaciones relacionadas. El conjunto principal de clases proporciona una variedad de tipos de imágenes y vectores, con módulos adicionales que admiten cuantificación escalar y vectorial, transformaciones wavelet, transformaciones DCT y operaciones de histograma simples.

  4. CImage - Biblioteca de procesamiento de imágenes de plantilla C ++

  5. Camellia Library es una biblioteca de código abierto de procesamiento de imágenes y visión por computadora. Escrito en C simple, es multiplataforma (Unix / Linux, Windows) y robusto. Ya incluye muchas funciones para el procesamiento de imágenes (filtrado, matemática morfológica, etiquetado, deformación, dibujo, proyecto / proyecto posterior, conversión de color, carga / almacenamiento de imágenes, etc.), la mayoría de ellas con alta velocidad optimizada. También está documentado con oxígeno y se proporcionan ejemplos de uso.

  6. VXL : Bibliotecas C ++ para Investigación e Implementación de Visión por Computadora

  7. GNU Scientific Library (GSL) es una biblioteca numérica para programadores C y C ++

  8. Intel® Math Kernel Library (Intel® MKL) es una biblioteca matemática computacional de rutinas matemáticas altamente optimizadas y ampliamente entrelazadas para aplicaciones que requieren el máximo rendimiento. Las funciones matemáticas básicas incluyen BLAS, LAPACK, ScaLAPACK1, solucionadores dispersos, transformaciones rápidas de Fourier, matemáticas vectoriales y más.

  9. Puede consultar el libro: Recepciones numéricas en C , y el código de ejemplo.

encuentre mucho más desde aquí: http://www.cs.cmu.edu/~cil/v-source.html


4

El problema es que ANSI C no es un lenguaje terriblemente bueno para DSP en tiempo real. Muchas de las características que tiene un chip DSP real no se pueden abordar en ANSI C. Estos incluyen generadores de direcciones, direccionamiento de bits invertidos, direccionamiento circular, SIMD, segmentos de memoria, buses múltiples, tipos de datos fraccionales, multiplicación fraccional, ciertas matemáticas de punto fijo, cero sobrecarga en bucle, etc. Por lo tanto, la mayoría de los compiladores para DSP tienen un extenso conjunto de extensiones de lenguaje (#pragma, ensamblador en línea, nuevas palabras clave, etc.). Sin embargo, estos son decididamente no ANSI y no portátiles.

Escribir un filtro FIR simple de punto fijo en ANSI C puede ser fácilmente 10 veces menos eficiente que usar las extensiones adecuadas o el código de ensamblaje.


0

Puede verificar poner el producto del codificador matlab. Esto le permite generar código C directamente desde su código matlab sin tener que preocuparse por la introducción de errores humanos.

http://www.mathworks.co.uk/products/matlab-coder/?s_cid=HP_MI_matlabcoder

Sin embargo, solo admite un subconjunto del idioma y requiere una licencia por separado, pero puede ser adecuado para sus necesidades.

El siguiente enlace es útil para encontrar el subconjunto de funciones admitido

http://www.mathworks.co.uk/help/toolbox/eml/ug/bq1h2z7-11.html


0

Ceemple es un entorno de computación técnica JIT C ++ rápido, que agrupa varias bibliotecas C / C ++ optimizadas para computación técnica, por lo que puede realizar prototipos rápidos e implementación dentro de Ceemple. Disponible (gratis) en http://www.ceemple.com .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.