improving result of FFT

13 views (last 30 days)
imran khan
imran khan on 5 Nov 2019
Commented: imran khan on 7 Nov 2019
Dear fellows i want to achieve good frequency resolution by adding this command in my code n = 2^nextpow2() but i dont know how to add in my code can anybody help me please.please don't change sampling frequency=36000 and bode=1000.
clc,close all,clear all
codn=100;
% fc=6e+3;
fs=36000;
bode=1000;
code=round(rand(1,codn));
code_len=round(1/bode/(1/fs))
for ii=1:codn
x((ii-1)*code_len+1:code_len*ii)=code(ii)
end
x2 = x-(1/2) % get rid of most of the dc peak
% set up time and frequency arrays
length(x)
N = length(x)
delt = 1/fs;
delf = fs/N;
tvec = (1:N)*delt;
fvec = (-N/2:N/2-1)*delf ; % shifted frequency array
figure(1)
plot(tvec,x2(1,:)+0.5)
title('orignal baseband')
xlabel('time');
ylabel('amplitude')
ylim([-1 1.5]);
y = fftshift(fft(x2/N));
z=abs(y);
figure(2)
plot(fvec,abs(y))
title('FFT')
xlabel('frequency')
ylabel('amplitude')
figure(3)
z=y;
z(abs(fvec)>=50& abs(fvec)<=150)=0
plot(fvec,abs(z))
xlabel('frequency removed from 50 to 150 HZ');
ylabel('amplitude')
figure(4)
zf=fftshift(z)*N;
zifft=ifft(zf)+0.5;
plot(tvec,abs(zifft))
ylim([-1 1.5])
title('recovered signal')
xlabel('time');
ylabel('amplitude')

Answers (1)

Daniel M
Daniel M on 5 Nov 2019
You'll want to use it as the second input to the fft. This will affect your frequency vector fvec though.
n = 2^nextpow2(N);
y = fftshift(fft(x2,n)); % you can choose to normalize x2 by 1/n if you want
  5 Comments
Daniel M
Daniel M on 6 Nov 2019
You can follow the second example on the document page for fft. It will demonstrate it more clearly than I will here.
imran khan
imran khan on 7 Nov 2019
Dear danieli have taken the idea from matlab example which you send me in your link and i modified it but the problem is that i can't rectify me error

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!