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

C++Builder Discussion :

Quelle composant utiliser pour faire une présentation (temps/ fréquence)


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut Quelle composant utiliser pour faire une présentation (temps/ fréquence)
    Bonjour

    Alors voila mon problème j’ai une matrice de taille [64][1874] qui représente les coefficient d’ondelette , je veux représenter cette matrice pour une visualisation ( temps – fréquence ) sur une frame .
    Et je ne c’est pas quelle composant dans C++ builder utiliser pour faire cette représentation

    Es que j’utilise Tchart ?

    Comme j’ai installé Signallab et plotlab ? quelle composant utiliser et comment

    Alors aider moi svp , je veux avoir une représentation comme limage qui est en piece jointe

  2. #2
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    Moi j'utilise un TImage avec une échelle de couleur pour l'axeZ. Pour être plus précis:
    1. Sur l'axe des X je met l'échelle de temps
    2. Sur l'axe des Y je représente l'échelle des fréquence. J'utilise souvent une échelle log
    3. Ensuite l'amplitude A(t,f) est codé en couleur

    Voici un l'exemple d'un signal du type
    F(t)=(A0-t)*sin(a*t+b)
    Images attachées Images attachées  

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    j'ai pas bien comprié comment ta fait , j'ai esseyé de le faire et j'ai pas réusit , tu peut m'expliqué un peut plus STP

    qur quelle propriété faire de la couleur sur laxe Z , quelle etape suivre , SVP si veut avez une doc qui peut maider alors vous pouvez maidiqué ou elle ce trouve

  4. #4
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    C'est assez simple:
    Par exemple je vais prendre une échelle de gris. C'est à dire 256 couleurs de
    • Noir RGB(0,0,0)
    • Blanc RGB(255,255,255)

    Il suffit de faire une bonne vielle règle de trois pour obtenir la valeur de la couleur pour une amplitude X
    Pour ce qui est de l'affichage de la couleur tu peux utiliser la propriété Pixels de Canvas ou ScanLine (un peu plus compliqué mais plus rapide)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    je suis débutante en C++ builder et j'ai pas vraiment comprié ce que tu veux dire vous pouvez me faire une petite description , ou me faire un exemple si vous voulez bien !! j'ai vraiment besoin

  6. #6
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    Sur ta Form met un composant TImage. Par défaut il sera nommé Image1. Je conseille de le renommer c'est à dire changer la valeur de la propriété Name (ou Nom pour une version française) pour un nom plus clair.

    RGB est une fonction qui permet de générer une couleur à l'aide des trois composantes fondamentales (Red, Green, Blue). Les valeurs possible pour chaque composant sont comprisent entre 0 et 255.

    Pour afficher un pixel de couleur noir aux coordonnées 50,32 il suffit d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image1->Canvas->Pixels[50][32]= RGB(0,0,0);
    Je te conseille de plonger dans la doc de CBuilder et de regarder un peu les tutoriels du site.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    On résultat de la méthode d’ondelette j’ai ou une matrice de coefficient de taille [64][1875] élément

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Coefs [0][0]=  0,1611
    Coefs [0][1]= -0.1142 
    Coefs [0][2]= -0.2464 
    .
    .
    .
    JE Voulez représenter ces résultat sous forme de scalogramme (pourcentage d’énergie) comme la premiers image de mon message !!

    J’ai fait un test à l’instruction que tu ma envoyer mai ce que j’ai pas compris que comment savoir la couleur a affecter pour chaque élément de ma matrice, par exemple

    Le premiers élément Coefs [0][0]= 0,1611 je le donne quelle couleur et comment la trouvé !!

    Jai cherchez aussi et j’ai trouvé ça es que ça marche on utilisant un Tchart !! mai le problème d’affectation de la couleur reste toujours ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Series1->AddXY(50,32,"",TColor(RGB(0,0,0)));

  8. #8
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    Pour affecter une couleur c'est simple il faut faire une bonne vielle règle de trois
    Ce que je fait généralement c'est
    1. Chercher la valeur max dans le tableau des coefficients
    2. Chercher la valeur min dans le tableau des coefficients
    3. Calculer la droite ax+b tel que aMax+b=255 et aMin+b=0 (pour une échelle de gris)

    Enfin pour chaque coefficient faire j'applique le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c=int(a*Coeff[x][y]+b);
    Canvas.Pixels[x][y]=RGB(c,c,c);
    Par contre comme l'image est très longue (1875) par rapport à sa hauteur (64)
    Je suggère soit d'augmenter la hauteur de l'image par 4 par exemple et de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    c=int(a*Coeff[x][y]+b);
    Canvas.Pen.Color=RGB(c,c,c);
    Canvas.MoveTo(x,y*4);
    Canvas.LineTo(x,y*4+4);
    Ou alors de n'afficher qu'un coefficient sur 4 en x

    Pour ce qui est du TChart il ne répond pas à ton problème. Sauf pour l'affichage d'une série de coefficients

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    merci de votre réponce je vais esseyé et vous rondre une réponce apré !

    j'ai un autre probleme le voila :

    je veux faire une extraction de caractéristiques sur mon signal. On utilise les caractéristiques fréquentielles « la puissance dans des bande de fréquence (Band Power ) ».

    C'est pour cela j'ai appliqué à ce signal une ondelette de morlet pour obtenir les coefficients d’ondelette, ce qui m'a donné une Matrice ( Mat) présentation fréquentielle cité avant .

    D’après une certaine étude on trouve deux bandes de fréquence dans ce signal médicale : Fréquences réactives : bandes α (8-13 Hz) pour un repos et β (13-30 Hz) pour une activité.

    Alors je cherche à savoir où se trouve la puissance de bande pour faire une classification entre le repos et l’activité ( pour dire si c’est un signal de repos ou un signal d’activité ) mai je ne sais pas comment le faire sur ma matrice et je veux bien de l'aide.

    J’espère que vous m’avez compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SI               X <  seuil (correspond a 13 Hz) 
                            Alors  en repos 
    SINON      Classer en activité 
    FIN SI
    Est-ce que c’est ça ? j'ai tester Mais on trouve les deux bandes dans le signal !! Alors comment classifier !!?

  10. #10
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    Dans un premier temps effectivement il faudrait faire quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for t:=0 to T do
    begin
     if Coeff[t][8Hz-13Hz]> seuil1 then
      Actif
     if Coeff[t][13Hz-30Hz]> seuil2 then
      Repos
    end;
    Après on peut sophistiquer.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    j'ai esseyé la méthode que tu ma donnée et ça ma donner les valeur suivant :

    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
     
    mine =
     
      -50.4344
     
     
    maxe =
     
       50.5403
     
     
    b =
     
      127.3662
     
     
    a =
     
        2.5254
    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
    20
    21
    22
    23
    24
    25
     
    mine =f[0][0] ;
    maxe = f[0][0];
    for(int i = 0; i<freq  ; i++){
    for(int j =0; j<longSignal ; j++)  {
     
            if (f[i][j]<mine) { mine=f[i][j];}
     
            if (f[i][j]>maxe){ maxe=f[i][j];  }
     
        }
     
    }
     
    b=(255*mine)/(mine-maxe);
    a=(255-b)/maxe ;
     
    for(int i = 0; i<freq  ; i++){
    for(int j =0; j<longSignal ; j++)  {
    int c=int(a*f[i][j]+b);
     
    Image1->Canvas->Pixels[i][j]= RGB(c,c,c);
    Series3->AddXY(i,j,"",TColor(RGB(c,c,c)));
    }
    }
    et ma donner une image tout gris et non bleu avec du rouge je comprant pas pourquoi !! voila limage en piece jointe

  12. #12
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    C'est normal que se soit gris tu fais RGB(c,c,c). Quand R, G et B sont égal sa donne un niveau de gris. Regarde la première section de ce site où les noms commence par grey: http://web.njit.edu/~kevin/rgb.txt.html

  13. #13
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    mai je fait comment pour ne pas avoir de gris pour que l'information sois visible sur l'image et pour avoir une image celle dans la piece jointe
    Images attachées Images attachées  

  14. #14
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    vous voulez dire ça , mai pour les seuil on prant : ( seuil1=seuil2=13 ) !!?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for t:=0 to T do
    begin
     if Coeff[t][8Hz-13Hz] > seuil1 then
      Actif
     if Coeff[t][13Hz-30Hz]< seuil2 then
      Repos
    end;

  15. #15
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Tu peux utiliser la partie de droite (dégradé de rouge vers bleu) sur ta capture d'écran pour te créer une image de 1x256 pixels que tu mets dans un Bitmap nommé Gradient et tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TColor MaCouleur = Gradient->Canvas->Pixels[0][c];
    La variable c doit être une valeur de 0 à 255, comme dans ton code actuel.
    Ensuite tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Image1->Canvas->Pixels[i][j]= MaCouleur;
    Series3->AddXY(i,j,"",MaCouleur);
    Il y a sans doute une meilleure façon de faire, mais pour l'instant c'est la seule que je vois.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    alors voila j'ai esseyé ce que vous m'avez donner mai il me genaire une erreur on ce qui concerne le gradient : voila ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i = 0; i<freq  ; i++){
    for(int j =0; j<longSignal ; j++)  {
    int c=int(a*coef[i][j]+b);
    TColor MaCouleur = Gradient->Canvas->Pixels[0][c];
    Image1->Canvas->Pixels[i][j]= MaCouleur;
                              }
                              }
    il me génaire cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur] Unit1.cpp(67): E2451 Symbole 'Gradient' non défini
    et je ne c'est pas comment resoudre ça : !!

    et on ce qui concerne l'activité et le repot j'ai mai ça : esque c juste !

    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
    for(int j =0; j<longSignal ; j++)    {
         for(int i = 7; i<13  ; i++)    {
         if (coef[i][j] <13)
     
             Memo1->Lines->Add("labe  ["+IntToStr(i)+"] ["+IntToStr(j)+" ] =  on Repos ");
     
     
                                      }
     
          for(int s = 13; s<30 ; s++)    {
          if (coef [s][j] >13)
     
                  Memo1->Lines->Add("coef  ["+IntToStr(s)+"] ["+IntToStr(j)+" ] = on Activiter ");
                                          }
     
    }

  17. #17
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Que signifie une valeur négative dans tes coefficients ?
    Ca donne l'impression d'y avoir rajouté de l'imaginaire ...et ce, à une valeur absolue (l'amplitude) ... dans le genre : inversion du signal (pour la fréquence donnée).
    Ca se traite comment au juste (par ce que ça peut avoir une importance pour la suite) ?

    A plus !

  18. #18
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par kheira Voir le message
    il me génaire cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur] Unit1.cpp(67): E2451 Symbole 'Gradient' non défini
    et je ne c'est pas comment resoudre ça : !!
    C'est simple, il faut lire le message d'erreur, tu n'as pas déclaré la variable Gradient.

    Si tu lisais comme il le faut mon dernier message, j'ai écris clairement comment faire:
    Citation Envoyé par Crayon Voir le message
    que tu mets dans un Bitmap nommé Gradient
    Quand je parle de Bitmap je parle de la classe TBitmap. Un TImage possède une propriété TBitmap au cas ou tu ne saurais pas comment en créer un avec du code.

    En passant, ne compte pas sur moi pour te donner le code au complet, surtout si je vois que tu ne fais pas d'effort.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    Je m’excuse , mai il faut me comprendre je suis vraiment débutante en programmation en builder C++ , et j’ai pas sous veux dire quoit un bitmap c’est pour cela j’ai pas fait attention

  20. #20
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    j'ai créer le Gradient Bitmap mai ça donne une image noir sur le résultat ( toute noir ) !! je comprent pas pourquoi , je suis débutante alors svp je veux bien un aide j'ai esseyé ça !!
    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
     
    b=(255*min)/(min-max);
    a=(255-b)/max ;
    // création du bitmap
    Graphics::TBitmap* Gradient = new Graphics::TBitmap();
    // Dimension du bitmap
    Gradient->Width=256;
    Gradient->Height=256;
     
    for(int i = 0; i<freq  ; i++){
    for(int j =0; j<longSignal ; j++)  {
    int c=int(a*coef[i][j]+b);
    Gradient->Canvas->MoveTo(i,j*4);
    Gradient->Canvas->LineTo(i,j*4+4);
    TColor Macouleur = Gradient->Canvas->Pixels[0][c];
    Image1->Canvas->Pixels[i][j]= Macouleur ;
                              }}

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/02/2015, 11h16
  2. Quelle techno utiliser pour faire une appli de gestion
    Par zaz147 dans le forum Général Java
    Réponses: 5
    Dernier message: 09/12/2010, 17h14
  3. Quel logiciel utiliser pour faire une belle interface web?
    Par irnbru dans le forum Webdesign & Ergonomie
    Réponses: 7
    Dernier message: 18/10/2006, 09h07
  4. Réponses: 3
    Dernier message: 11/11/2005, 15h52
  5. [Debutant(e)]Quel composant utiliser pour faire une grille
    Par elitost dans le forum Composants
    Réponses: 7
    Dernier message: 21/06/2004, 20h44

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