2010-04-28 4 views
6

Je voudrais utiliser une fonction MATLAB personnalisée dans Simulink. Jusqu'à présent, je l'ai fait en plaçant un bloc fonctionnel MATLAB intégré. Toutefois, si la fonction personnalisée contient une autre fonction personnalisée, le processus de compilation échoue.Implémentation de fonctions MATLAB personnalisées dans Simulink

Voici l'exemple de la fonction que je suis en train d'intégrer dans la simulation:

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; 

initializeLq et getLr sont des fonctions personnalisées aussi bien.

Existe-t-il une méthode pour implémenter la fonction ci-dessus dans la simulation?

+0

Je pense que la réponse de MikeT est correcte, mais je vous l'offre: n'utilisez pas un bloc fonctionnel MATLAB intégré dans votre modèle car ce bloc ralentit le fonctionnement du modèle. – Elmoya

+0

Si votre modèle s'exécute lentement, vous pouvez envelopper le bloc EML avec un diagramme de flux d'état. Cela supprime la copie des entrées et des sorties à chaque pas de temps qui peut faire fonctionner EML en dehors des diagrammes de flux (dans les anciennes versions de MATLAB , au moins) moins efficace. –

Répondre

1

Vous devez utiliser la commande eml.extrinsic pour appeler toutes les fonctions MATLAB externes d'un bloc EML. Par exemple, vous pouvez mettre cela en haut de votre fonction EML,

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

pour permettre à ces fonctions d'être appelées. Pour plus d'informations, voir le documentation

Questions connexes