Salut chers internautes.
Je m'exerce en programmation des GUI en C sous Labwindows. En fait, je dois generer des sequences correspondants à certains tableaux dej'a initialisés. le but est ici de faire une correlation et une convolution des sequences.
Je me suis fait un code qui genere la sequence.

Voici en fait le code; je decris mes difficultes à la fin

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
double wave1[33500], wave2[33500], wavecorr[(33500*2)-1]
double sig1noise=0, sig2noise=0, noisewave1[33500]
double wave2noise[33500], sig1noiseamp=0, sig2noiseamp=0
 // Tableaux preinitialiés:

int tap3[] = {0,1,1}, m3[]= {1,1,1}                       N = 3  ( 3 Elements )
    tap4[] = {0,0,1,1}, m4[] = {1,1,1,1},                N = 4
    tap5[] = {0,0,1,0,1}, m5[] = {1,1,1,1,1}            N = 5
       .            .                .            .
       .            .                .            .
    tap18[]                                                         N = 18 Elements

 //Les lignes suivantes generent la sequences seq[] selon tap

void sequnce(int nbreEltsTap, int tap[], int m[])
{
    int i, j, longeurSeq, reg[33500], seq[33500], comp[33500], mult[10];
    int sum = 0, buf;
   longeurSeq = pow(2, nbreEltsTap) - 1
   for(i=0; i<longeurSeq; i++)
   {
       reg[i] = 0;
   }
   for(i=0; i<longeurSeq; i++)
   {
        for(j=0; j<nbreEltsTap; j++)
        {
             mult[j] = tap[j]*m[j];
             sum += mult[j];
        }
        buf = sum % 2;
        for(j = nbreEltsTap-1; j>0; j--)
        {
             m[j] = m[j-1];
        }
        m[0] = buf;
        reg[i] = m[nbreEltsTap-1];
        sum = 0;
        for(j=0; j<longeurSeq; j++)
        {
             if (reg[j] == 0)
                 com[j] = 1;
             else
                 comp[j] = 0;
        }
        seq[i] = reg[i]-comp[i];
        wave[i] = seq[i]
}
  
//Ici je trace les graphes de deux signaux wave1 et wave2
void generateGraphs(void)  // Il s'agit d'un CallBackfunction du GUI
{
   if(sig1noise==1)
   {
       GaussNoise(sig1points, sig1noiseamp, seed, noisewave1);
       for(i=0; i<sig1points; i++)
       {
            wave1[i] += noisewave1[i];
       }
    }
    DeleteGraphplot(panelHandle, PANEL_SIG1GRAPH, -1, 
                          VAL_IMMEDIAT_DRAW );
    PlotY(panelHandle, PANEL_SIG1GRAPH,wave1, sig1points, VAL_DOUBLE,
            VAL_THIN_LINE,.........);
    
   if(sig2noise==1)
   {
        // même algorithme que pour sig1noise
   }
   if((sig1noise==1)||(sig2noise==1)
   {
       seed +=1;
       if(seed>50)
           seed = 1;
   }
   
   Correlate(wave1, sig1point, wave2, sig1poits, wavecorr);
   PlotY(panelHandle, PANEL_CORRGRAPH, wavecorr, 
            (sig1points+sig2points-1), VAL_DOUBLE, VAL_THIN_LINE.....);
}

/* Sur le PANEL, je chosis le nombres d'elements au niveau de Tap par rapport   
    aux tableaux préinitialisés */

int CVICALLBACK Getsig1tap(.............)
{
        switch(event)
        {
              case EVENT_COMMIT:
                    GetCtrlVal(panelHandle, PANEL_SIG1TAP, &sig1tap);
                    if(autogenerateGraphs)
                          GenerateGraphs;
                    break;
              case EVENT_CHANGED:
                    break;
              case RIGHT_CLICK:
                    break;
         }
         return 0;
}


int CVICALLBACK Getsig2tap(.............)
{
       // Meme algorithme que pour Getsig1tap
}


int CVICALLBACK Getsig1point(.............)
{
     switch (event)
     {
          case EVENT_COMMIT:
                 GetCtrlVal(panelHandle, PANEL_SIG1POINT, &sig1point);
                 if(autogenerateGraphs)
                          GenerateGraphs;
                 break;
          case EVENT_CHANGED
                  if(autogenerateGraphs)
                          GenerateGraphs;
                  break;
      }
      return 0;
}

int CVICALLBACK Getsig2point(.............)
{
    // Meme algo que pour getsi1po

}


int CVICALLBACK Getsig1noise(.............)
{
    switch(event)
    {
         case EVENT_COMMIT:
                GetCtrlVal(panelHandle, PANEL_SIG1NOISE, &sig1noise);
                if(sig1noise==0)
                     SetInputMode(panelHandle, PANEL_SIG1NOISEAMP, 0);
                else
                     SetInputMode(panelHandle, PANEL_SIG1NOISEAMP, 1);
                if(autoGenerateGraphs)
                    GenerateGraphs;
                break;
         case EVENT_CHANGED:
                break;
      }
      return 0;
}

int CVICALLBACK Getsig2noise(.............)
{
    //meme algo que pour Getsig1noise
}


int CVICALLBACK Getsig1noiseamp(.............)
{
    switch(event)
    {
         case EVENT_COMMIT:
                GetCtrlVal(panelHandle, PANEL_SIG1NOISEAMP, &sig1noiseamp);
                if(autoGenerateGraphs)
                    GenerateGraphs;
                break;
         case EVENT_CHANGED:
                break;
      }
      return 0;
}
 
int CVICALLBACK Getsig2noiseamp(.............)   
{
      // meme algo que pour Getsig1noiseamp
}
Mes Problemes:
1 - Lorque je choisis Tap18 ( tableau à 18 Elements ), je dois generer un
graphe ( sequence[] ) de pow(2,18)-1 => longeurSeq = 262143 elts.
A noter ici "points" dans les code peut être pris comme "longeurSeq"
ma fonction sequence() refuse, me disant que c'est beaucoup (overflow)
Je dois en fait faire une programation dynamique de ma sequence. je ne
sais pas comment le faire. quelqu'un peut-il m'aider à ce niveau?

2 - Lorsque je met le bouton noise en marche, il me genere un graph au
hasard. Seulement, lorsque je choisis un element du Taps ( de 3 à 18 ),
je recois un graphe tracé aux dessus de celui de noise. Ceci dit, la
memoire n'est pas libérée. Ca revient encore au probleme Nr. 1
Quelqu'un peut-il me faire quelque chose de mieux que celui que j'ai.


Je vous remercie d'avance