Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Éliminer le bruit à basse fréquence dans Simulink en utilisant un filtre adaptatif normalisé LMS

Les filtres adaptatifs pistent la nature dynamique d’un système et permettent d’éliminer les signaux à variation temporelle. Les bibliothèques DSP System Toolbox™ comportent des blocs qui implémentent l'algorithme LMS (Least-Mean-Square), Block LMS, Fast Bloc LMS, et les algorithmes de filtres adaptatifs RLS (Recursive Least Square). Ces filtres minimisent la différence entre le signal de sortie et le signal désiré en altérant leurs coefficients de filtres. Avec le temps, le signal de sortie du filtre adaptatif approxime plus précisément le signal que vous souhaitez reproduire.

Concevoir un filtre adaptatif dans Simulink

Dans cet exemple, vous allez concevoir un filtre adaptatif pour éliminer le bruit à basse fréquence de votre signal :

Si le modèle que vous avez crée dans Ajouter un filtre numérique à un modèle n’est pas ouvert sur votre desktop, ouvrez ex_gstut5, qui est un modèle équivalent.

gstut5.png

Ouvrez la bibliothèque de DSP System Toolbox™ en saisissant dsplib dans l’invite de commande MATLAB®.

Éliminez le bruit à basse fréquence du signal en ajoutant un bloc LMS Filter au système. Dans le scénario de l'avion, cela revient à soustraire le bruit du vent à l’intérieur du cockpit de l’entrée vers le micro. Double-cliquez sur la bibliothèque Filtering, puis double-cliquez sur la bibliothèque Adaptive Filters. Ajoutez le bloc LMS Filter dans votre modèle.

gstut5_with_LMS.png

Configurez les paramètres du bloc LMS Filter pour modéliser la sortie du bloc Digital Filter Design. Ouvrez la boîte de dialogue LMS Filter en double-cliquant sur le bloc. Configurez et appliquez les paramètres du bloc comme suit :

  • Algorithm = Normalized LMS

  • Filter length = 32

  • Specify step size via = Dialog

  • Step size (mu) = 0.1

  • Leakage factor (0 to 1) = 1.0

  • Initial value of filter weights = 0

  • Décochez la case Adapt port.

  • Reset port = None

  • Cochez la case Output filter weights.

Selon ces paramètres, le bloc Filter LMS calcule les pondérations du filtre en utilisant les équations normalisées LMS. L’ordre du filtre, que vous avez spécifié, est le même que l’ordre du filtre du bloc Digital Filter Design. Le paramètre Step size (mu) définit la granularité du pas de mises à jour du filtre. Comme le paramètre Leakage factor (0 to 1) a été configuré à 1.0, les valeurs actuelles des coefficients du filtre dépendent des conditions initiales du filtre et de toutes les valeurs d’entrées précédentes. La valeur initiale des pondérations du filtre (coefficients) est zéro. Comme la case Output filter weights a été cochée, le port Wts apparaît sur le bloc. Le bloc extrait les pondérations du filtre par ce port.

Maintenant que les paramètres du bloc LMS Filter ont été configurés, il est possible d’incorporer ce bloc dans votre schéma bloc.

Ajouter un filtre adaptatif à votre modèle

Dans cet exemple, vous pouvez récupérer votre signal sinusoïdal d'origine en incorporant le filtre adaptatif, que vous avez conçu, dans Concevoir un filtre adaptatif dans Simulink votre système. Dans le scénario de l’avion, le filtre adaptatif modélise le bruit à basse fréquence entendu à l’intérieur du cockpit. De ce fait, vous pouvez éliminer le bruit afin que la voix du pilote soit la seule entrée dans le micro :

Si le modèle que vous avez crée dans Concevoir un filtre adaptatif dans Simulink n’est pas ouvert sur votre desktop, ouvrez ex_gstut6, qui est un modèle équivalent.

gstut6.png

Ajoutez un bloc Sum à votre modèle pour soustraire la sortie du filtre adaptatif au signal sinusoïdal avec un bruit basse fréquence. Depuis la bibliothèque Simulink fallback for tm_simulink Math Operations, faites glisser un bloc Sum dans le modèle. Ouvrez la boîte de dialogue Sum en double-cliquant sur ce bloc. Remplacez le paramètre List of signs par |+- puis cliquez sur OK.

