Come usare FFT in MATLAB

February 9

Come usare FFT in MATLAB


Fast Fourier Transform (FFT) è una tecnica spesso utilizzata nella elaborazione del segnale. Una trasformata di Fourier approssima qualsiasi funzione continua come somma di funzioni periodiche (seno e coseno). FFT fa la stessa cosa per i segnali discreti - serie di punti dati, piuttosto che una funzione continua definita. FFT consente di identificare i componenti periodiche nel vostro segnale discreto. Potrebbe essere necessario identificare un segnale periodico sepolto sotto rumore casuale, o analizzare un segnale con diverse fonti sottostanti periodiche diverse. MATLAB include un'implementazione incorporata di FFT per aiutarti a fare questo.

istruzione

Eseguire la FFT

1 Calcolare la lunghezza (numero di elementi) del vettore contenente i dati. Per esempio, se i dati sono memorizzati in un vettore chiamato "D," tipo "L = lunghezza (d);" nella riga di comando di MATLAB senza virgolette. L ora conterrà il numero di elementi a d.

2 Calcolare la potenza di 2 che è maggiore o uguale a L, digitando "p = nextpow2 (L);" nella riga di comando di MATLAB senza virgolette. Se L = 1000, ad esempio, p sarà 10, perché 2 ^ 10 = 1024.

3 Eseguire la FFT digitando "Y = fft (d, 2 ^ p);" nella riga di comando di MATLAB senza virgolette. Questo comando aggiunge zeri a D per ottenere un vettore di lunghezza 2 ^ p e quindi esegue FFT sul vettore 2 ^ p-elemento. Gli zeri allegate non influenzano il risultato della FFT, ma FFT è più veloce con un vettore la cui lunghezza è una potenza di 2.

Il vettore risultante Y fornisce i coefficienti di funzioni seno e coseno con frequenze che variano da - (2 ^ p / 2)) a 1 + (2 ^ p / 2) (supponendo d è stata campionata a 1 campione al secondo, o 1Hz). Queste sono le funzioni seno e coseno che si sommano al segnale d originale. Y è complessa; sue parti reali sono i coefficienti delle funzioni seno e la sua parte immaginaria sono i coefficienti delle funzioni coseno.

4 Mantenere solo le parti uniche di Y digitando "Y = Y (1: ((2 ^ p + 1) / 2));" senza le virgolette alla riga di comando di MATLAB. Questo è necessario perché l'uscita della FFT è simmetrica - cioè, la seconda metà di Y è semplicemente il complesso coniugato del primo tempo. Ora, Y dà i coefficienti di funzioni seno e coseno a frequenze da 0 a 1 + (2 ^ p / 2)).

5 Dividere Y da L / 2 digitando "Y = Y./(L/2);" nella riga di comando di MATLAB senza virgolette. Questo è necessario perché l'uscita FFT predefinito di MATLAB viene moltiplicato per un fattore di L / 2, così sarà più grande se d è più lungo. Dividendo per L / 2 normalizza l'uscita FFT modo che non dipende dalla lunghezza del d.

risultati Plot FFT

6 Se D non è stato campionato a 1 Hz, ma ad una certa frequenza "f", le frequenze effettive rappresentate in Y sarà da 0 a f

(1 + (2 ^ p / 2))). Calcolare un vettore MATLAB contenente queste frequenze. In primo luogo, definire la frequenza di campionamento attuale in una variabile f. Se la frequenza di campionamento effettivo è stato di 0,5 Hz (1 campione ogni 2 secondi), digitare "f = 0.5;" nella riga di comando di MATLAB senza virgolette. ". Freq = f (0: (1 + (2 ^ p / 2))))" Avanti, digitare sulla riga di comando di MATLAB senza virgolette. Ora freq contiene le frequenze effettive rappresentate in Y.

7 Ottenere l'ampiezza della componente di segnale di ciascuna frequenza digitando "Ya = abs (Y)". nella riga di comando di MATLAB senza virgolette.

8 Tracciare lo spettro di ampiezza del segnale digitando "plot (freq, Ya)" nella riga di comando di MATLAB senza virgolette.

9 Prendi il potere della componente del segnale ad ogni frequenza digitando "Yp = Y. ^ 2" alla linea di comando di MATLAB senza virgolette.

10 Tracciare lo spettro di potenza del segnale digitando "plot (freq, Yp)" nella riga di comando di MATLAB senza virgolette.

Consigli e avvertenze

  • Più lungo è il vettore di dati di input d, la risoluzione di frequenza migliore si otterrà.