Дискретна Фуријеова трансформација — разлика између измена

Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м Правопис и/или генералне преправке
Ред 134:
 
:<math>
F(\omega_1 = 2\pi ) = \sum_{j=0}^{N-1=9} e^{ -\mathrm{i} \cdot 2\pi \cdot t_j } \cdot f(t_j ) = \ldots = 0 -3.5\mathrm{i} = y_1 = {\hat c}_1
</math>
 
 
:<math>
F(\omega_2 = 4\pi ) = \sum_{j=0}^{N-1=9} e^{ -\mathrm{i} \cdot 4\pi \cdot t_j } \cdot f(t_j ) = \ldots = 15 +0\mathrm{i} = y_2 = {\hat c}_2
</math>
 
Израчунавање осталих коефицијената иде аналогно, те ћемо их овде само навести као резултате:
:<math>
F(\omega_3 = 6\pi ) = 2.5 - 3\mathrm{i} = y_3 = {\hat c}_3
</math>
:<math>
F(\omega_4 = 8\pi ) = 6.7586e-14 + 2.8240e-14i = y_4 = {\hat c}_4
</math>
 
Ред 198:
#define FREQ 25
double my_function ( double t )
{
/* violina svira ton od 25 -{Hz}- */
double ugaona_brzina = 2 * pi * FREQ;
return 5 + 10 * cos( ugaona_brzina * t) + 15 * cos( 2 * ( ugaona_brzina * t ) )
+ 20 * sin ( 3 * ( ugaona_brzina * t ) );
}
complex double get_fourier_coef ( double omega_n, double* t, double* f )
{
complex double coeff = 0;
Ред 213:
int k = 0;
for ( k = 0; k < N; k ++ )
{
// f[k] == f( t[k] );
coeff += cexp ( - I * omega_n * t[k] ) * f[ k ] ;
}
return coeff;
Ред 235:
/* pripremi vektore t i f_t -> nas signal je f_t !*/
t[0] = 0;
f[0] = my_function ( t[0] );
omega[0] = 0;
for ( n = 1; n < N; n ++ )
{
omega[n] = 2 * pi * n / ( N * T );
t[n] = n * T;
f[n] = my_function ( t[n] );
}
/* izracunavanje koeficijenata */
for ( n = 0; n < N/2+1; n ++ )
{
coeff[n] = get_fourier_coef ( omega[n], t, f );
if ( cabs(coeff[n]) > 0.1 ){
printf ( "# Koeficijent %d: %e * e^i*%e\n", n, cabs(coeff[n]), carg(coeff[n]) );
}
}
Ред 258:
/* krece inverzija: */
a[0] = cabs(coeff[0] ) / N;
phi[0] = 0;
for ( n = 1; n < N/2+1; n++ )
{
if ( cabs( coeff[n] ) > 0.1 )
{
// c = 1/2 ( a + ib ), zato a = 2 * |c|, b == 0
a[n] = 2 * cabs( coeff[n] ) / N;
if ( abs ( carg(coeff[n]) ) > 0.001 )
{
phi[n] = carg(coeff[n] );
Ред 285:
/* predstavljanje rezultata: */
printf ( "Nasa rekonstrukcija:\n f ( t ) = %e", a[0] );
for ( n = 1; n < N/2+1; n++ )
{
if ( a[n] )
{
if ( phi[n] )
{
printf ( " + %e * cos ( %d * ( 2 * pi * t + %e ) )", a[n], n, phi[n] );
}
else
{
printf ( "+ %e * cos ( %d * 2 * pi * t )", a[n], n );
}
}
}
printf ( "\n" );