Pagina 1 di 2

MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 18:22
da edomar
Salve a tutti, vi espongo il mio problema nella speranza che possiate aiutarmi.

Dispongo di un vettore corrente ricavato rispetto a theta = omega*t (fondamentale 50 Hz):

Schermata 2018-03-26 alle 18.15.05.png


Devo effettuare l'analisi in frequenza per poi ricavare l'armonica fondamentale (per calcolare il THD).

Ho seguito questo procedimento:
Codice: Seleziona tutto
% analisi armonica corrente i1

f_fond = 50;
omega = 2*pi*f_fond;
t = theta/omega;

TS = t(2) - t(1);
FS = 1/TS;

Y = fft(i1);

f = FS*(0:length(i1)-1)/length(i1);

stem(f,abs(Y)/length(i1)*2)
xlim([0 500])


Ottenendo questo spettro in ampiezza:

Schermata 2018-03-26 alle 18.17.53.png


ZOOM

Schermata 2018-03-26 alle 18.19.01.png


che è palesemente sbagliato. Qualcuno può aiutarmi? è la prima volta che mi cimento in un'analisi di questo tipo e sono sicuro di star facendo tante stupidaggini

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 20:07
da edomar
EDIT: ho cambiato un po' il codice, rileggendo un po' di teoria sulla FFT... La situazione è migliorata, ma non capisco perché non mi rappresenti la fondamentale e le sue multiple, sembra tutto "shiftato".. Posto le modifiche:
Codice: Seleziona tutto
f_fond = 50;
omega = 2*pi*f_fond;
t = theta/omega;

TS = t(2) - t(1);
FS = 1/TS;

n = 2^nextpow2(length(i1))
Y = fft(i1,n);

f = FS*(0:n-1)/n;

stem(f,abs(Y)/n*2)
xlim([0 500])




Schermata 2018-03-26 alle 20.04.14.png


Inoltre mi accorgo che variando il numero di elementi di theta (e quindi di t) il risultato cambia e anche di molto..

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 21:22
da gvee
Perché posti un codice incompleto ?
Esempi per calcolare la DFT con MATLAB li puoi trovare in questo libro, p.e. al capitlo DFT Applications.

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 21:51
da edomar
Ci sono 600 righe di codice prima... Posso postare "quello che serve"... Il problema è che non riesco a "estrarre" dal workspace il vettore i1.. Sai come si fa?

In rete ci sono tanti esempi, è vero... Ma sono tutti su combinazioni di sinusoidi, partendo dalla definizione di frequenza di campionamento, vettore del tempo, ecc ecc...
In questo caso ho un codice in cui dopo mille peripezie trovo questa corrente e devo studiarne gli spettri... Quindi l'intervallo di tempo è "vincolato"

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 22:18
da Maranza
Help FFTshift!

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 22:27
da edomar
Viene fuori una cosa improbabile... posto
Codice: Seleziona tutto
% analisi armonica corrente i1

omega = 2*pi*50;

t = theta/omega;

TS = t(2) - t(1);

FS = 1/TS;

n = 2^nextpow2(length(i1))

Y = fftshift(i1);

f = FS*(0:length(Y)-1)/length(Y);

stem(f,abs(Y)/length(Y)*2)
xlim([0 500])




Schermata 2018-03-26 alle 22.24.05.png


Non capisco...
Sai come scrivere qui sul forum un vettore che ho salvato solo sul workspace? In questo modo posso postare theta e i1..

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 22:38
da gvee
edomar ha scritto:Sai come scrivere qui sul forum un vettore che ho salvato solo sul workspace? In questo modo posso postare theta e i1..

Prova a salvare i vettori in un file .mat ed allegarli al forum.
Oppure i un file .dat e ne copi qui il contenuto tra i tag code.

Comunque se conosci il vettore di tempo dovresti conoscere direttamente la frequenza di campionamento.

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 22:50
da edomar
Esatto, è definita come TS nello script che ho postato.. Comunque il file .mat non è allegabile, il .dat mi dà fuori caratteri aramaici, tutto tranne il vettore.. non capisco il perché

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 23:16
da xyz
Se definisci TS in questo modo non ha senso:

Codice: Seleziona tutto
...
TS = t(2) - t(1);
....


Il tempo di campionamento non può essere uguale alla differenza dei primi 2 campioni.

Comunque non credo che serva allegare un inutile matrice, basta che parti con un segnale generato nel codice facile come una armonica ad una determinata frequenza e poi vedi cosa ottieni facendo FFT. Se il risultato ti sembra corretto al posto della singola armonica gli dai il tuo segnale e vedi cosa ottieni.

Re: MATLAB - Fast Fourier Transform FFT

MessaggioInviato: 26 mar 2018, 23:20
da edomar
Il vettore theta è equispaziato, per questo l'ho definito in questo modo..

hai ragione comunque, e il risultato è pure totalmente sbagliato:

Codice: Seleziona tutto
% analisi armonica corrente i1
theta = 0:0.001:2*pi;

omega = 2*pi*50;

t = theta/omega;

F = 10*sin(3*omega*t);

TS = t(2) - t(1);

FS = 1/TS;

n = 2^nextpow2(length(F));

Y = fft(F,n);

f = FS*(0:n-1)/n;

stem(f,abs(Y)/n*2)
xlim([0 500])



Schermata 2018-03-26 alle 23.21.15.png