Spettro fft

Apr 17, 2006 8 Replies

Ciao a tutti! Ho un problema relativo alla spettro di Fourier, fatto da MatLab, di un segnale. Ho un segnale campionato con Ts=3D0.001 e facendo lo spettro usando fft ottengo un picco di 200 a 3Hz. Prendo lo stesso segnale e lo decampiono con Ts =3D 0.009, facendo ora lo spettro ottengo lo stesso andamento ma il picco =E8 attenuato di un fattore pari circa a 10.. Per quanto ne sapevo la frequenza di campionamento dovrebbe avere effetto solo sulla massima frequenza che pu=F2 essere correttamente visualizzata =3D Fc/2 Non riesco a capire questo effetto sull'ampiezza dello spettro (soprattutto considerando che il segnale =E8 composto da 15000 campioni)..



Grazie a chiunque mi pu=F2 aiutare!



Fabrizio



Se si tratta dello stesso segnale e la frequenza di campionamento è diversa nei due casi, come fanno a risultare sempre 15000 campioni in entrambi i casi?? C'è qualcosa che non va nel tuo ragionamento. Il segnale originale poi prima di essere campionato è un segnale analogico, qual'è la banda di quel segnale? Per ottenere due spettri identici nei due casi di campionamento con diverso Ts devi prima fornire un segnale in ingresso con lo stesso spettro, filtrando con un passabasso con frequenza di taglio opportuna.

Hai finestrato il tuo insieme di dati? Hai provato a cambiare il tipo di finestra?

In matlab la fft non e' normalizzata rispetto al numero di campioni. Se s e' il tuo segnale e S=fft(s), prova a dividere S per length(S) e dovresti trovare le stesse ampiezze.

Ciao Scola

Dimenticavo, prova a dare un occhiata anche al comando psd (power spectral density). Dalla release 6 (o 7 non ricordo), ne hanno introdotto una ancora piu' potente, che pero' e' piu' complessa da gestire. Se hai una release cosi' prova a fare: h=spectrum.welch. h.SegmentLength=512; psd(h,s,'Fs',freq); dove s e' il tuo segnale e freq la frequenza di campionamento.

Ciao Scola

Fab ha scritto:

Non so se possa essere d'aiuto, quando mi serviva uno spettro con matlab ho usato simulink, c'è un blocchetto "power gui" che fa delle cose carine, tra le quali la fft. Non ricordo in che libreria sta, forse in "power electronics" o qualcosa del genere. In ingresso gli devi dare una struttura (array dati + array tempo).

Ciao S.

Ciao e grazie per le risposte! Semplifico un po' la domanda.. Per cercare di capire il problema ho fatto lo spettro fft con MatLab di un semplice segnale sinusoidale con frequenza fissata. A seconda del tempo di campionamento (dt) usato (cio=E8 a seconda della definizione del vettore dei tempi t=3D0 : dt : tfin) e del tempo finale (tfin) scelto ottengo un picco di ampiezza diversa. Sembra quindi che l'ampiezza dello spettro dipenda dal numero di campioni (che variano a seconda di dt e di tfin)..ma la teoria non dice questo.. Tenete presente che normalizzo l'uscita della fft rispetto al numero di campioni: Y=3Dfft(segnale); lungh=3Dlength(Y); Pyy =3D Y.* conj(Y) / lungh;

Grazie ancora!

Fabrizio

Veramente la teoria dice che i coefficienti sono proporzionali a N (dove N e' il numero di campioni). Leggi

formatting link

Ecco l'inghippo: se N sono i campioni di "segnale", Y e' proporzionale a N, lungh e' N, Y.*conj(Y) e' proporzionale a Y^2, quindi Pyy e' proporzionale a N^2/N, quindi a N. prova Pyy=Y.*conj(Y)/lungh^2;

Ciao Scola

Perfetto!! Grazie mille!! .=2Ecerto che l'help di MatLab =E8 un disastro..le istruzioni le ho prese da l=EC..

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required