Trasformata di Fourier Discreta
Ciao a tutti!
Spero che questo sia il posto giusto per una domanda sulla dft...
Devo implementare la dft. Il codice che ho scritto è:
Ora, Func è una funzione fatta così:
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]
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
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.
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....