2010-04-28 9 views
6

Ich möchte eine benutzerdefinierte MATLAB-Funktion in Simulink verwenden. Bis jetzt habe ich es getan, indem ich einen eingebetteten MATLAB Funktionsblock platzierte. Wenn die benutzerdefinierte Funktion jedoch eine andere benutzerdefinierte Funktion enthält, schlägt der Kompilierungsprozess fehl. HierImplementieren von benutzerdefinierten MATLAB-Funktionen in Simulink

ist das Beispiel der Funktion Ich versuche, in der Simulation einzubinden:

function [c, d, iterationsCount] = decodeLDPC(y, H, variance) 
Lci = initializeLq(y, H, variance); 
Lr = getLr(Lci); 
[Lq, c] = getLq(Lci, H, Lr); 
iterationsCount = 1; 

while(sum(mod(c * H', 2)) ~= 0) 
    Lr = getLr(Lq); 
    [Lq, c] = getLq(Lq, H, Lr); 
    iterationsCount = iterationsCount + 1; 
end; 
G = getGeneratorMatrix(H); 
d = c/G; 

wo initializeLq und getLr sind auch kundenspezifische Funktionen.

Gibt es eine Methode, um die obige Funktion in der Simulation zu implementieren?

+0

Ich denke MikeT Antwort ist richtig, aber ich biete Ihnen dies: Verwenden Sie keinen eingebetteten MATLAB-Funktionsblock in Ihrem Modell, weil dieser Block das Modell sehr langsam ausgeführt wird. – Elmoya

+0

Wenn Ihr Modell langsam läuft, möchten Sie möglicherweise den EML-Block mit einem Stateflow-Diagramm umhüllen. Dadurch wird das Kopieren von Ein- und Ausgängen in jedem Zeitschritt überflüssig, sodass EML-Funktionen außerhalb von Stateflow-Diagrammen (in älteren Versionen von MATLAB) ausgeführt werden können (zumindest) weniger effizient. –

Antwort

1

Sie müssen den Befehl eml.extrinsic verwenden, um externe MATLAB-Funktionen von einem EML-Block aus aufzurufen. Sie können dies beispielsweise oben in der EML-Funktion

eml.extrinsic('getLr', 'initializeLq'); 

setzen, damit diese Funktionen aufgerufen werden können. Weitere Informationen finden Sie in der documentation