Incorporez le bloc LMS Filter à votre système.

  • Connectez la sortie du bloc Random Source au port d’entrée du bloc LMS Filter. Dans le scénario de l’avion, le bruit aléatoire est le bruit blanc mesuré par le capteur à l’extérieur de l’avion. Le bloc LMS Filter modélise l’effet qu’a le fuselage de l’avion sur le bruit.

  • Connectez la sortie du bloc Digital Filter au port désiré sur le bloc LMS Filter. Ce signal est celui que le bloc LMS doit reproduire.

  • Connectez la sortie du bloc LMS Filter au port négatif du bloc Sum ajouté à l’étape 2.

  • Connectez la sortie du premier bloc Sum au port positif du second bloc Sum. Votre modèle devrait maintenant ressembler à la figure suivante.

gstut6_intermediate.png

L’entrée positive du second bloc Sum est la somme du signal d’entrée et du bruit à basse fréquence, s(n) + y. L’entrée négative du second bloc Sum est la meilleure estimation du bruit à basse fréquence du bloc LMS Filter, y'. Lorsqu’on soustrait les deux signaux, ce qui reste est une approximation du signal d’entrée.

s(n)approx=s(n)+y-y

Dans cette équation :

  • s(n) est le signal d’entrée.

  • s(n)approx est l’approximation du signal d’entrée.

  • y est le bruit créé par le bloc Random Source et le bloc Digital Filter Design.

  • y est l’approximation du bruit du bloc LMS Filter.

Comme le bloc LMS Filter ne peut fournir qu'une approximation du bruit, il y a toujours une différence entre le signal d’entrée et l’approximation du signal d’entrée. Dans les étapes suivantes, vous allez configurer le bloc Scope pour comparer le signal sinusoïdal d'origine et son approximation.

Ajoutez deux entrées et deux axes supplémentaires au bloc Scope. Ouvrez la boîte de dialogue Scope en double-cliquant sur le bloc Scope. Cliquez sur le bouton Parameters. Pour le paramètre Number of axes, saisissez 4. Fermez la boîte de dialogue en cliquant sur OK.

Nommez les nouveaux axes du Scope. Dans la fenêtre Scope, faites un clique-droit sur le troisième axe et sélectionnez Axes properties. La boîte de dialogue Scope properties : axis 3 s’ouvre. Dans la case Title, saisissez Approximation of Input Signal. Fermez la boîte de dialogue en cliquant sur OK. Répétez cette procédure pour le quatrième axe et nommez le Error.

Connectez la sortie du second bloc Sum au troisième port du bloc Scope.

Connectez la sortie du port Error du bloc LMS Filter au quatrième port du bloc Scope. Votre modèle devrait maintenant ressembler à la figure suivante.

gstut6_intermediate2.png

Dans cet exemple, la sortie du port Error est la différence entre le signal du filtre LMS souhaité et son signal de sortie. Comme cette erreur n’est jamais zéro, le filtre continue de modifier les coefficients de filtres afin d’arriver à une meilleure approximation du bruit à basse fréquence. Plus l’approximation est bonne, plus le bruit à basse fréquence peut être éliminé du signal sinusoïdal. Dans la rubrique suivante, Afficher les coefficients de votre filtre adaptatif, découvrez comment voir les coefficients de votre filtre adaptatif à mesure qu’ils changent avec le temps.

Afficher les coefficients de votre filtre adaptatif

Les coefficients d’un filtre adaptatif changent avec le temps conformément à un algorithme choisi. Une fois que l’algorithme a optimisé les performances du filtre, ces coefficients de filtre atteignent leurs valeurs stationnaires. Il est possible d’afficher la variation des coefficients pendant que la simulation est en cours d’exécution, pour les voir s’équilibrer jusqu’à leurs valeurs stationnaires. Il vous est ensuite possible de déterminer si ces valeurs peuvent être implémentées dans votre système actuel :

