I can't place the fft curve at the signal frequency exactly. There's been a slight deviation of the fft peak at that frequency

1 visualización (últimos 30 días)
%program to find the fft of sine function of frequency 1GHz
%Available information , frquency=1GHz
clear all
close all
clc
fmax=1e9; %maximun frequency of the signal
fs=60*fmax;
ts=1/fs; %time increment
T=10e-9; %total time signal exists
TA=(-T/2:ts:T/2); %time axis
N=numel(TA);
f=1e9; %frequency of the signal
Y=sin(2*pi*f*TA); %sine function
plot(TA,Y);
FA=(-N/2:N/2-1)*fs/N; %frequency axis
FFT=fft(Y); %fourier transform of the signal
figure;
plot(FA,fftshift(abs(FFT)));
xlim([-2e9 2e9]);
xline(-1e9);
As shown below there's a slight deviation at the peak of the fft curve, I can't figure why there is deviation at the peak
Isn't the peak supposed to be at exactly at 1GHz.
xline(1e9);

Respuesta aceptada

Paul
Paul el 4 de Mayo de 2024
Editada: Paul el 4 de Mayo de 2024
fmax=1e9; %maximun frequency of the signal
fs=60*fmax;
ts=1/fs; %time increment
T=10e-9; %total time signal exists
TA=(-T/2:ts:T/2); %time axis
N=numel(TA)
N = 601
f=1e9; %frequency of the signal
Y=sin(2*pi*f*TA); %sine function
plot(TA,Y);
This expression for FA is incorrect when N is odd (601)
FA=(-N/2:N/2-1)*fs/N; %frequency axis
The correct expression for N odd is
FA = (-(N-1)/2:(N-1)/2)/N*fs;
A general expression that works for N odd or even is
FA = ((0:N-1) - floor(N/2))/N*fs;
Use ifftshift on Y prior to the call to fft if the phase of the result is important
FFT=fft(Y); %fourier transform of the signal
figure;
plot(FA,fftshift(abs(FFT)),'-o');
xlim([-2e9 2e9]);
xline(-1e9);
The small-but-nonzero points around the peaks arise because the discrete-time period of the sampled signal is P = 60, but the number of points in the data is 601, which is not an integer multiple of the period.

Más respuestas (0)

Categorías

Más información sobre Fourier Analysis and Filtering en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by