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 :
Quant je utilise le premier X ça donne des bon resultat mai quant je itulise le deuxieme ça donne pas des bon resultat ?
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]);
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
mai ça marche que pour le premier et non pour le deuxieme ?!
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
une autre question c'est comment faire un agrendisement d'une valeur 1.789 > 1.79
Partager