Question

J'ai une question sur un algorithme de codage pour Texas Instruments TMS320C64xx DSP dans Matlab:

J'ai une mise en œuvre bâclée de travail de mon filtre dans MATLAB. Mon objectif est d'utiliser Matlab Embedded Coder pour convertir cet algorithme à C que je peux ensuite importer au code Composer Studio et la charge sur le DSP.

Pour ce faire, je sais qu'il ya certaines choses que je dois faire pour mon code Matlab. Par exemple, je dois pré-allouer de l'espace pour les matrices afin qu'il sache ce que la taille de les faire (à moins que je veux faire des histoires autour des données de taille variable). Tout ce que le massage du Code Matlab en code C'ish de sorte que codeur peut convertir Matlab je plus ou moins comprendre. Cependant, je ne sais pas comment faire en sorte que mes types de données (par exemple les coefficients de mon filtre) sont point fixe plutôt que la virgule flottante afin que Matlab Embedded Coder convertira mon code à C qui ne concerne que les types de données de point fixe.

Je suppose que mes questions générales sont:

1) Si le C64xx est spécifié comme 32 bits point fixe DSP, ce qui signifie un compilateur pour elle renvoie une erreur si je tente d'utiliser le type de données float?

2) Est-il un moyen de faire en sorte que Matlab Embedded Coder ne crée pas les types de données float?

3) Ai-je besoin d'utiliser la boîte à outils Matlab fixe Point?

Merci à vous tous, laissez-moi savoir s'il y a plus d'informations nécessaires pour répondre à ma question.

Était-ce utile?

La solution

  1. Vous pouvez utiliser les types de données flottantes point mais, comme la réponse précédente souligne, le DSP et être émule flotteurs l'exécution sera beaucoup plus lent. Ce type d'exécution est OK pour certaines opérations numériques où a) vous avez besoin de la précision des flotteurs b) et / ou conversion à point fixe, est typiquement une douleur (par exemple les racines carrées) ou non faisable toujours, c) et / ou ces opérations ne se produisent pas souvent dans votre programme de porcs la plupart des cycles CPU.

  2. Oui. Il y a une case à cocher dans la boîte de dialogue des paramètres de configuration MATLAB Coder, sous volet Interface, qui dit « soutien que des nombres purement entiers ». Si vous cochez cette veillera à ce que vous ne recevez pas de types de données en virgule flottante dans le code généré. Cependant, vous devez d'abord vous assurer que vous utilisez uniquement les types de données entier / à virgule fixe dans votre code. Cette option juste assure qu'il n'y a pas généré flotteurs -. Il ne génère pas automatiquement un point fixe ou entier seule version du code de votre code Matlab virgule flottante

  3. Pour vraiment créer une première que vous souhaitez point fixe C-code, devez convertir votre code Matlab en virgule flottante à un point fixe. Vous auriez besoin de la Fixed-Point Toolbox qui vous permettent de spécifier vos variables est comme un objet FI, et de définir les règles de point fixe des opérations en utilisant le réglage de FIMATH. Une fois que vous définissez un type de données à virgule fixe 16/32 bits pour toutes vos variables et opérations, vous pouvez simuler, analyser les résultats et itérer sur elle pour modifier vos paramètres afin de minimiser vos débordements et des erreurs d'arrondi. Ensuite, vous pouvez générer un seul véritable entier du code C qui se comportera comme (ou très proche) votre comportement Matlab point fixe. Toutes les différences que vous pouvez voir entre votre code Matlab point fixe et le code C point fixe seront principalement en raison de celles introduites par votre compilateur cible.

Le lien suivant pour un webinaire enregistré sur ce sujet devrait fournir une bonne introduction à ce processus d'utilisation du Fixed-Point Toolbox: http://www.mathworks.com/wbnr38838

HTH.

Autres conseils

Je ne peux répondre à votre première question:

Le C64xx est un DSP à virgule fixe 32 bits, mais le compilateur ne se plaindra pas si vous utilisez à virgule flottante. Le code résultant fonctionnera bien, mais sera (beaucoup) plus lent parce que les opérations en virgule flottante seront émulés.

Le C64xx DSP peut également faire le point fixe de 16 bits et un point fixe mixte 32x16 bits. Plus les données sont-types que vous utilisez, plus le code résultant fonctionnera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top