Génération de code pour le filtre FIR interpolé
Concevoir et implémenter efficacement un filtre FIR d’ordre élevé au moyen d’une cascade de filtres multi-étages à fréquences d’échantillonnage multiples. Générer du code C et le personnaliser à partir des filtres.
Produits MathWorks™ requis :
MATLAB®
DSP System Toolbox™
Simulink®
MATLAB® Coder™
Simulink® Coder™
Embedded Coder™
Introduction
Vous pouvez implémenter efficacement des filtres FIR d’ordre élevé à l’aide d’approches multi-étages à fréquences d’échantillonnage multiples. Pour réduire les coûts d’implémentation, vous pouvez décomposer un filtre d’ordre supérieur à un seul étage en une cascade de filtres à fréquences d’échantillonnage multiples d’ordre inférieur.
Le filtre FIR interpolé (ifir) présenté dans cet exemple utilise une cascade composée d’un filtre de décimation FIR, d’un filtre FIR et d’un filtre d’interpolation FIR, dont les coefficients peuvent être ajustés pour obtenir la réponse en fréquence souhaitée. Pour la génération de code, les variables de coefficients sont nommées et placées dans des fichiers de manière à ce qu’elles soient accessibles par d’autres composants logiciels qui modifient dynamiquement les coefficients lors de l’exécution sur le processeur cible.
Les sections suivantes décrivent la manière dont il est possible de définir le design FIR interpolé, d’analyser le comportement par simulation, de générer du code et de le personnaliser.

Spécifier un design
L’algorithme de design et d’implémentation du filtre FIR interpolé est défini en deux parties : une spécification de modèle et une spécification de données paramétrées. La spécification du modèle est un sous-système Simulink qui définit le flux de signaux de l’algorithme. La spécification du modèle accède également aux données paramétrées présentes dans l’espace de travail MATLAB. La spécification des données paramétrées est un script MATLAB qui génère les données auxquelles le modèle Simulink accède.

Dans cet exemple, la spécification du modèle correspond au sous-système InterpolatedFIR du modèle Simulink dspifircodegen. Dans ce sous-système, l’entrée passe à travers une cascade composée d’un filtre de décimation FIR, d’un filtrage FIR et d’un filtre d’interpolation FIR.
Dans cet exemple, la spécification des données paramétrées correspond au script MATLAB dapifirdata.m. Ce script MATLAB spécifie les coefficients de filtre initiaux, ainsi que les attributs de génération de code. Lorsque vous ouvrez le modèle dspifircodegen, sa fonction de callback PreLoadFcn est configurée de manière à exécuter le script dspifirdata.m qui crée les données de paramètre dans l’espace de travail MATLAB.

Explorer le comportement par la simulation
Vous pouvez simuler le modèle afin d’explorer le comportement du design et de l’implémentation du filtre FIR interpolé. Le modèle utilise un bloc Spectrum Analyzer pour visualiser la réponse en amplitude. Cliquez sur Run dans l’onglet Simulation pour exécuter le modèle. La durée de la simulation est définie à 1 000 s.

Générer du code C pour le sous-système FIR interpolé
Une fois que vous avez obtenu le comportement de simulation souhaité, vous pouvez générer du code C pour le sous-système InterpolatedFIR sur la base du design spécifié. Le modèle sur lequel repose cet exemple est configuré de manière à présenter certaines personnalisations courantes de génération de code, accessibles à partir du produit Embedded Coder. Ces personnalisations simplifient le processus de revue de code et d’intégration. Les sections suivantes indiquent comment appliquer certaines personnalisations de code à ce modèle et proposent des liens vers la documentation qui décrit ces personnalisations plus en détail.
Pour générer du code C, cliquez avec le bouton droit de la souris sur le sous-système InterpolatedFIR, puis sélectionnez C/C++ Code > Build This Subsystem. Vous pouvez également générer du code en cliquant sur le lien hypertexte suivant : Générer du code pour le sous-système InterpolatedIFIR.
Rapport de génération de code avec lien bidirectionnel
Le modèle est configuré de manière à générer un rapport HTML qui vous permet de parcourir les fichiers source et d’en-tête générés. Le rapport permet également d’établir un lien bidirectionnel entre le code généré et le modèle.

Pour plus d’informations sur la traçabilité entre le modèle et le code, veuillez consulter Trace Simulink Model Elements in Generated Code (Embedded Coder).
Appeler le code généré
Vous pouvez intégrer le code généré à une application en appelant les fonctions d’initialisation et d’étapes du modèle. Pour savoir comment appeler le code généré, consultez le fichier d’exemple généré ert_main.c. Notez que l’exemple main() présenté dans ert_main.c appelle InterpolatedFIR_initialize() afin d’initialiser les états. L’exemple de code rt_OneStep() présenté dans ert_main.c indique comment un mécanisme périodique, comme une interruption, appelle InterpolatedFIR_step() à partir du fichier InterpolatedFIR.c.

