Why is the output of FFTSHIFT shifted by one when used with the PSDFREQVEC function?
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am using FFTSHIFT on my frequency spectrum and plotting it over the frequency range specified in PSDFREQVEC.
When I execute the following commands:
Fs = 1024; % Sampling frequency
t = (0:1/Fs:(1-1/Fs))'; % Time vector of 1 second
x = 1 + 3*sin(2*pi*t*200); % Create a sine wave of 200 Hz with dc component
NFFT = 2^(nextpow2(length(x)));% Use next highest power of 2 greater than or equal length(x) to calculate FFT.
FFTX = fftshift(fft(x,NFFT)); % Take fft, padding with zeros so that length(FFTX) is equal to NFFT
MX = abs(FFTX); % Take the magnitude of fft of x
MX = MX/length(x); % Scale the fft so that it is not a function of the length of x
FreqVec = psdfreqvec(NFFT,Fs,'negnpos');
plot(FreqVec,MX,'ro')
grid on
xlabel('Frequency (Hz)')
ylabel('Amplitude')
The frequency spectrum is plotted incorrectly.
The zero frequency component is returned at frequency 1Hz. FFTSHIFT causes the whole frequency spectrum to be shifted by one frequency bin.
Réponse acceptée
MathWorks Support Team
le 27 Juin 2009
This behavior is due to the different conventions used by PSDFREQVEC to specify the frequency vector. FFTSHIFT shifts frequency components 1:512 to 513:1024 and components 513:1024 to 1:512. The zero frequency component occurs at the 513th array index. PSDFREQVEC uses the convention that the zero frequency component is at the 512th index.
To work around this issue, avoid using PSDFREQVEC with FFTSHIFT. The following commands return a frequency vector that is consistent with the FFTSHIFT convention for plotting frequency spectra:
FreqVec2 = linspace(-Fs/2,Fs/2-1,NFFT);
figure,plot(FreqVec2,MX,'ro')
grid on
xlabel('Frequency (Hz)')
ylabel('Amplitude')
You can also use FFTSHIFT itself to construct the frequency vector. The frequency vector can be constructed as follows:
dftFreqVec = (0:NFFT-1)*Fs/NFFT;
shiftedFreqVec = fftshift(dftFreqVec);
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Fourier Analysis and Filtering dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!