Bibliothèques Ansi C optimisées pour DSP


8

Je suis nouveau sur DSP? Où est une bonne ressource pour les algorithmes DSP open source?

MATLAB est excellent pour faire des protos mais une fois que nous passons au codage C, cela prend du temps et nous finissons par faire trop d'erreurs. Je suppose qu'il doit y avoir de bons référentiels de codes C pour diverses implémentations de filtres, etc. Tout pointeur serait bon.


1
Vous devez certainement apporter un peu de concentration ainsi que l'élaboration de votre question. Êtes-vous vraiment préoccupé par la vitesse d'exécution ou la création de logiciels indépendants? quelle est la portée (application) et la cible? Essayez-vous de comparer Matlab vs C vs xyz? ou avez-vous vraiment pris votre décision en C et avez-vous besoin de ressources là-bas? Any pointers are good- est généralement un signe de manque de recherche préalable de votre part.
Dipan Mehta

Réponses:


4

Partie # 1: Concernant la comparaison:

Il n'y a pas de grande réponse générale à ce qui est une alternative plus rapide à Matlab. Tout dépend de la plateforme que vous utilisez.

@ Hilmar asnwer indiquant des fonctionnalités comme SIMD - qui SONT possibles en C. Mais cela nécessiterait un support de langue d'assemblage avec C.

Voici une comparaison plus large:

  1. Si vous travaillez sur une informatique à usage général (comme x86 ou PPC), je suppose qu'il n'y a rien de mieux (et plus rapide) que C.

  2. Si vous travaillez sur du matériel DSP spécialisé (ou une plate-forme embarquée telle que ARM), l'assemblage natif sera très en avance et C pourrait bien ne pas être à la hauteur. (Bien que C puisse être un bon équilibre entre la flexibilité du logiciel et la vitesse d'exécution.

  3. Si vous comparez C avec C ++, contrairement à la perception générale - C ++ peut être rendu aussi optimal dans la plupart des contextes avec certaines des meilleures fonctionnalités de programmation.

  4. Pour d'autres outils pratiques - vous pouvez consulter d'autres outils de script comme TCL ou Lua. Ce sont certainement mieux que le niveau inférieur, mais pourraient compromettre la vitesse.

Partie # 2: Les références

Je suppose qu'il doit y avoir de bons référentiels de codes C pour diverses implémentations de filtres, etc.

  1. OpenCV - probablement le meilleur pour les applications de vision par ordinateur.

  2. ImLab 2.3 - est une application graphique open source gratuite pour le traitement d'images scientifiques qui fonctionne sous Windows, Linux et de nombreux autres systèmes UNIX. Il prend en charge plusieurs fenêtres, types de données, y compris des entiers 32 bits, des nombres réels 32 bits et des nombres complexes. Il est implémenté en C ++ et également en C pour fournir un moyen très simple d'ajouter de nouvelles fonctions. Il a de nombreuses opérations d'image et prend en charge plusieurs formats de fichiers.

  3. ImageLib : est une bibliothèque de classes C ++ fournissant le traitement d'image et les fonctionnalités associées. L'ensemble principal de classes fournit une variété de types d'images et de vecteurs, avec des modules supplémentaires prenant en charge la quantification scalaire et vectorielle, les transformées en ondelettes, les transformations DCT et les opérations d'histogramme simples.

  4. CImage - Bibliothèque de traitement d'images de modèle C ++

  5. Camellia Library est une bibliothèque open source de traitement d'images et de vision par ordinateur. Écrit en C simple, il est multiplateforme (Unix / Linux, Windows) et robuste. Il comprend déjà de nombreuses fonctions de traitement d'images (filtrage, mathématiques morphologiques, étiquetage, déformation, dessin, projet / rétro-projet, conversion des couleurs, chargement / sauvegarde d'images, etc.), la plupart étant hautement optimisées pour la vitesse. Il est également documenté par doxygen et des exemples d'utilisation sont fournis.

  6. VXL : bibliothèques C ++ pour la recherche et la mise en œuvre de la vision par ordinateur

  7. La bibliothèque scientifique GNU (GSL) est une bibliothèque numérique pour les programmeurs C et C ++

  8. La bibliothèque Intel® Math Kernel Library (Intel® MKL) est une bibliothèque mathématique informatique de routines mathématiques hautement optimisées et à threads intensifs pour les applications qui nécessitent des performances maximales. Les fonctions mathématiques de base incluent BLAS, LAPACK, ScaLAPACK1, des solveurs clairsemés, des transformées de Fourier rapides, des mathématiques vectorielles, etc.

  9. Vous pouvez vous référer au livre: Recettes numériques en C - et à l'exemple de code.

trouver beaucoup plus ici: http://www.cs.cmu.edu/~cil/v-source.html


4

Le hic, c'est que l'ANSI C n'est pas un très bon langage pour le DSP en temps réel. De nombreuses fonctionnalités qu'une véritable puce DSP ne peut pas être traitées dans ANSI C.Celles-ci incluent les générateurs d'adresses, l'adressage bit-reverse, l'adressage circulaire, SIMD, les segments de mémoire, les bus multiples, les types de données fractionnaires, la multiplication fractionnaire, certaines mathématiques en virgule fixe, zéro overhead looping etc. Par conséquent, la plupart des compilateurs pour DSP ont un ensemble étendu d'extensions de langage (#pragma, assembleur en ligne, nouveaux mots-clés, etc.). Cependant, ceux-ci sont décidément non ANSI et non portables.

L'écriture d'un simple filtre FIR à virgule fixe en ANSI C peut facilement être 10 fois moins efficace que l'utilisation des extensions ou du code d'assemblage appropriés.


0

Vous pouvez vérifier le produit du codeur matlab. Cela vous permet de générer du code C directement à partir de votre code matlab sans avoir à vous soucier de l'introduction d'erreurs humaines.

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

Cependant, il ne prend en charge qu'un sous-ensemble de la langue et nécessite une licence distincte, mais il peut convenir à vos besoins.

Le lien suivant est utile pour trouver le sous-ensemble de fonctions pris en charge

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


0

Ceemple est un environnement informatique technique JIT C ++ rapide, qui regroupe plusieurs bibliothèques C / C ++ optimisées pour l'informatique technique, de sorte que vous pouvez faire à la fois un prototypage rapide et un déploiement dans Ceemple. Disponible (gratuitement) sur http://www.ceemple.com .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.