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 :

interpolation 2D entre 4 valeurs


Sujet :

Simulink

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Points : 32
    Points
    32
    Par défaut interpolation 2D entre 4 valeurs
    Bonjour,
    Je me tourne vers vous car j'aurais une petite question mathématique
    Voilà je suis en train de construire une Look up table 2D et je bloque à un endroit. Voici la table qui est stockée dans ma RAM :



    Admettons que l'utilisateur entre x = 0.6, et y = 4.2
    Je dois récupérer les 4 valeurs surlignés en jaune puis en faire l'interpolation. J'arrive à les récupérer, mais maintenant il me faudrait une formule d'interpolation entre ces 4 valeurs.

    Quelques petites remarques :
    - Je développe en simulink, via les blocs Xilinx, je ne peux donc pas utiliser la LUT 2D fourni par simulink ;
    - Xilinx ne possède que des blocs de base, ainsi il me faudrait une formule à base d'additions et multiplications ;
    - J'ai simulé ma table avec simulink, la valeur que je devrais avoir est de 21.9027 environ... je ne vois absolument pas comment je peux la retrouver.

    Merci à tous ceux qui m'éclaireront

    Cordialement, yamin

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    C'est une interpolation bilinéaire

    Sous MATLAB on peut soit utiliser interp2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    x = [0.5 0.75];
    y = [4 4.5];
     
    f = [71.4104 22.9529 ; 24.4911 46.426];
     
    xi = 0.6;
    yi = 4.2;
     
    fi = interp2(x,y,f,xi,yi);
    soit faire l'interpolation "à la main" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    x = [0.5 0.75];
    y = [4 4.5];
     
    f = [71.4104 22.9529 ; 24.4911 46.426];
     
    p = [x([1 2 1 2]) ; y([1 1 2 2]) ; x([1 2 1 2]).*y([1 1 2 2]) ; ones(1,4)].'\f(:);
     
    xi = 0.6;
    yi = 4.2;
     
    fi = p(1)*xi+p(2)*yi+p(3)*xi*yi+p(4);
    % ou
    fi = [xi yi xi*yi 1]*p(:)
    Par contre, la valeur renvoyée est 44.5225

    Tu peux aussi remplacer l'opérateur backslash \ en écrivant la résolution du système sur une simple feuille de papier
    Comme ça, tu n'auras à gérer que des opérations mathématiques élémentaires
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Je te remercie pour ta réponse, effectivement, cela fonctionne. Cependant, et même si je ne peux pas l'implanter, j'aimerais beaucoup comprendre ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    p = [x([1 2 1 2]) ; y([1 1 2 2]) ; x([1 2 1 2]).*y([1 1 2 2]) ; ones(1,4)].'\f(:);
     
    fi = p(1)*xi+p(2)*yi+p(3)*xi*yi+p(4);
    Je te remercie

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    La première correspond à la résolution du système de 4 équations à 4 inconnues donné dans le lien Wikipedia :

    f = XP
    avec

        x1 y1 x1y1 1
    X = x2 y2 x2y2 1
        x3 y3 x3y3 1
        x4 y4 x4y4 1
    et

        a
    P = b
        c
        d
    Pour trouver les 4 termes de P on fait :
    P = inv(X)*f
    ce qui se résout avec MATAB comme ceci :

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/06/2006, 15h12
  2. Réponses: 2
    Dernier message: 12/03/2006, 21h28
  3. [MFC][Registre] Entrée une valeur dans REG_BINARY
    Par lastcheper dans le forum MFC
    Réponses: 3
    Dernier message: 04/10/2005, 12h59
  4. interpolation couleur entre nuage de points
    Par soubre dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/07/2005, 16h52
  5. [jsp] addition entre deux valeurs recupérées en Java
    Par LESOLEIL dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/06/2005, 14h19

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