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 次查看(过去 30 天)
显示 更早的评论
%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);
0 个评论
采纳的回答
Paul
2024-5-4
编辑:Paul
2024-5-4
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);
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;
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!