Analisi spettrale di base
La trasformata di Fourier è uno strumento utilizzato per eseguire l'analisi della frequenza e dello spettro di potenza dei segnali nel dominio del tempo.
Quantità di analisi spettrale
L'analisi spettrale studia lo spettro di frequenza contenuto in dati discreti campionati in modi uniforme. La trasformata di Fourier è uno strumento che rivela i componenti di frequenza di un segnale basato sul tempo o sullo spazio rappresentandolo nello spazio di frequenza. La tabella seguente elenca le quantità comunemente utilizzate per caratterizzare e interpretare le proprietà dei segnali. Per saperne di più sulla trasformata di Fourier, vedere Trasformate di Fourier.
| Quantità | Descrizione |
|---|---|
x | Dati campionati |
n = length(x) | Numero di campioni |
fs | Frequenza di campionamento (campioni per unità di tempo o spazio) |
dt = 1/fs | Incremento di tempo o spazio per campione |
t = (0:n-1)/fs | Intervallo di tempo o spazio per dato |
y = fft(x) | Trasformata di Fourier discreta dei dati (DFT) |
abs(y) | Ampiezza della DFT |
(abs(y).^2)/n | Potenza della DFT |
fs/n | Incremento di frequenza |
f = (0:n-1)*(fs/n) | Intervallo di frequenza |
fs/2 | Frequenza di Nyquist (punto medio dell'intervallo di frequenza) |
Segnale rumoroso
La trasformata di Fourier può calcolare i componenti di frequenza di un segnale che è stato danneggiato da rumore casuale.
Creare un segnale con frequenze dei componenti a 15 Hz e 40 Hz e aggiungere rumore gaussiano casuale.
rng('default') fs = 100; % sample frequency (Hz) t = 0:1/fs:10-1/fs; % 10 second span time vector x = (1.3)*sin(2*pi*15*t) ... % 15 Hz component + (1.7)*sin(2*pi*40*(t-2)) ... % 40 Hz component + 2.5*randn(size(t)); % Gaussian noise;
La trasformata di Fourier del segnale identifica i relativi componenti di frequenza. In MATLAB®, la funzione fft calcola la trasformata di Fourier utilizzando un algoritmo della trasformata di Fourier veloce. Utilizzare fft per calcolare la trasformata di Fourier discreta del segnale.
y = fft(x);
Tracciare lo spettro di potenza in funzione della frequenza. Mentre il rumore maschera i componenti di frequenza di un segnale nello spazio basato sul tempo, la trasformata di Fourier li rivela come picchi di potenza.
n = length(x); % number of samples f = (0:n-1)*(fs/n); % frequency range power = abs(y).^2/n; % power of the DFT plot(f,power) xlabel('Frequency') ylabel('Power')

In molte applicazioni, è più comodo visualizzare lo spettro di potenza centrato sulla frequenza 0 perché rappresenta meglio la periodicità del segnale. Utilizzare la funzione fftshift per eseguire uno spostamento circolare su y e tracciare la potenza centrata su 0.
y0 = fftshift(y); % shift y values f0 = (-n/2:n/2-1)*(fs/n); % 0-centered frequency range power0 = abs(y0).^2/n; % 0-centered power plot(f0,power0) xlabel('Frequency') ylabel('Power')

Segnale audio
È possibile utilizzare la trasformata di Fourier per analizzare lo spettro di frequenza dei dati audio.
Il file bluewhale.au contiene i dati audio della vocalizzazione di una balenottera azzurra del Pacifico registrati da microfoni subacquei al largo della costa della California. Il file proviene dalla libreria delle vocalizzazioni animali gestita dal Cornell University Bioacoustics Research Program.
Poiché i richiami delle balenottere azzurre sono così bassi, risultano appena udibili all'orecchio umano. La scala temporale nei dati è compressa di un fattore 10 per aumentare il tono e rendere più chiaramente udibile il richiamo. Leggere e tracciare i dati audio. È possibile utilizzare il comando sound(x,fs) per ascoltare l'audio.
whaleFile = 'bluewhale.au'; [x,fs] = audioread(whaleFile); plot(x) xlabel('Sample Number') ylabel('Amplitude')

Il primo segnale presenta una modulazione rapida di tipo trillo, seguita da tre emissioni sonore prolungate e a tonalità più bassa. Questo esempio analizza una singola emissione sonora prolungata. Specificare un nuovo insieme di dati che includa approssimativamente la prima emissione sonora prolungata e corregga i valori temporali per compensare l’accelerazione di un fattore 10. Tracciare il segnale troncato in funzione del tempo.
moan = x(2.45e4:3.10e4); t = 10*(0:1/fs:(length(moan)-1)/fs); plot(t,moan) xlabel('Time (seconds)') ylabel('Amplitude') xlim([0 t(end)])

La trasformata di Fourier dei dati identifica i componenti di frequenza del segnale audio. In alcune applicazioni che elaborano grandi quantità di dati con fft, è prassi comune ridimensionare l'input in modo che il numero di campioni sia una potenza di 2. Questo può rendere il calcolo della trasformata significativamente più veloce, in particolare per campioni con fattori primi di grandi dimensioni. Specificare una nuova lunghezza del segnale n che sia una potenza di 2 e utilizzare la funzione fft per calcolare la trasformata di Fourier discreta del segnale. fft riempie automaticamente i dati originali con zeri per aumentare la dimensione del campione.
m = length(moan); % original sample length n = pow2(nextpow2(m)); % transform length y = fft(moan,n); % DFT of signal
Regolare l'intervallo di frequenza in base al fattore di accelerazione, quindi calcolare e tracciare lo spettro di potenza del segnale. Il grafico indica che la vocalizzazione è composta da una frequenza fondamentale intorno ai 17 Hz e da una sequenza di armoniche, dove la seconda armonica è enfatizzata.
f = (0:n-1)*(fs/n)/10; power = abs(y).^2/n; plot(f(1:floor(n/2)),power(1:floor(n/2))) xlabel('Frequency') ylabel('Power')

Vedi anche
fft | fftshift | nextpow2 | ifft | fft2 | fftn