Forum Programmation.c++ Régression linéaire sur grands entiers

Posté par  . Licence CC By‑SA.
Étiquettes :
2
22
déc.
2016

Bonjour,

J'ai besoin de résoudre un problème de dates.
Je dispose d'une caméra GiGe Vision qui timestamp ses images avec la valeur de son compteur interne. J'ai besoin de corréler ce timestamp avec le temps UTC sur la machine qui reçoit les images.
Je dispose sur cette caméra d'une fonction qui permet de latcher le compteur interne, puis de venir récupérer la valeur à posteriori.
Je latch donc à espaces réguliers ce compteur, et je date UTC cette demande. J'obtiens donc un tableau de données T[Timestamp,t UTC].
Pour dater mes images, j'utilise une régression linéaire sur ces données pour améliorer la précision.
Cette régression me permet d'obtenir a et b dans la fonction f(x) = ax + b.
Seulement mes dates sont de la forme epoc portées sur des uint64_t. J'ai donc un problème de type dans mon algorithme.

Quelle méthode utiliseriez vous pour garantir la précision de le régression sachant que j'utilise la méthode analytique avec

a = (n*Σxi*yi -ΣxiΣyi) / (n*Σxi2 - (Σxi)2)
b = (1/n)(Σyi - a*Σxi)

  • # Utiliser la virgule flottante

    Posté par  (site web personnel) . Évalué à 2.

    Tu as essayé de passer en double ? Il me semble que la précision devrait être plus que suffisante pour calculer la régression. Une fois les coefficients obtenus, tu peux éventuellement trouver une manière de l'appliquer sans passer par la virgule flottante.

    • [^] # Re: Utiliser la virgule flottante

      Posté par  . Évalué à 2.

      Bon vu la précision de datation, je peux augmenter le quantum date (1ns vers 1 us) et celui du compteur (1,6ns vers 1,6us). Du coup je passe à l'aise en double.

  • # epoch,

    Posté par  . Évalué à 1.

    Seulement mes dates sont de la forme epoc portées sur des uint64_t. J'ai donc un problème de type dans mon algorithme.

    pourquoi ne pas alors basé ton algo directement sur epoc
    et faire ensuite une conversion epoc=> date

    evidemment cela suppose que les diverses machines soient synchronisés pour que leur calcule de epoc soit le meme au meme moment.

    • [^] # Re: epoch,

      Posté par  . Évalué à 2.

      evidemment cela suppose que les diverses machines soient synchronisés pour que leur calcule de epoc soit le meme au meme moment.

      Et tu lui proposes d’installer plutôt ntpd ou plutôt chronyd sur sa caméra ? ;)

      • [^] # Re: epoch,

        Posté par  . Évalué à 2.

        il configure juste la synchro de temps fournit avec la camera
        si la camera n'a pas de synchro temporelle, il faut la jeter :D

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.