www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP C Bibliotheken zur Signalverarbeitung\Mathematik (Simulation)


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich würde gern ein paar Matlab Simulationen aus gewchwindigkeitsgründen 
durch C ersetzen.
Kennt da jemand ein paar gute Bibliotheken zur 
Signalverarbeitung/Mathematik?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du sehr schnelles Wurzelziehen und Sinus etc. willst, nimm die 
Funktionen von id Software. Ja, genau die die Doom und Quake 
programmiert haben. Den Sourcecode gibt es im Internet. Für mehr 
Genauigkeit halt die C Standard Library.

Für z.B. FIR-Filter habe ich auch schon diverse Open Source 
Implementierungen gesehen, aber ich weiß nicht ob es da sowas wie eine 
"Standardbibliothek" gibt?

Autor: Ras Funk (rasfunk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt's da nicht auch den Matlab-To-C Compiler? Damit könnte man doch 
direkt schnellen C-Code erzeugen. Dann ein guter Compiler (icc z.B. für 
Windows), und dann sollte das performant genug sein.

Handoptimierte C-Routinen... naja. Das geht immer auf Kosten der 
Genauigkeit, man kriegt neue Fehler rein etc. pp.

Falls es noch zu langsam ist, würde ich empfehlen den Algorithmus zu 
optimieren, ggflls. Parallelisieren etc.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ras Funk schrieb:
> Gibt's da nicht auch den Matlab-To-C Compiler?

Vielleicht hat er den nicht, weil der womöglich wie so ziemlich jede 
"Box" bei Matlab extra kostet...

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal muss man herausfinden, was es ist das zu langsam ist. Dazu 
hat Matlab einen Profiler. Vorher sind jegliche Diskussionen über 
Optimierungen sinnlos.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte auch, wenn man meint, dass bestimmte Routinen zu langsam 
sind, in Betracht ziehen, dass Matlab einen JIT-Compiler hat und vieles 
damit zur Laufzeit kompiliert werden. Routinen wie ein Sinus usw. sind 
mit Sicherheit schon kompiliert bzw. extra optimiert.

Vielleicht wurde einfach etwas "ungeschickt" programmiert?

Autor: schmitti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wurzelziehen, Sinus, FIR ...
All das gehört quasi zur "Kernkompetenz" von Matlab und ist daher schon 
hoch optimiert. Unter der Voraussetzung, dass auch entsprechend 
"vektorisiert" gerechnet wird und die Genauigkeit von double benötigt 
wird, wirst Du es in C kaum schneller hinbekommen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Vektorisieren ist übrigens überhaupt nicht mehr notwendig, wenn ein 
paar Regeln für den JIT-Compiler erfüllt werden. Dann kann dieser die 
Funktion kompilieren und es ist kaum noch ein Unterschied zur 
"vektorisierten" Version festzustellen.

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuerst profilen. Tabu sind jegliche handgeschriebene Schleifen ala
for i=1:1000000 ... Wenn man nur mit eingebauten Funktionen arbeitet,
die wiederum mit grossen Vektoren füttert, dann wird man es wohl kaum
performanter bekommen. Teste mal deinen Code auch mit Octave.

BTW: ich habe neulich sehr kurz über Blitz++ gelesen. Das ist eine
Bibliothek für C++, die stark auf templates aufbaut. Sie soll
d = a + b + c statt üblichen (a.operator+(b)).operator+(c), dass
genau 2 mal durch for(i=0;i<a.size;i++) läuft, einmalig mit
for(i=0;i<a.size;i++) c[i]=a[i]+b[i]+c[i]; ausführen. Was natürlich
deutlich schneller ist. Welche tolle Transformationen noch zur 
Compilezeit
angestellt werden, weiss noch nicht.

Grüsse, daniel

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Kennt da jemand ein paar gute Bibliotheken zur Signalverarbeitung/Mathematik?

it++

itpp.sourceforge.net

Cheers
Detlef

Autor: J. S. (Firma: Telekomunikation Darmstadt) (juergenffm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Handoptimierungen
Es empfiehlt sich, die Libs mal druchzuvalidieren. Ich habe das mal mit 
Excel und Matlab gemacht. Gerade beim Sinus tun sich da Abgründe auf.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.