Matlab Code in C++ compilieren

Hallo!

Im Rahmen eines Uniprojektes habe ich einen MatLab Algorithmus in Form von m-files erstellt. Der nächste Schritt in diesem Projekt erfordert die Übersetzung dieses MatLab Quellcodes in C++, um diesen Algorithmus in eine Windows Anwendung einbinden zu können.
Nun ist meine Frage, ob MatLab bzw. Simulink die Übersetzung in die C Programmiersprache automatisch erstellen kann bzw ob es PlugIns gibt, die so etwas können. Habe leider nicht die meiste Programmiererfahrung, die manuelle Übersetzung würde mir ohne großen Aufwand nicht gelingen.

Inhaltlich stellt der Quellcode die Faltung eines Audiosignals mit einem Raumhall dar, also eine Operation mit 2 Eingangsvektoren und einem Ausgangsvektor.
Ich benutze MatLab/Simulink 7.8.0 Student Version.

Ich bedanke mich für eure Hilfe!

Viele Grüße,
Sascha

Hallo,

früher gab es dafür unter matlab das „mcc“ Kommando. Gib mal „help mcc“ ein und lies, was da steht. Keine Ahnung, ob es das bei Deiner Version noch gibt, Matlab ist kommerzielle Software und daher wollen sie konsequent, dass Du dieses Produkt auch immer brav nutzt. Wäre ja noch schöner, wenn Du da einfach C oder C++ Code (was eigentlich? In Deiner Frage war das nicht so klar) extrahieren könntest.

Es gibt allerdings für C und C++ dutzendweise fertige Algorithmen für eine Faltung. Tip für die Google-Suche: Auf Englisch heißt Faltung „convolution“.

Gruß

Fritze

Schon mal vielen Dank für deine Antwort Fritze!

Also den Befehl mcc kennt er schon mal gar nicht. Weißt du denn ungefähr bis zu welcher Version das noch von MatLab unterstützt wurde?

Und grundsätzlich würde ich mich über irgendeine Kompilierung freuen, sei es nun C oder C++. Da die Performance in meinem Projekt aber ein wichtiger Punkt ist, wäre C schon die Wunschsprache.

Ps: Danke auch für den Tip mit der MatLab Faltung, aber da es meine Aufgabe ist einen solchen Algorithmus zu schreiben und lauffähig zu bekommen kann ich nicht auf die MatLab Faltung zurpckgreifen. Ich bediene übrigens dem Radix2 Algorithmus, der eine schnelle Faltung ermöglicht.

Existieren denn vielleicht noch Freeware PlugIns/toolboxes die Matlab Code in C wandeln können?

Freue mich über jeden Tip/Hilfe.

MfG
Sascha

Ps: Danke auch für den Tip mit der MatLab Faltung, aber da es
meine Aufgabe ist einen solchen Algorithmus zu schreiben und
lauffähig zu bekommen kann ich nicht auf die MatLab Faltung
zurpckgreifen.

Sorry, verlesen…
ich meine natürlich , dass ich nicht auf einen fertigen Algorithmus in C zurückgreifen kann sondern einen selbstgeschriebenen Algorithmus mit Evaluierung in MatLab vorzulegen habe

Hallo,

Da Du mit Matlab arbeitest, gehe ich davon aus, dass Du eine diskrete Faltung brauchst, also eine simple Summe über ein paar Produkte. Es sollte nicht schwierig sein, dass selbst in C zu realisieren. Wenn Du einen DSP zur Verfügung hast, dann ist sogar Assembler kein Problem, weil diese Prozessoren über MAC Units (Multiply and Accumulate) verfügen. Ich weiß ja nicht, was da so rauskommen soll.

Wenn Du die „schnelle Faltung“ (also über FFT/Radix-2n) arbeiten möchtest, dann musst Du etwas mehr programmieren und dafür weniger rechnen. Es gibt aber auch Nachteile, wenn das technisch realisiert wird (höhere Latenz z.B.).

Ist denn schnelle Faltung vorgegeben, oder darfst Du das selbst entscheiden? Dann ist das doch kaum ein „eigener“ Algorithmus?

Egal wie, Du wirst kaum das Rad nochmal erfinden, sondern immer auf einen vorgefertigten Algorithmus zurückgreifen. Warum auch nicht?

Du könntest auch mehrere Algorithmen umsetzen und selbst Vergleiche durchführen (Komplexität, Ordnung, Latenz, Geschwindigkeit, etc.)

Was den Matlab Compiler betrifft (MCC), gibt er hier mehr Informationen: http://www.mathworks.com/products/compiler/

Ich glaube, es ist ein separates Produkt, aber es gibt auch eine Demoversion.

Der erzeugte C Code ist aber nicht wirklich C, sondern es werden nur Header und Funktionsaufrufe erzeugt, die dann m-files aus C aufrufen. D.h. die werden genauso (vergleichsweise) lahm ausgeführt und Du kannst noch immer keinen reinen C Code sehen.

Trotzdem viel Erfolg/Spaß/Glück.

Gruß

Fritze