Optimierte Ansi C-Bibliotheken für DSP


8

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.


1
Sie müssen auf jeden Fall ein wenig Fokus und Ausarbeitung in Ihre Frage bringen. Sind Sie wirklich besorgt über die Geschwindigkeit der Ausführung oder Erstellung und unabhängige Software? Was ist der Umfang (Anwendung) und das Ziel? Versuchen Sie, Matlab vs. C vs. xyz zu vergleichen? oder haben Sie sich wirklich für C entschieden und benötigen dort Ressourcen? Any pointers are good- ist im Allgemeinen ein Zeichen für mangelnde vorherige Forschung von Ihrer Seite.
Dipan Mehta

Antworten:


4

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:

  1. Wenn Sie an einem Universalcomputer (wie x86 oder PPC) arbeiten, gibt es wohl nichts Besseres (und Schnelleres) als C.

  2. 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.

  3. 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.

  4. 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

Ich würde vermuten, dass es gute Repositories von C-Codes für verschiedene Implementierungen von Filtern usw. geben muss.

  1. OpenCV - wahrscheinlich am besten für Computer Vision-Anwendungen.

  2. 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.

  3. 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.

  4. CImage - C ++ - Vorlagenverarbeitungsbibliothek

  5. 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.

  6. VXL : C ++ - Bibliotheken für Computer Vision-Forschung und -Implementierung

  7. Die GNU Scientific Library (GSL) ist eine numerische Bibliothek für C- und C ++ - Programmierer

  8. 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.

  9. 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


4

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.


0

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


0

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 .

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.