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

MATLAB Discussion :

Synchroniser des données


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Par défaut Synchroniser des données
    Bonjour à tous,

    J'ai effectué un enregistrement de données avec deux instruments différents: l'un un voltmètre, l'autre une étuve en température. Problème: les données ne sont pas synchronisées, et j'obtiens n'importe quoi en plottant. On s'autorise des erreur de quelques secondes (variation en température lente sur plusieurs heures acquisition).
    Voici mon type de données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    t_acquisition	valeur	temperature	t_temperature
    2	2,3	20.1	1
    3	8	20.2	2
    4	4,1	20.2	3
    6	6,3	20.2	4
    7	7,8	20.2	5
    8	6,2	20.2	6
    9	1,1	20.2	7
    10	2,7	20.2	8
    11	7,9	20.3	9
    12	8,5	20.3	10
    14	4,3	20.3	11
    15	3,2	20.3	12
    16	0,2	20.3	13
    17	4,7	20.3	14
    18	6,3	20.3	15
    19	4,7	20.3	16
    20	4,8	20.4	17
    J'aimerai les synchroniser ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    t_temperature	valeur_s
    1	2,3
    2	2,3
    3	8
    4	4,1
    5	6,3
    6	6,3
    7	7,8
    8	6,2
    9	1,1
    10	2,7
    11	7,9
    12	8,5
    13	4,3
    14	4,3
    15	3,2
    16	0,2
    17	4,7
    En fait, si le temps d'acquisition de l'instrument correspond au temps de l'étuve, en copie la valeur. Sinon, on va chercher la valeur associée la plus proche et on la copie. Si elle n'existe pas, on prend la suivante.
    Exemple:1) pour trouver valeur_s à t_temperature = 16s, on va chercher 16 dans t_acquisition, et on la copie.
    2)pour trouver valeur_s à t_temperature = 5s, on va chercher 5 dans t_acquisition, mais elle n'existe pas, on prend donc la valeur associé à t_acquisition = 6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    for i=1:length(t_temperature)
    	for j=1:length(t_acquisition)
    		if(t_temperature(i) == t_acquisition(j))
    			valeur_s(i) = valeur(i);
    		end
    		if (t_acquisition ~= t_temperature)
    			if(isnan(A(i)==0))
    				valeur_s(i) = valeur(A(i));
    			else
    				valeur_s(i) = valeur(A(i+1));
    			end
    		end
    	end
    end
    A(i) est une copie de t_acquisition, mais avec des NaN si la valeur t_acquisition n'apparait pas (par exemple 5s)


    Est-ce clair?

    Savez-vous comment faire pour résoudre le problème?

    Je vous remercie

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    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 885
    Par défaut
    Bonjour

    je te suggère fortement d'utiliser des objets timetables (ou timeseries)
    tu auras accès à des méthodes comme "synchronise" qui fait exactement ce que tu cherches à faire

    Fabien

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    En supposant que les données soient dans un fichier test.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    t_acquisition	valeur	temperature	t_temperature
    2	2.3	20.1	1
    3	8	20.2	2
    4	4.1	20.2	3
    6	6.3	20.2	4
    7	7.8	20.2	5
    8	6.2	20.2	6
    9	1.1	20.2	7
    10	2.7	20.2	8
    11	7.9	20.3	9
    12	8.5	20.3	10
    14	4.3	20.3	11
    15	3.2	20.3	12
    16	0.2	20.3	13
    17	4.7	20.3	14
    18	6.3	20.3	15
    19	4.7	20.3	16
    20	4.8	20.4	17
    On peut directement utiliser la fonction interp1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fid = fopen('test.txt', 'r');
    X = textscan(fid, '%f%f%f%f', 'HeaderLines', 1, 'Delimiter', ' ');
    fclose(fid);
     
    t_acquisition = X{1};
    valeur = X{2};
    t_temperature = X{4};
     
    valeur_s = interp1(t_acquisition, valeur, t_temperature, 'nearest', 'extrap');
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    valeur_s =
     
        2.3000
        2.3000
        8.0000
        4.1000
        6.3000
        6.3000
        7.8000
        6.2000
        1.1000
        2.7000
        7.9000
        8.5000
        4.3000
        4.3000
        3.2000
        0.2000
        4.7000
    À noter que l'on peut tout à fait se passer des variables intermédiaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fid = fopen('test.txt', 'r');
    X = textscan(fid, '%f%f%f%f', 'HeaderLines', 1, 'Delimiter', ' ');
    fclose(fid);
     
    valeur_s = interp1(X{1}, X{2}, X{4}, 'nearest', 'extrap');
    Voire ne pas récupérer la troisième colonne dans le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fid = fopen('test.txt', 'r');
    X = textscan(fid, '%f%f%*f%f', 'HeaderLines', 1, 'Delimiter', ' ');
    fclose(fid);
     
    valeur_s = interp1(X{1}, X{2}, X{3}, 'nearest', 'extrap');

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Par défaut
    Merci de vos retours.

    Merci Jerome Briot.

    J'ai copié/coller ce que tu as proposé mais j'ai 2 erreurs:

    1)On ne pouvait pas ouvrir le fichier. Ce qui est normal, il n'y avait pas l'accès dans mon ordinanteur 'C:\....' bête comme erreur, mais ceux qui veulent s'en inspirer, j'ai été vraiment c*n

    2)J'ai un autre problème avec l'interpolation, je l'ai résolu en ajoutant ces commandes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [~, ind] = unique(t_acquisition);
     
    valeur_s = interp1(t_acquisition(ind), valeur(ind), t_temperature(ind), 'nearest', 'extrap');
    Copier / coller de l'erreur dans google, et hop un amerloque avait le même problème que moi. On lui a proposé le petit bout de code que j'ai réadapté.

    Le résultat final est que ça ne marche pas. Au début du fichier, la synchronisation est bonne. (le fichier fait environ 200000), mais vers la fin, j'ai un peu n'importe quoi. Est-ce que c'est le bout de code (que je ne comprends pas )qui change le résultat?

    Merci

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par Pagispok Voir le message
    Au début du fichier, la synchronisation est bonne. (le fichier fait environ 200000), mais vers la fin, j'ai un peu n'importe quoi.
    C'est peut être dû à la méthode d'extrapolation

    Est-ce qu'il y a des valeurs de t_acquisition qui correspondent à des valeurs de t_temperature à partir de là où les valeurs commencent à ne plus convenir ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Par défaut
    Citation Envoyé par Jerome Briot Voir le message
    C'est peut être dû à la méthode d'extrapolation

    Est-ce qu'il y a des valeurs de t_acquisition qui correspondent à des valeurs de t_temperature à partir de là où les valeurs commencent à ne plus convenir ?
    Oui, il y a des valeurs de t_acquisition qui correspondent à des valeurs de t_temperature.
    Je vais essayer de voir du côté des méthodes d'extrapolation

Discussions similaires

  1. Synchronisation des données avec une base MaxDB
    Par nicoda dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/03/2008, 10h53
  2. HF C/S Synchronisation des données
    Par topalkedi dans le forum HyperFileSQL
    Réponses: 5
    Dernier message: 10/01/2008, 18h15
  3. Synchroniser des données de 2 univers
    Par Ghislain dans le forum Designer
    Réponses: 2
    Dernier message: 26/07/2007, 14h29
  4. Réponses: 1
    Dernier message: 24/05/2007, 11h23
  5. Synchronisation des Données avec SQL Server 2005
    Par attouchi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/07/2006, 16h14

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