Programmation DSP en C / C ++

8

J'ai une exposition à MATLAB et une certaine exposition de base au traitement du signal et au traçage dans MATLAB ... mais je suis plus à l'aise avec C / C ++ que MATLAB parce que je travaille dans le traitement d'image avec OpenCV ... J'étais juste curieux: Existe-t-il une bibliothèque ou une plate-forme DSP (comme OpenCV pour le traitement d'image) pour effectuer le traitement du signal en C / C ++?

rotation_image
la source
1
Un exemple qui est biaisé vers les applications de communications sans fil est GNU Radio .
Jason R
1
Il existe de nombreuses bibliothèques FFT en C / C ++. FFTW est particulièrement rapide.
Jim Clay
3
Un problème pour obtenir de bonnes réponses à cette question est que le "traitement du signal" est un terme extrêmement large englobant de nombreux sous-domaines spécifiques à un domaine. J'appellerais OpenCV une bibliothèque de traitement du signal, mais cela ne le rend pas utile à quelqu'un qui utilise DSP pour les communications, par exemple. Vous pourriez peut-être affiner votre requête.
Jason R
1
Re: Commentaire de @JimClay: FFTW est une excellente bibliothèque. Si vous avez besoin d'utiliser du code source C dans un projet, vous voudrez peut-être consulter KissFFT. Ce n'est pas aussi bien optimisé, mais c'est assez bon, et comme son nom l'indique, il est plutôt simple de lire le code source. sourceforge.net/projects/kissfft
Dave C

Réponses:

7

Octave est une boîte à outils mathématique et matricielle open source multiplateforme. Il dispose d'un interpréteur de ligne de commande destiné à être très similaire à MATLAB, mais une API C ++ est également disponible. Puisque vous faites référence au traitement du signal par opposition au traitement d'image, je suppose que vous parlez de traitement audio, vous devrez donc peut-être examiner les paquets "signal" et "audio" en octave (qui fournissent par exemple wavread). Gardez cependant à l'esprit que l'API est principalement conçue pour un usage interne dans la CLI d'octave et qu'elle est considérée comme non stable (c'est-à-dire que les liaisons peuvent changer). De plus, comme la bibliothèque n'est pas principalement destinée à être liée à, la documentation est pour le moins pauvre.

Alternativement, il existe également la bibliothèque scientifique GNU , qui n'est pas principalement destinée au traitement du signal, mais fournit des nombres complexes, des matrices, des fft, etc. Sous Windows, vous devez le compiler vous-même à l'aide de Cygwin.

Carlo Beltrame
la source
4

Avez-vous vérifié gnuradio ? Ils ont des blocs similaires à ceux utilisés dans le traitement du signal. Il y a quelques années, il y avait un grand nombre de blocs qui étaient déjà disponibles et d'autres en préparation, tous écrits en C ++. Les blocs ont été collés ensemble à l'aide de python, mais une implémentation C ++ complète était en préparation.

Karthik V
la source
2

Je ne l'ai pas utilisé, mais j'ai entendu de bonnes choses à propos de tatou ( http://arma.sourceforge.net/ ) pour les fonctionnalités de type matlab. Il en existe quelques autres, mais il semble que le tatou soit optimisé et activement développé.

Une partie de l'attrait d'octave, de matlab ou de python / numpy / scipy (parfois appelé "pylab") est la syntaxe simple avec un interpréteur interactif avec des tabulations terminées. Cela peut accélérer considérablement le développement.

Avec python / numpy, il est possible d'envelopper une dll avec un wrapper python et de l'utiliser à partir de l'interpréteur interactif. Je crois que cela peut aussi être fait avec matlab, mais je ne sais pas si cela peut être fait en octave. Soyez averti, cependant, que cela peut être légèrement compliqué en python / numpy bien que j'ai trouvé que les avantages valaient le coût dans le passé lorsque les performances sont critiques.

Dave C
la source
2

Armadillo fait un excellent travail pour l'algèbre linéaire en C ++ (assez rapide via les modèles d'expression), et peut également être utilisé pour le traitement du signal. En plus de prendre en charge les matrices avec différents types d'éléments, il prend en charge les tenseurs (cubes) de troisième ordre, qui sont utiles dans le traitement d'image.

Il existe également une bibliothèque C ++ connexe connue sous le nom d' IT ++ , qui n'est pas aussi rapide qu'Armadillo, mais elle a plus de classes prédéfinies orientées vers le traitement du signal et la communication.

mtall
la source
Mise à jour: à partir de la version 4.0+, Armadillo a maintenant des fonctions pour 1D FFT , 2D FFT et convolution
mtall
0

JUCE est une belle bibliothèque de plateforme audio C ++. Vous pouvez créer des VST assez facilement si vous voulez avoir rapidement un tampon d'E / S sur votre carte son sur lequel vous pouvez travailler. De plus, vous pouvez ensuite l'utiliser comme un VST multiplateforme si vous le souhaitez.

oMittens
la source