Spettro fft

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

Reply to
Fab
Loading thread data ...

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.

Reply to
Stefano

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

Reply to
Valeria Dal Monte

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

Reply to
nicola scolari

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

Reply to
nicola scolari

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.

Reply to
Stratox

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

Reply to
Fab

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

Reply to
nicola scolari

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

Reply to
Fab

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.