Il problema sorge nel momento in cui confronto il risultato di uno script che calcola la FFT, con quello fornito dall' SPTool. Sottolineo che ho riutilizzato uno script sulla FFT presente nell'help di Matlab, non cambiando quasi nulla.
Questo lo script in questione:
Codice: Seleziona tutto
Fs = 1024; % Sampling frequency
t = 0:1/Fs:1-1/Fs;
% Create a sine wave of 200 Hz.
x = sin(2*pi*t*200);
% Use next highest power of 2 greater than or equal to length(x) to calculate FFT.
nfft= 2^(nextpow2(length(x)));
% Take fft, padding with zeros so that length(fftx) is equal to nfft
fftx = fft(x,nfft);
% Calculate the numberof unique points
NumUniquePts = ceil((nfft+1)/2);
% FFT is symmetric, throw away second half
fftx = fftx(1:NumUniquePts);
% Take the magnitude of fft of x and scale the fft so that it is not a function of the length of x
mx = abs(fftx)/(2*length(x));
%!! Si noti che il fattore 2 a moltiplicare length(x) è stato aggiunto solo per rendere il risultato dell'ampiezza della FFT compatibile con quella del SPTool, dato che questo (non so per quale motivo) dà l'ampiezza non dimezzata come dovrebbe essere, ma divisa per 4.
% This is an evenly spaced frequency vector with NumUniquePts points.
f = (0:NumUniquePts-1)*Fs/nfft;
% Generate the plot, title and labels.
subplot(2,1,1)
plot(f,mx);
title('Spectrum of a 200Hz Sine Wave');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(2,1,2)
plot(f,20*log10(mx));Il risultato di questo script è il seguente:
Confrontando il risultato con quello prodotto dall'SPToolbox IN QUESTO CASO non c'è alcun problema, infatti:
Come è possibile notare le ampiezze in dB e in scala lineare corrispondono.
Se invece provo a modificare la frequenza del segnale portandola a 1MHz, modificando anche la frequenza di campionamento e l'intervallo di segnale campionato:
Codice: Seleziona tutto
Fs = 5.12e6; % Sampling frequency
t = 0:1/Fs:1e-4-1/Fs;
% Create a sine wave of 1 MHz.
x = sin(2*pi*t*1e6); si verifica il problema in questione: l'ampiezza del grafico della FFT ottenuto dal ToolBox presenta uno scalamento esagerato in ampiezza (che ritengo errato, dato che la trasformata di fourier di un segnale sinusoidale corrisponde ad una delta di Dirac la cui ampiezza è la metà di quella del segnale nel dominio del tempo), rispetto a quello ottenuto dal mio script.
Questo è il grafico ottenuto con lo script:

Mentre quelli ottenuti dal toolbox sono:
In scala lineare

Come si nota lo scalamento è dell'ordine di

In dB:

Qualcuno saprebbe spiegarmi il perché? Grazie.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