Pour plus d’informations sur la manière d’intégrer le code généré à une autre application, veuillez consulter Deploy Applications to Target Hardware (Embedded Coder).
Interface des données d’entrée et de sortie
Le fichier de spécification des données paramétrées, dspifirdata.m, crée les objets de données de signal in et out dans l’espace de travail MATLAB. Ces objets de données sont associés à des lignes de signaux dans le modèle et servent à spécifier les descriptions et classes de stockage des variables correspondantes dans le code généré. Par exemple, les signaux in et out sont déclarés en tant que variables globales dans InterpolatedFIR.c. Pour exécuter la fonction d’étapes du modèle, une application écrit des données dans in, appelle la fonction InterpolatedFIR_step(), puis lit les résultats à partir d’out.
Pour plus d’informations sur les objets de données, veuillez consulter Create Data Objects for Code Generation with Data Object Wizard (Embedded Coder).
Annotations textuelles dans les commentaires du code
Vous pouvez insérer, sous forme de commentaires dans le code généré, la documentation de design saisie sous forme de texte. Le sous-système InterpolatedFIR contient un texte d’annotation avec le mot-clé S:Description. Le générateur de code détecte que le texte débute par ce mot-clé et insère le texte qui suit ce mot-clé sous forme de commentaires dans le code généré.
Pour plus d’informations sur l’insertion d’un texte d’annotation dans les commentaires du code, veuillez consulter Add Global Comments in the Generated Code (Embedded Coder).
Affectation du fichier de coefficients
Le fichier de spécification des données paramétrées, dspifirdata.m, crée les objets de données paramétrées pour les coefficients dans l’espace de travail MATLAB. Ces objets de données sont configurés de manière à définir et déclarer des variables de coefficients dans des fichiers distincts, soit respectivement ifir_coeffs.c et ifir_coeffs.h. Le partitionnement des coefficients dans des fichiers distincts permet à d’autres composants logiciels d’accéder à ces données. Par exemple, dans une application déployée, vous pouvez programmer un autre composant logiciel qui modifiera ces variables lors de l’exécution avant qu’elles ne soient utilisées par InterpolatedFIR_step().
Pour plus d’informations sur l’affectation du fichier des objets de données, veuillez consulter Control Placement of Global Data Definitions and Declarations in Generated Files (Embedded Coder).
Paramètres de design des filtres dans les commentaires des variables de coefficients
Lors du calcul des coefficients (dans le fichier des données paramétrées), les paramètres de design des filtres sont enregistrés dans le champ Description des objets de données des paramètres de coefficients. Le modèle est configuré de manière à insérer les paramètres de design sous forme de commentaires dans le code généré. Ainsi, les personnes chargées de la revue du code peuvent identifier facilement les paramètres utilisés pour le design des filtres.

Pour plus d’informations sur la personnalisation des commentaires des objets de données dans le code généré, veuillez consulter Add Custom Comments for Variables in the Generated Code (Embedded Coder).
Packager les fichiers générés
Les fichiers générés auxquels le rapport HTML fait référence se trouvent dans le répertoire InterpolatedFIR_ert_rtw. Outre les fichiers de ce répertoire, d’autres fichiers situés dans le répertoire d’installation de l’application MATLAB peuvent être nécessaires pour l’intégration à un projet. Pour faciliter le portage du code généré vers d’autres environnements, ce modèle est configuré de manière à utiliser la fonctionnalité PackNGo, qui package tous les fichiers nécessaires dans le fichier zip InterpolatedFIR.zip. Remarque : le fichier zip contient tous les fichiers nécessaires, mais il peut également contenir des fichiers supplémentaires qui ne sont pas indispensables.
Pour plus d’informations sur le packaging de fichiers en vue d’une intégration à d’autres environnements, veuillez consulter Relocate or Share Generated Code (Simulink Coder).
Voir aussi
Random Source | FIR Decimation | Discrete FIR Filter (Simulink) | FIR Interpolation | Spectrum Analyzer
Rubriques
- Generate and Deploy SIMD Optimized Code for Interpolated FIR Filter on Intel Desktops
- Generate Standalone Executable and Interact with It Using UDP
- Trace Simulink Model Elements in Generated Code (Embedded Coder)
- Create Data Objects for Code Generation with Data Object Wizard (Embedded Coder)
- Add Global Comments in the Generated Code (Embedded Coder)
- Control Placement of Global Data Definitions and Declarations in Generated Files (Embedded Coder)
- Add Custom Comments for Variables in the Generated Code (Embedded Coder)
- Relocate or Share Generated Code (Simulink Coder)