IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Simulink Discussion :

Implémentation filtre IIR d'ordre 4, problème de workspace


Sujet :

Simulink

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Implémentation filtre IIR d'ordre 4, problème de workspace
    Bonjour,
    Dans le cadre d'un projet d'électronique numérique, je cherche à implémenter une partie d'un algorithme sur une carte Nexys-3, je voudrais garder les calculs des variables sur machine et effectuer un filtrage sur carte.

    Pour cela je dois réaliser un filtre d'ordre 4 sous simulink composé de deux filtres d'ordre 2 en série.

    Je dois donc prendre un signal aléatoire du workspace de MATLAB, le faire passer dans mon filtre simulink et en récupérer la sortie.
    Voici le filtre en question, où a1..bn sont les coefficients de mes deux filtres:
    Nom : Schema_Simulink.png
Affichages : 1371
Taille : 106,1 Ko

    Mon schéma dispose de deux blocs: -From Workspace -To Workspace afin de récupérer mon signal x_simulink en entrée et de sauvegarder les données dans une variable x_f.

    Afin que le filtrage s'effectue j'utilise ces deux commandes :
    open('tfremovePLI.slx');
    sim('tfremovePLI.slx','SrcWorkspace','current');

    Nom : DebugMode.png
Affichages : 906
Taille : 196,2 Ko

    Et il se trouve que je ne récupère finalement rien en sortie du filtre, x_f reste le même qu'après sa déclaration : x_f=zeros(1,N);
    Nom : x_f_apres_simu.png
Affichages : 823
Taille : 169,3 Ko

    Je calcule les coefficients de mon filtre à partir des deux fonctions suivantes:
    h = fdesign.bandpass('N,F3dB1,F3dB2', ordr, Fc1, Fc2, fs);
    Hd = design(h, 'butter');

    A priori le problème ne vient pas de la conception selon moi mais plutôt du transfert entre les différents workspace: x_f ne s'enregistre pas dans le workspace du programme.
    Mes paramètres de simulation sont ceux-ci, avec fs la fréquence d’échantillonnage.
    Nom : Parametres de simu.png
Affichages : 797
Taille : 73,2 Ko

    Je travaille avec MATLAB 2013B
    Est-ce que quelqu'un aurait une idée de comment résoudre ce problème ?
    Merci d'avance,
    Cordialement,
    Tnaidu

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    salut

    ton problème semble en effet être juste un problème de localisation de la variable :
    tu travailles dans une fonction, elle a son propre workspace. Par défaut simulink travaille dans le workspace de base
    En spécifiant "SrcWorkspace" à "current", simulink travaille dans le workspace courant (celui de ta fonction) pour les données d'entrée ou source (SrcWorkspace).Les données de sortie continuent d'aller dans le workspace de base

    tu as plusieurs solutions pour t'en sortir
    et je te conseilles vivement d'utiliser la syntaxe complete de sim :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    simOut = sim('tfremovePLI.slx','SrcWorkspace','current');
    en utilisant cette syntaxe, toutes tes sorties seront dans l'objet simOut créé localement (dans le workspace de ta fonction)
    après il faut aller récupérer les données que tu souhaites utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x_f = simOut.get('x_f')
    Fabien

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème Résolu
    Merci Fabien,
    Ta solution a effectivement fonctionné.
    Je vais pouvoir avancé dans mon projet.
    Bien Cordialement,
    Tnaidu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Filtre IIR ou RII problème diragramme de Bode
    Par royal380 dans le forum MATLAB
    Réponses: 0
    Dernier message: 27/02/2015, 14h28
  2. Implémentation filtre ordre 2
    Par valentin89 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 19/03/2014, 13h31
  3. [Signal] Implémentation filtres Passe-Bas en C
    Par Snark dans le forum Traitement du signal
    Réponses: 24
    Dernier message: 11/02/2009, 15h32
  4. Filtres FIR Vs filtres IIR
    Par amarion dans le forum Signal
    Réponses: 10
    Dernier message: 23/10/2007, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo