Ich bin neu bei DSP? Wo ist eine gute Ressource für Open Source DSP-Algorithmen?
MATLAB ist großartig darin, Protos zu erstellen, aber sobald wir zur C-Codierung übergehen, braucht es Zeit und wir machen am Ende zu viele Fehler. Ich würde vermuten, dass es gute Repositories von C-Codes für verschiedene Implementierungen von Filtern usw. geben muss. Alle Zeiger wären gut.
algorithms
c
Ktuncer
quelle
quelle
Any pointers are good
- ist im Allgemeinen ein Zeichen für mangelnde vorherige Forschung von Ihrer Seite.Antworten:
Teil 1: Zum Vergleich:
Es gibt keine gute allgemeine Antwort auf eine schnellere Alternative zu Matlab. Es hängt alles von der Plattform ab, die Sie verwenden.
@Hilmar asnwer zeigt Funktionen wie SIMD an - die in C möglich sind. Aber es würde Unterstützung für die Montagesprache zusammen mit C erfordern.
Hier ist ein breiterer Vergleich:
Wenn Sie an einem Universalcomputer (wie x86 oder PPC) arbeiten, gibt es wohl nichts Besseres (und Schnelleres) als C.
Wenn Sie an spezialisierter DSP-Hardware (oder einer eingebetteten Plattform wie ARM) arbeiten, ist die native Assembly weit voraus und C ist möglicherweise nicht mit dieser vergleichbar. (Obwohl C möglicherweise das richtige Gleichgewicht zwischen flexibler Software und Ausführungsgeschwindigkeit darstellt.
Wenn Sie C mit C ++ vergleichen, kann C ++ im Gegensatz zur allgemeinen Wahrnehmung in den meisten Fällen mit einigen der besseren Programmierfunktionen genauso optimal gemacht werden.
Für andere nützliche Tools können Sie sich einige andere Skript-Tools wie TCL oder Lua ansehen. Diese sind definitiv besser als niedrigere Werte, können jedoch die Geschwindigkeit beeinträchtigen.
Teil 2: Die Referenzen
OpenCV - wahrscheinlich am besten für Computer Vision-Anwendungen.
ImLab 2.3 - ist eine kostenlose Open Source-Grafikanwendung für die wissenschaftliche Bildverarbeitung, die unter Windows, Linux und vielen anderen UNIX-Systemen ausgeführt wird. Es unterstützt mehrere Fenster, Datentypen einschließlich 32-Bit-Ganzzahlen, 32-Bit-reellen Zahlen und komplexen Zahlen. Es ist in C ++ und auch in C implementiert, um eine sehr einfache Möglichkeit zum Hinzufügen neuer Funktionen bereitzustellen. Es hat viele Bildoperationen und unterstützt verschiedene Dateiformate.
ImageLib : ist eine C ++ - Klassenbibliothek, die Bildverarbeitung und verwandte Funktionen bietet. Die Hauptklasse von Klassen bietet eine Vielzahl von Bild- und Vektortypen mit zusätzlichen Modulen, die Skalar- und Vektorquantisierung, Wavelet-Transformationen, DCT-Transformationen und einfache Histogrammoperationen unterstützen.
CImage - C ++ - Vorlagenverarbeitungsbibliothek
Die Camellia Library ist eine Open-Source-Bibliothek für Bildverarbeitung und Computer Vision. In C geschrieben, plattformübergreifend (Unix / Linux, Windows) und robust. Es enthält bereits viele Funktionen für die Bildverarbeitung (Filterung, morphologische Mathematik, Beschriftung, Verzerrung, Zeichnung, Projekt / Rückprojekt, Farbkonvertierung, Laden / Speichern von Bildern usw.), von denen die meisten stark geschwindigkeitsoptimiert sind. Es ist auch Sauerstoff dokumentiert und Anwendungsbeispiele werden bereitgestellt.
VXL : C ++ - Bibliotheken für Computer Vision-Forschung und -Implementierung
Die GNU Scientific Library (GSL) ist eine numerische Bibliothek für C- und C ++ - Programmierer
Die Intel® Math Kernel Library (Intel® MKL) ist eine Computer-Mathematikbibliothek mit hochoptimierten Mathematikroutinen mit umfangreichen Threads für Anwendungen, die maximale Leistung erfordern. Zu den wichtigsten mathematischen Funktionen gehören BLAS, LAPACK, ScaLAPACK1, Sparse Solver, schnelle Fourier-Transformationen, Vektormathematik und vieles mehr.
Sie können sich auf das Buch beziehen: Numerische Belege in C - und den Beispielcode.
Weitere Informationen finden Sie hier: http://www.cs.cmu.edu/~cil/v-source.html
quelle
Das Problem ist, dass ANSI C keine besonders gute Sprache für Echtzeit-DSP ist. Viele Funktionen, die ein echter DSP-Chip hat, können in ANSI C nicht angesprochen werden. Dazu gehören Adressgeneratoren, Bit-Reverse-Adressierung, zirkuläre Adressierung, SIMD, Speichersegmente, mehrere Busse, gebrochene Datentypen, gebrochene Multiplikation, bestimmte Festkomma-Mathematik, Null-Overhead-Schleifen usw. Daher verfügen die meisten Compiler für DSPs über umfangreiche Spracherweiterungen (#pragma, Inline-Assembler, neue Schlüsselwörter usw.). Diese sind jedoch entschieden nicht ANSI und nicht portabel.
Das Schreiben eines einfachen Festkomma-FIR-Filters in ANSI C kann leicht zehnmal weniger effizient sein als die Verwendung der richtigen Erweiterungen oder des richtigen Assembler-Codes.
quelle
Sie können das Matlab-Codiererprodukt überprüfen. Auf diese Weise können Sie C-Code direkt aus Ihrem Matlab-Code generieren, ohne sich um die Einführung menschlicher Fehler sorgen zu müssen.
http://www.mathworks.co.uk/products/matlab-coder/?s_cid=HP_MI_matlabcoder
Es unterstützt jedoch nur eine Teilmenge der Sprache und erfordert eine separate Lizenz, ist jedoch möglicherweise für Ihre Anforderungen geeignet.
Der folgende Link ist nützlich, um die unterstützte Teilmenge der Funktionen zu finden
http://www.mathworks.co.uk/help/toolbox/eml/ug/bq1h2z7-11.html
quelle
Ceemple ist eine schnelle technische JIT C ++ - Computerumgebung, die mehrere optimierte C / C ++ - Bibliotheken für technisches Computing bündelt, sodass Sie sowohl Rapid Prototyping als auch Bereitstellung in Ceemple durchführen können. Erhältlich (kostenlos) unter http://www.ceemple.com .
quelle