Trasformata di Fourier rettangolo in MATLAB non corretta
Salve, sto cercando di calcolare la trasformata di Fourier di un rettangolo in MATLAB. Come sapete, dato un rettangolo di altezza A e larghezza T, centrato in 0 (quindi il rettangolo va da \(-\frac{T}{2}\) a \(+\frac{T}{2}\)) la sua trasformata di Fourier è \( X(f) = A T sinc(f T) \). Ora \( X(0) = A T \), il che è ovvio dato che il valore della trasformata di Fourier in 0 deve essere l'integrale della funzione nel dominio del tempo.
Ora voglio calcolare la trasformata di un rettangolo alto 1 e ampio 2. In fondo al post il codice che ho usato. Il problema è che plottando la trasformata di Fourier, il valore in 0 al posto di venire 2 viene 200

Ora voglio calcolare la trasformata di un rettangolo alto 1 e ampio 2. In fondo al post il codice che ho usato. Il problema è che plottando la trasformata di Fourier, il valore in 0 al posto di venire 2 viene 200

clear all %[y,t]=rect(1,2); dt=0.01; t=-5:0.01:5; y=(sign(t+1)-sign(t-1))/2; plot(t,y); pause yfft=fftshift(fft(y)); %yfftabs=abs(yfft); yfftabs=sqrt(yfft.*conj(yfft)); N=length(yfftabs); nrang=-((N-1)/2):((N-1)/2); plot(nrang,yfftabs);


Risposte
Sono riuscito a far tornare il modulo sperimentalmente (vale a dire, ad intuito) moltiplicandolo per la differenza di tempo tra due istanti. Perchè bisogna fare ciò? E' una "caratteristica" di MATLAB/del modo in cui calcola la TF, o ho sbagliato io qualcosa?
EDIT: eliminata ca***a sulla fase
EDIT: eliminata ca***a sulla fase
clear all %[y,t]=rect(1,2); dt=0.001; rangeext=5; t=-rangeext:dt:rangeext; points=2*rangeext*(1/dt)*2; y=(sign(t+(1/2))-sign(t-(1/2)))/2; subplot(3,1,1); plot(t,y,'Color','red','LineWidth',2); axis([-2 2 0 2]); grid on title('Segnale nel tempo') yfft=fftshift(fft(y,points)); yfftabs=abs(yfft) * dt; %yfftabs=sqrt(yfft.*conj(yfft)) * dt; N=length(yfftabs); nrang=-((N-1)/2):((N-1)/2); subplot(3,1,2); plot(nrang,yfftabs); axis([-200 200 -1 1.5]); grid on title('Modulo della TF') yfftangle=angle(yfft); subplot(3,1,3); plot(nrang,yfftangle); axis([-50 50 -pi pi]); grid on title('Fase della TF')

Sono secoli che non lavoro con le trasformate di Fourier. Direi comunque che il problema consiste nel fatto che la funzione fft non ha alcuna idea di quale sia la scala dei tempi. Tutto quello che ha ricevuto in input è un vettore di un certa lunghezza e (credo) supponga che la distanza tra i diversi campioni sia di una unità. E' quindi probabilmente necessario scalare il risultato in modo opportuno. Prova a dare un occhiata all'esempio nella documentazione: qui
Ti ringrazio.
Comunque ri-pensandoci la fase è sbagliata. Infatti il rettangolo che ho costruito è reale e pari, quindi deve avere trasformata di Fourier reale, il che significa che mi aspetto fase nulla a ogni frequenza. Invece come si vede la fase non è affatto nulla
Comunque ri-pensandoci la fase è sbagliata. Infatti il rettangolo che ho costruito è reale e pari, quindi deve avere trasformata di Fourier reale, il che significa che mi aspetto fase nulla a ogni frequenza. Invece come si vede la fase non è affatto nulla