Si le modèle que vous avez créé dans Add Ajouter un filtre adaptatif à votre modèle n’est pas ouvert sur votre desktop, ouvrez ex_gstut7, qui est un modèle équivalent.

À noter que le port Wts du filtre adaptatif, qui sort les pondérations du filtre, doit toujours être connecté.

gstut7.png

Ouvrez la bibliothèque de DSP System Toolbox™ en saisissant dsplib dans l’invite de commande MATLAB®.

Affichez les coefficients du filtre en connectant un bloc Time Scope au port Wts du bloc LMS Filter.

Sur le bloc Time Scope, modifiez les propriétés de configuration suivantes :

  • Time span = 0.05

  • Y-limits (Minimum) = -0.15

  • Y-limits (Maximum) = 0.5

gstut7_completed.png

Ouvrez Model Settings. Dans l’onglet Modeling, cliquez sur Model Settings. Dans le volet Solver, configurez ces paramètres de configuration :

  • Stop time = inf

  • Type = Fixed-step

  • Solver = discrete (no continuous states)

Nous recommandons ces paramètres de configuration pour les modèles contenant des blocs de DSP System Toolbox. Comme ces blocs calculent les valeurs directement et non en résolvant des équations différentielles, il vous faut configurer le solveur Simulink® afin qu’il se comporte comme un scheduler. Le solveur, lorsqu’il est en mode scheduler, utilise un pas d’échantillonnage de bloc pour déterminer quand le code correspondant à chaque bloc est exécuté. Par exemple, le pas d’échantillonnage des blocs Sine Wave et Random Source dans ce modèle est 0.05. Le solveur exécute le code de ces blocs, et de tout autre bloc avec ce pas d’échantillonnage, toutes les 0,05 secondes.

Remarque : En travaillant avec les modèles contenant des blocs DSP System Toolbox utilisez des blocs source qui permettent de spécifier leur pas d’échantillonnage. Si le bloc source n’a pas de paramètre Sample time, il faut ajouter à votre modèle un bloc Zero-Order Hold et l’utiliser pour spécifier le pas d’échantillonnage. Pour plus d’informations, veuillez consulter Continuous-Time Source Blocks. L’exception à cette règle est le bloc Constant, qui peut avoir un pas d’échantillonnage constant. Lorsque c’est le cas, Simulink exécute ce bloc et enregistre la valeur constante, une fois au début de la simulation, et à chaque fois qu’un paramètre est ajusté. Cela permet des simulations plus rapides et un code généré plus compact.

Exécutez votre modèle et regardez le comportement des coefficients du filtre dans le Time Scope qui s’ouvre automatiquement au lancement de la simulation. Avec le temps, les coefficients du filtre approchent de leurs valeurs stationnaires.

weights.png

Il est également possible de regarder le comportement du système dans la fenêtre Scope. Avec le temps, vous pouvez voir les erreurs diminuer et l’approximation du signal d’entrée correspondre plus précisément au signal sinusoïdal d'origine en entrée.

final_results.png

Vous avez maintenant crée un modèle capable de supprimer le bruit adaptatif.

Sommaire

Vous avez appris à concevoir un filtre passe-bas en utilisant le bloc Digital Filter Design. Vous avez également appris à créer un filtre adaptatif en utilisant le bloc LMS Filter. Le produit DSP System Toolbox contient d’autres blocs capables de concevoir et d’implémenter des filtres numériques et adaptatifs. Pour plus d’informations sur les fonctionnalités de filtrage de ce produit, voirFilter Design et Filter Analysis.

Comme tous les blocs de ce modèle ont le même pas d’échantillonnage, ce modèle est à échantillonnage simple, et Simulink® l’a exécuté en mode solveur SingleTasking. Si les blocs de votre modèle ont des pas d’échantillonnage différents, le modèle est multi-échantillonné et il est possible queSimulink l’exécute en mode solveur MultiTasking. Pour plus d’informations sur le mode solveur, voir Recommended Settings for Discrete-Time Simulations.

Pour apprendre à générer du code depuis votre modèle en utilisant le produit Simulink Coder™, veuillez consulter Generate C Code from Simulink Model.

Voir aussi

|

Sujets associés