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 :

Compression d'un signal


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Par défaut Compression d'un signal
    Bonjour,
    J'ai un tableau de point dont les mini et maxi sont trop grand pour mes besoins. Malheureusement j'ai besoin des petites valeurs voila pourquoi une simple division n'est pas intéressante.
    Actuellement j'ai un bout de code qui me permet de faire une sorte de compression malheureusement je n'arrive pas à atténuer autant que je voudrais ma courbe.
    Dans la courbe ci-dessous on voit la donnée brute (verte) la donnée compressée(bleue) et une simple division (rouge) et on voit que le bleu et le vert reste commun dans les petites valeurs.
    Nom : compression.jpg
Affichages : 601
Taille : 102,1 Ko

    Voici le petit bout de code scilab qui m'a permis de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Alpha = 1.0;
    Beta = 100.0;
    Val = ValOri/3.8;
    for i = 1:1:n
        Val3(i) = ((((Alpha / Beta) - 1) / Beta * abs(Val(i)) + 1.0) * ValOri(i));    
    end
    plot(ValOri,'g');//Green
    plot(Val3,'b');//Blue
    plot(Val,'r');//Red
    et je n'arrive pas à optimiser ce code .
    Si quelqu'un a une petite idée , ou un nom générique pour ce type de calcul je suis preneur.
    Merci

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Peut-être qu'en utilisant une echelle logarithmique, tu auras ce que tu recherches.
    En générale, ce genre d'échelle, permet d'atténuer les grandes valeurs vis à vis des petites valeurs.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Par défaut
    Salut,
    En effet le log pourrait tendre à atténuer les points extrêmes mais je cherche à recalculer tous mes points pour les sauvegarder.
    Je ne sais pas comment je pourrais dans ma boucle inséré un Log avec un paramètre de valeur maximale.

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par sdecorme Voir le message
    Je ne sais pas comment je pourrais dans ma boucle inséré un Log avec un paramètre de valeur maximale.
    Le logarithme posera problème, puisque tu as des valeurs à zéro (log 0, ça vaut, euh…) et même des négatives…

    Sinon, si tu n'aimes pas tes pointes, tu peux aussi utiliser un maximum : si la valeur dépasse un seuil, hop, on la change pour mettre ce seuil (même chose dans les négatifs).

    Ou alors tu multiplies par un facteur adaptatif : proche de 1 quand la valeur est faible, proche de zéro quand la valeur est infinie. Je pense à un truc comme Formule mathématique (ne pas oublier les valeurs absolues, évidemment). Trois exemples en pièce jointe (le troisième exemple montre l'impact quand tu divises par une constante, ce qui te permettra d'atteindre ce que tu souhaites réellement comme applatissage).

    Nom : ex.png
Affichages : 380
Taille : 17,7 Ko
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Par défaut
    Je me suis rendu compte de ce problème
    Je viens de faire un essai en doublant ma formule dans ma boucle et ça fonctionne pas mal.
    Rouge valeur originale
    Vert première boucle
    Bleu deuxième boucle
    Ma valeur max finale ne devant pas dépasser +-18

    Nom : compression.jpg
Affichages : 363
Taille : 97,5 Ko

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sdecorme Voir le message
    Ma valeur max finale ne devant pas dépasser +-18
    Une simple règle de trois, hein ?


    • (Maxi - Mini)final = 36

      (Minifinal = -18, Maxifinal = 18)


    • Nouvelle valeur = -18 + ((Valeur - Miniinitial) * 36 / (Maxi - Mini)initial)







    PS: quant à avoir une échelle log, c'est pas plus compliqué :

    • Recalage de l'échelle en positif (> 0)

      Valeurnouvelle = 1 + ((Valeurinitial - Miniinitial) / (Maxi - Mini)initial)


    • Nouvelle valeur = log(Valeurnouvelle)

      (éventuellement là encore à ajuster si on veut que l'écart final soit entre -18 et 18)

Discussions similaires

  1. [Débutant] la compression d'un signal réel (voix)
    Par medhi_mz dans le forum Signal
    Réponses: 0
    Dernier message: 24/12/2016, 16h49
  2. Compression d'un signal par FFT
    Par sigma10 dans le forum LabVIEW
    Réponses: 5
    Dernier message: 22/06/2011, 00h31
  3. compression d'un signal par FFT
    Par sigma10 dans le forum Signal
    Réponses: 11
    Dernier message: 21/06/2011, 12h30
  4. compression d'un signal
    Par pedro1 dans le forum LabVIEW
    Réponses: 0
    Dernier message: 20/05/2011, 13h18

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