J’ai un problème avec c++ builder , j’ai fait une méthode qui fait la convolution entre deux vecteur quant je utilise un vecteur x ça donne des bon et correcte résultat et qu’ant je utilise un autre vecteur ça donne des résultat non valide ( je vérifier mai résultat avec matlab la fonction wconv1 de matlab ) je ne c’est pas ou est le problème , voila ma fonction :

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
 
double  signal[]={0.123,1.45,0.67};
//double  x[]={0.1,1.4,1};
double x[]={
         0 ,
         0 ,
         0 ,
         0 ,
         0 ,
    0.0018 ,
   -0.0045 ,
   -0.1231 ,
         0 ,
    0.1231 ,
    0.0045 ,
   -0.0018 ,
         0 ,
         0 ,
         0 ,
         0 ,
         0 };
int Nx=sizeof(signal)/7;
int Nh=sizeof(x)/4;
int mine =min(Nx,Nh);
int taill,taille1 ;
taill= Nx+Nh-1 ;
taille1=Nx+Nh;
int maxe =max(Nx,Nh);
double *code =new double[taill] ;
code[0]=signal[0]*x[0];
for(int k =1; k<taill ; k++)
for(int j =0; j<taille1 ; j++)
{
if ((k+1-j>0) && (k+1-j<=mine) && (j<maxe))
     {
       int a=k-j;
       code[k]=code[k]+x[j]*signal[a];
     }
}
ShowMessage("voila les résultat de la convolution\n");
ShowMessage(code[5]);
Quant je utilise le premier X ça donne des bon resultat mai quant je itulise le deuxieme ça donne pas des bon resultat ?

Normalement dans les deux cas ça donne ça pour des bon resulat :
le premiers x :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
0.0123
    0.3172
    2.2200
    2.3880
    0.6700
:
le deuxieme x
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
 
           0
           0
           0
           0
           0
    0.0003
    0.0021
   -0.0205
   -0.1816
   -0.0673
    0.1791
    0.0888
    0.0004
   -0.0013
           0
           0
           0
           0
           0
mai ça marche que pour le premier et non pour le deuxieme ?!

une autre question c'est comment faire un agrendisement d'une valeur 1.789 > 1.79