Pagina 1 di 1

FFT in matlab

Inviato: 25 ott 2013, 23:54
da Laura89
Ciao a tutti, sto implementando in ambiente matlab un codice che realizzi la space vector modulation per un inverter trifase. Uno dei punti richiesti è la rappresentazione dello spettro della tensione in uscita dall'inverter. Ho scritto il seguente codice:

Codice: Seleziona tutto

function out=spettro(ValoreNelTempo,IntervalloTempo,fmax)

dime = max(size(ValoreNelTempo));
% non si possono richiedere più armoniche del numero di campioni-1
f0 = 1/IntervalloTempo;
n = floor(fmax/f0);
if (n>dime)
    n=dime-1;
end
ValoreNelTempo=reshape(ValoreNelTempo,dime,1);
tempo = linspace(0,IntervalloTempo,length(ValoreNelTempo));

a=fft(ValoreNelTempo);

Armoniche=2*abs(a(2:dime))/dime;
numarm=1:n;


    figure(1), subplot(2,1,1)
   
    bar(numarm*f0,Armoniche(numarm),0.5,'r')
    xlabel('frequenza - Hz'),grid
   
    figure(1), subplot(2,1,2)
    plot(tempo,ValoreNelTempo,'b-');
    xlabel('tempo - s'), grid
   
out=Armoniche(numarm);

Che poi ho richiamato nel seguente modo:

Codice: Seleziona tutto

tempo = simout.time;
% tempo= t(time>0.3)
 y = simout.signals.values;
% signal_mod= y(time>0.3)
out = spettro(y,max(tempo),2/Ts);

figure(1),
subplot(2,1,1), ylim([0 40]), xlim([0 100])
legend('spettro del segnale campionato')
subplot(2,1,2), ylim([-100 100]), xlim([0 2])
legend('laura')

Dove simout è il segnale che prendo da uno scope di simulink.

Ottengo il grafico allegato.
Cattura.JPG
Cattura.JPG (120.78 KiB) Visto 1168 volte

Questo grafico non è corretto, in quanto dovrei fare la FFT soltanto della parte sinusoidale (omettendo il transitorio) e poi il prof mi ha detto di prendere un numero intero di periodi. Non so dove mettere le mani. Potreste per favore aiutarmi?
Grazie in anticipo

Re: FFT in matlab

Inviato: 28 ott 2013, 11:45
da dimaios
Inizia con il trovare lo zero crossing del segnale.
Per avere un numero intero di periodi prendi il primo e l'ultimo zero crossing con derivata positiva.
Il segnale compreso tra i due limiti e' quello che cerchi.

Prima di fare la FFT dovresti comunque finestrare "un minimo" il segnale.