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

Algorithmes et structures de données Discussion :

Courbe échantillonée C++


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Courbe échantillonée C++
    Bonjour,

    je code actuellement un programme qui reçoit par l'intermédiaire d'une carte GPIB, une courbe. Autrement dit, j'obitens un tableau de "double".

    J'ai donc N échantillons. Je souhaite faire une transformation en M échantillons destinés à un autre matériel.

    (Interpolation???) Quelle méthode serai la plus appropriée pr faire cela?

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Oui je crois que faute de mieux une interpolation linéaire semble le meilleur moyen.
    Tu as donc N valeurs correspondant à des mesures
    x1 valeur de la mesure 1
    ................................
    xN valeur de la mesure N

    Donc tu peux calculer par interpolation la valeur correspondant à la mesure fictive k où k est un réel quelconque entre 1 et N

    Pour avoir tes M nombres il te faut donc prendre les mesures

    y1=x1
    y2= mesure 2*N/M
    y3= mesure 3*N/M
    .....
    yM=xN
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Oula des calculs mathématiques...

    J'ai fait quelques tests avec les fonctions disponibles dans la librairies Analysis de labwindows CVI.

    J'ai testé l'interpolation polynomiale. Cela fonctionne mais seulement dans certains cas.(ex sinusoïde ou courbe en x²). Mais pour un signal comme une impulsion, j'ai des oscillations.

    J'ai donc testé une interpolation "méthode cubique" et cela semble être bien mieux.

    Je ne sais pas s'il existe de meilleures méthodes disponibles pour ce que je souhaite faire( Notamment dans des librairies open sources...)

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Le re-echantillonage par un noyau de Lanczos donne de bon resultats.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Mais pour un signal comme une impulsion, j'ai des oscillations.
    C'est connu sous le nom de "phénomène de Runge", découvert en 1901!

    Pour ton problème, le spline cubique me semble être la meilleure solution: c'est simple, efficace et surtout stable.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut.

    Ok, merci pour toutes ces infos.

    Effectivement le spline cubique donne de bons résultats. Seul petit souci, sur les pentes d'une impulsion, certains échantillons sont un peu décalés (un peu comme un parasite HF), peut être faut-il que j'applique un filtre au signal interpolé?

    Concernant l'algorithme de Lanczos, j'ai trouvé un bon article sous Wikipedia où il y a un exemple en c++ pour du resampling (ce que je cherche à faire). (http://en.wikipedia.org/wiki/Lanczos_resampling)

    Mais comme je fais mes tests en C, je ne sais pas trop comment évaluer cette méthode. De plus, le filtre est normalisé d'après ce que je comprends donc je ne sais pas non plus comment gérer cela.

    Si vous avez des idées, elles sont les bienvenues.

    Merci.

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

Discussions similaires

  1. [MSChart] creation de courbe sous visual C++
    Par gabriel knight dans le forum MFC
    Réponses: 5
    Dernier message: 18/09/2006, 15h32
  2. courbe à partir d'un tableau
    Par chafcha dans le forum MFC
    Réponses: 3
    Dernier message: 26/02/2004, 09h53
  3. recherche doc sur les courbe de bézier
    Par amaury pouly dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/04/2003, 23h41
  4. Courbe lissée
    Par crakdown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/11/2002, 18h58
  5. [VB6] [MSChart] Courbe incorrecte
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 08/10/2002, 22h53

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