Trasformata di Fourier Discreta

lucagalbu
Ciao a tutti!
Spero che questo sia il posto giusto per una domanda sulla dft...

Devo implementare la dft. Il codice che ho scritto è:

double Re=0;
double Im=0;
double Step=700;
	
        for(double k=-(Step/2); k<(Step/2)-1; k++)
	{
		for(double n=-(Step/2); n<(Step/2)-1; n++)
		{
			Re+=cos(n*k*2.*PI/Step)*Func(n*2.*PI/Step);	
			Im+=sin(n*k*2.*PI/Step)*Func(n*2.*PI/Step);
		}
		File << k << '\t' << Re << '\t' << Im << '\t' << Re /*<< '\t' << atan(Im/Re) << endl;
		Re=0;
		Im=0;
	}


Ora, Func è una funzione fatta così:
double Func(double x)  {return sin(A*x);}


Mi aspetto che il modulo della dft abbia due picchi in + e - A. Infatti se metto A intero ho effettivamente questio due picchi. Ma se A è decimale (ad esempio A=3.6) allora ho i due picchi in + e - 3.6, ma ho anche un picco in 0.
Sono io che sbaglio qualcosa o sono errori di round off?[/code]

Risposte
dissonance
No, c'è qualcosa che non va. Il picco in $0$ non può uscire da nessuna parte, significherebbe che il segnale è di tipo $sin(Ax)+"costante"$. Controlla le formule della DFT. In particolare quello $"Step"$ a denominatore non mi convince molto.

lucagalbu
Ho controllato, e nelle formule ho Step al denominatore. Ho notato però che il picco scompare se nel ciclo for al posto di mettere n<(Step/2)-1 metto n<=(Step/2). Ma la formula dice che devo sommare solo fino a Step/2-1....

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.