Problema FFT sul Matlab Signal Processing Toolbox

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto Utentemctn
55 1 5
New entry
New entry
Messaggi: 51
Iscritto il: 3 dic 2010, 10:26
0
voti

[1] Problema FFT sul Matlab Signal Processing Toolbox

Messaggioda Foto Utentemctn » 17 feb 2011, 13:10

Salve. Calcolando la FFT di un semplice segnale sinusoidale, ho riscontrato dei problemi nell'utilizzo del Signal Processing Toolbox di Matlab che non so se attribuire ad una mia errata scrittura del codice o ad un bug del toolbox stesso :?

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:

Cattura0.PNG
Cattura0.PNG (48.21 KiB) Visto 1937 volte


Confrontando il risultato con quello prodotto dall'SPToolbox IN QUESTO CASO non c'è alcun problema, infatti:

Cattura0lin.PNG
Cattura0lin.PNG (60.02 KiB) Visto 1937 volte


Cattura0dBsp.PNG
Cattura0dBsp.PNG (58.74 KiB) Visto 1933 volte


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:
Immagine

Mentre quelli ottenuti dal toolbox sono:

In scala lineare
Immagine
Come si nota lo scalamento è dell'ordine di 10^{-5}

In dB:
Immagine

Qualcuno saprebbe spiegarmi il perché? Grazie.

Avatar utente
Foto UtenteRozana
0 1
Messaggi: 1
Iscritto il: 26 mar 2011, 20:40
0
voti

[2] Re: Problema FFT sul Matlab Signal Processing Toolbox

Messaggioda Foto UtenteRozana » 26 mar 2011, 20:46

Salve.
Scusi per caso ha risolto questo problema? Mi trovo nelle stesse condizioni.
Grazie

Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes
2
voti

[3] Re: Problema FFT sul Matlab Signal Processing Toolbox

Messaggioda Foto Utentedimaios » 16 apr 2011, 10:46

Per cortesia inserite alcune informazioni utili che mancano per rispondere :

1. Versione di Matlab utilizzata
2. Versione del Signal Processing Toolbox utilizzato

Grazie.


Torna a “Programmi applicativi: simulatori, CAD ed altro”