opis: program robi widmo mocy z sygnalu rownoprobkowanego do pliku plik_z_danymi.dat za pomoca transformaty Fouriera.
#include<stdio.h>
#include<math.h>
#define M 10000 /*liczba dyskretnych wartosci okresu*/
#define KP 100 /*poczatkowa wartosc parametru k*/
#define N 2000 /*liczba pomiarow*/
#define PI 3.1415926536 /*liczba pi*/
main()
{
float t[N],f[N];
float P0,P,a,b,c,czasObs;
int i,k;
FILE *plik1, *plik2, *dane;
char *nazwa1, *nazwa2, *nazwa;
nazwa="plik_z_danymi.dat";
nazwa1="plik_z_wynikiem1.dat";
nazwa2="plik_z_wynikiem2.dat";
dane=fopen(nazwa,"r");
plik1=fopen(nazwa1,"w");
plik2=fopen(nazwa2,"w");
for (i=0; i<=N-1; ++i)
{
fscanf(dane,"%f%f\n",&t[i],&f[i]);
}
fclose(dane);
czasObs=t[0]-t[N-1];
P0=KP*czasObs;
for (k=1; k<=M; ++k)
{
P=P0/k;
a=0;
b=0;
for (i=0; i<=N-2; ++i)
{
a=a+f[i]*sin(k*2*PI*t[i]/P0);
b=b+f[i]*cos(k*2*PI*t[i]/P0);
}
a=2*a/czasObs;
b=2*b/czasObs;
a=fabs(a);
b=fabs(b);
c=sqrt(a*a+b*b);
fprintf(plik1,"%10.5f%10.5f%10.5f%10.5f\n",P,a,b,c);
fprintf(plik2,"%10.5f%10.5f%10.5f%10.5f\n",log10(P),a,b,c);
}
fclose(plik1);
fclose(plik2);
return 0;
}
--
AgnieszkaB - 09 Mar 2005
- kompiluje i uruchamie, ale w wyniki są nan tzn ,,not a number" tzn błęd matematycznie z punkt widzenie komputera, np podzielić przez zero, lub numer większy niż maksimum numer, itd.... -- BoudRoukema - 16 Mar 2005