FFT in matlab
Inviato: 25 ott 2013, 23:54
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:
Che poi ho richiamato nel seguente modo:
Dove simout è il segnale che prendo da uno scope di simulink.
Ottengo il grafico allegato.
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
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.
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