je voudrais de l'aide pour mon programme de calcule de transforme de Fourier .Dans mon cas je me contente de séparer en cos et sin une fonction de type porte rectangle le problème étant que les valeurs trouver après TF me semble bisard(je dois tracer le sinc) si quelqu'un pouvais jeter un œil et me dire si je n'est pas fait d'erreur dans le code ?
je poste les partie du main et de la transformé de fourier
ne faite pas attention à tout le programme n'est pas complet et comporte d'autre header;
merci d'avance
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 printf("donner la borne inferieur\n");//consignes scanf("%lf",&a); printf("donner la borne superieur\n"); scanf("%lf",&b); delta=fabs(b-a); printf("l'intervalle des positions vaut:\n%lf\n",delta); printf ("entrez la condition sur mu:\n"); scanf("%lf", &mu); printf ("donnez le pas d'espace:\n"); scanf("%lf",&h); printf ("donnez la duree d'etude:\n"); scanf("%lf", &i); printf ("donnez le pas de temps:\n"); scanf("%lf", &j); /**********************************************************************/ if(x<=b && x>=a) {Fx=1; } else {Fx=0; } /**********************************************************************/ pointstemps = i/j; //calcul du nombre points en temps et en espace delta est linterval d'etude de la fonction pointsespace=(delta/h); /**********************************************************************/ tab=(double**)malloc(pointsespace*sizeof(double*));//allocation de la mémoire de la premiere colonne du tableau /**********************************************************************/ for (r=0; r < pointsespace; r++)//allocation de la mémoire nécessaire aux lignes du tableau { tab[r]=(double*)malloc(pointstemps*sizeof(double)); } for (r=0; r < pointsespace; r++)//initialisation de toutes les cases du tableau à 0 { for (s=0; s < pointstemps; s++) { tab[r][s]=0; } } /**********************************************************************/ tabk = (complexe**) malloc( pointsespace * sizeof(complexe*));//allocation de la mémoire du tableau complexe for (q=0; q < pointsespace; q++) { tabk[q] =(complexe*)malloc( pointstemps * sizeof(complexe)); } /**********************************************************************/ for (q=0; q < pointsespace; q++)//initialisation du tableau de complexe à 0 for (d=0; d < pointstemps; d++) { complexe temp; temp.reel=0; temp.im=0; tabk[q][d] = temp; tabk[q][d].reel=0; tabk[q][d].im=0; } printf ("declaration ok\n"); system ("PAUSE"); /**********************************************************************/ for (n = 0 ; n < pointsespace ; n++)//calcul de la fonction initiale dans l'intervalle d'étude { x = a+h*n; tab[n][0] = Fx; m = n+1; printf("point Nunmero %ld = %lf\n", m, tab[n][0]); fprintf(XX, " %lf\n",x); } printf ("calcul fonction ok\n"); system ("PAUSE"); /**********************************************************************/ fourier (tab,tabk,pointsespace,a,h);//TF directe printf ("fourier direct ok\n"); system ("PAUSE"); /**********************************************************************/ /**********************************************************************/ /**********************************************************************/ for (r=0; r < pointsespace; r++)//libération de la mémoire allouée { free(tab[r]); } free(tab); for (q=0; q < pointsespace; q++) { free(tabk[q]); } free(tabk); /**********************************************************************/ printf ("liberation ok\n"); system("PAUSE"); return 0; }
voici la partie du code qui calcule la transformé
si vous trouvez quelque chose je suis preneur merci
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 typedef struct complexe complexe; struct complexe { complex reel; complex im; }; void fourier (double** tab, complexe** tabk, double pointsespace, double a,double h)//fonction transformée de fourrier { int e=0;//déclaration des variables nécessaires double x2=0; int k2=0; int d=0; /*********************************************************************************/ FILE* flot = NULL; FILE* flo = NULL; FILE* fl = NULL; FILE* result = NULL; flot = fopen("p.xls","w+"); flo = fopen("pc.xls","w+"); fl = fopen("pcc.xls","w+"); result = fopen("resultats/resultats.xls","w+"); fprintf (result,"k\tpartie reelle\tpartie imaginaire:\n"); /*********************************************************************************/ for (k2=0; k2 < pointsespace; k2++)//on calcul ici la partie réelle de la TF { for (e=0; e < pointsespace; e++) { x2=a+e*h; tabk[k2][d].reel+=(tab[e][d]*cos(2*3.14*x2*k2/pointsespace)); tabk[k2][d].im+=(tab[e][d]*sin(2*3.14*x2*k2/pointsespace)); } printf ("resultat fourier reel:\n"); printf ("%lf\n", tabk[k2][d].reel); fprintf(fl, " reel%lf\n",tabk[k2][d].reel); fprintf(flot, " k= %ld\n ",k2); printf ("resultat fourier imaginaire:\n"); printf ("%lf\n", tabk[k2][d].im); fprintf(flo, " im%lf\n",tabk[k2][d].im); e=k2+1; fprintf (result,"%ld\t%lf\t%lf\n", e, tabk[k2][d].reel, tabk[k2][d].im); } fclose(flot); fclose(flo); fclose(fl); fclose(result); };
Partager