fft importance of time sampled
Show older comments
I guessed that the longer one samples, the most exact result with fft. And so it seems to do with frequency, but not at all with amplitude. The amplitude decreases the longer the time sampled. Did I do something wrong ? Is this reasonable? Thanks to any help
% T=[.01 .02 .1 .2 1];
% T=[1:10]
T=[1 5 10];
n=10; % maximal number of harmonic
freq = 5;
Fs = 150e4; % Sampling frequency (frecuencia de muestreo)
nfft = 1e7; % Length of FFT % number of fft bins
tic
for m=1:length(T)
t = 0:1/Fs:T(m); % Time vector of 1 second
x = cos(2*pi*t*freq); % sine wave of f Hz.
x = x-mean(x);% restamos de la fcn 'x' su DC offset
figure(1);
subplot(length(T),1,m);
plot(t,x,'.');
% Take fft, padding with zeros so that length(X) is equal to nfft
X = fft(x,nfft);
% FFT is symmetric, throw away second half
X = X(1:nfft/2);
% Scaling is done here using the number of samples: length(x)/2
X=X/(length(x)/2);
% Take the magnitude of fft of x
mx = abs(X);
% Frequency vector
f_fft = (0:nfft/2-1)*Fs/nfft;
f_Axis=f_fft(1:nfft/2);
% picos de amplitud
pks= findpeaks(mx(1:nfft/2));
n=min(n,length(pks));
pks_sort=sort(pks,'descend');% vector de picos
for k = 1:n
locs=find(mx(1:nfft/2)==pks_sort(k));
f(k)=f_Axis(locs);
end
% bar plot freq y magnitude
figure
uds='Amp';
pks_sort=pks_sort(:); % to make it column array for text of bar plot
f=f(:); % to make it column array for text of bar plot
subplot(1,2,1)
bar(pks_sort(1:n),'r');
ylabel({sprintf('Amplitude (%s)'...
,uds)},'fontweight','bold','fontsize',16);
text(1:n,pks_sort(1:n),num2str(pks_sort(1:n),'%.2f'),...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
subplot(1,2,2)
bar(f(1:n),'b');
ylabel('Frequency (Hz)','fontweight','bold','fontsize',16);
text(1:n,f(1:n),num2str(f(1:n),'%.2f'),...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
bar3d_pks_sort(m,:)=pks_sort(1:n);
bar3d_f(m,:)=f(:);
end
figure;
col(1,:)=[0 0 1]; col(2,:)=[0 .5 0];
plot(bar3d_pks_sort(:,1),'-+','Color',col(1,:),'Linewidth',2);
h1 = gca;
h2 = axes('Position',get(h1,'Position'));
plot(bar3d_f(:,1),'-o','Color',col(2,:),'Linewidth',2);
set(h1,'YColor',col(1,:))
set(h2,'YAxisLocation','right','Color','none','XTickLabel',[],'YColor',col(2,:))
set(h2,'YAxisLocation','right','Color','none','XTickLabel',[])
Accepted Answer
More Answers (0)
Categories
Find more on Fourier Analysis and Filtering in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!