DSP-Programmierung in C / C ++


8

Ich bin mit MATLAB vertraut und habe einige grundlegende Kenntnisse über Signalverarbeitung und Plotten in MATLAB ... aber ich bin mit C / C ++ besser vertraut als mit MATLAB, weil ich mit OpenCV in der Bildverarbeitung gearbeitet habe ... Ich war nur neugierig: Ist Gibt es eine DSP-Bibliothek oder -Plattform (da OpenCV für die Bildverarbeitung vorgesehen ist) für die Signalverarbeitung in C / C ++?


1
Ein Beispiel für drahtlose Kommunikationsanwendungen ist GNU Radio .
Jason R

1
Es gibt viele FFT-Bibliotheken in C / C ++. FFTW ist besonders schnell.
Jim Clay

3
Ein Problem bei der Beantwortung dieser Frage besteht darin, dass "Signalverarbeitung" ein äußerst weit gefasster Begriff ist, der viele domänenspezifische Unterfelder umfasst. Ich würde OpenCV als Signalverarbeitungsbibliothek bezeichnen, aber das macht es nicht nützlich für jemanden, der beispielsweise DSP für die Kommunikation verwendet. Vielleicht könnten Sie Ihre Anfrage eingrenzen.
Jason R

1
Betreff: @JimClays Kommentar: FFTW ist eine großartige Bibliothek. Wenn Sie C-Quellcode in einem Projekt verwenden müssen, sollten Sie KissFFT ausprobieren. Es ist nicht so gut optimiert, aber es ist ziemlich gut, und wie der Name vermuten lässt, ist es ziemlich einfach, den Quellcode durchzulesen. sourceforge.net/projects/kissfft
Dave C

Antworten:


7

Octave ist ein plattformübergreifendes Open-Source-Toolkit für Mathematik und Matrix. Es verfügt über einen Befehlszeileninterpreter, der MATLAB sehr ähnlich sein soll, es steht jedoch auch eine C ++ - API zur Verfügung. Da Sie sich im Gegensatz zur Bildverarbeitung auf die Signalverarbeitung beziehen, meine ich Audioverarbeitung. Daher müssen Sie möglicherweise die Pakete "Signal" und "Audio" in Oktave (die z. B. Wavread bereitstellen) untersuchen. Beachten Sie jedoch, dass die API in erster Linie für den internen Gebrauch in der Oktav-CLI konzipiert ist und als nicht stabil angesehen wird (dh die Bindungen können sich ändern). Da die Bibliothek nicht in erster Linie mit dieser verknüpft werden soll, ist die Dokumentation gelinde gesagt schlecht.

Alternativ gibt es auch die GNU Scientific Library , die nicht primär auf die Signalverarbeitung ausgerichtet ist, sondern komplexe Zahlen, Matrizen, fft usw. bereitstellt. Unter Windows müssten Sie dies selbst mit Cygwin kompilieren.


4

Haben Sie Gnuradio ausgecheckt ? Sie haben ähnliche Blöcke wie bei der Signalverarbeitung. Als ich es vor ein paar Jahren gewohnt war, gab es eine große Anzahl von Blöcken, die bereits verfügbar waren, und weitere in Arbeit, alle in C ++ geschrieben. Die Blöcke wurden mit Python zusammengeklebt, eine vollständige C ++ - Implementierung war jedoch in Arbeit.



2

Ich habe es nicht verwendet, aber gute Dinge über Gürteltier ( http://arma.sourceforge.net/ ) für matlab-ähnliche Funktionen gehört. Es gibt einige andere, die es mögen, aber es scheint, dass Gürteltier optimiert und aktiv entwickelt wird.

Ein Teil der Attraktivität von Octave, Matlab oder Python / Numpy / Scipy (manchmal als "Pylab" bezeichnet) ist die einfache Syntax zusammen mit einem interaktiven Interpreter mit Tab-Vervollständigungen. Dies kann die Entwicklung erheblich beschleunigen.

Mit Python / Numpy ist es möglich, eine DLL mit einem Python-Wrapper zu verpacken und im interaktiven Interpreter zu verwenden. Ich glaube, dass dies auch mit Matlab möglich ist, aber ich bin mir nicht sicher, ob dies in Oktave möglich ist. Seien Sie jedoch gewarnt, dass dies in Python / Numpy etwas kompliziert sein kann, obwohl ich festgestellt habe, dass die Vorteile die Kosten in der Vergangenheit wert sind, wenn die Leistung kritisch ist.


2

Armadillo leistet hervorragende Arbeit für die lineare Algebra in C ++ (ziemlich schnell über Ausdrucksvorlagen) und kann sicherlich auch für die Signalverarbeitung verwendet werden. Neben der Unterstützung von Matrizen mit verschiedenen Elementtypen werden Tensoren 3. Ordnung (Würfel) unterstützt, die bei der Bildverarbeitung nützlich sind.

Es gibt auch eine verwandte C ++ - Bibliothek namens IT ++ , die nicht so schnell wie Armadillo ist, aber mehr vorgefertigte Klassen enthält, die auf Signalverarbeitung und Kommunikation ausgerichtet sind.


Update:
Ab

0

JUCE ist eine schöne C ++ - Audio-Plattformbibliothek. Sie können VSTs ganz einfach darin erstellen, wenn Sie schnell einen E / A-Puffer auf Ihrer Soundkarte abspielen möchten, an dem Sie arbeiten können. Außerdem können Sie es anschließend als plattformübergreifende VST verwenden, wenn Sie möchten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.